Другое С/С++ Вопрос - Ответ

Dimoz

Новичок
98
16
SF API: вылетает игра при выполнении вот такой штуки:
PHP:
float * pos[2];
SF->getGame()->convert3DCoordsToScreen(0.0, 0.0, 10.0, pos[0], pos[1]);
вылет, даже если смотреть на координаты 0,0,10.
Прошу помочь.
 

NarutoUA

NarutoUA
BH Team
692
1,549
PHP:
SF->getGame()->convert3DCoordsToScreen(0.0, 0.0, 10.0, &pos[0], &pos[1]);
Частично неправильно, у него ведь инициализированы указатели
SF API: вылетает игра при выполнении вот такой штуки:
PHP:
float  pos[2];
SF->getGame()->convert3DCoordsToScreen(0.0, 0.0, 10.0, &pos[0], &pos[1]);
вылет, даже если смотреть на координаты 0,0,10.
Прошу помочь.
Вроде должно работать
 
  • Нравится
Реакции: Dimoz

Dimoz

Новичок
98
16
Частично неправильно, у него ведь инициализированы указатели

Вроде должно работать
Спасибо, но я догадался убрать звездочку сам)

И еще вопрос из разряда нубо:
крашит игра при выполнении следующего кода:
PHP:
float pos[3];
for (int i = MAX_PLAYERS; i != 0; i--)
    {
        if (SF->getSAMP()->getPlayers()->GetActorHandleFromSAMPPlayerID(i) == -1) continue;
        stRemotePlayer *pPlayer = SF->getSAMP()->getPlayers()->pRemotePlayer[i];
        pos[0] = pPlayer->pPlayerData->fOnFootPos[0];
        pos[1] = pPlayer->pPlayerData->fOnFootPos[1];
        pos[2] = pPlayer->pPlayerData->fOnFootPos[2];
        break;
}
Может кто помочь?
 

NarutoUA

NarutoUA
BH Team
692
1,549
Спасибо, но я догадался убрать звездочку сам)

И еще вопрос из разряда нубо:
крашит игра при выполнении следующего кода:
PHP:
float pos[3];
for (int i = MAX_PLAYERS; i != 0; i--) // если не ошибаюсь, MAX_PLAYERS = 1004, а не 1000, поэтому лучше for (int i = 0; i<=1000; i++)
    {
        if (SF->getSAMP()->getPlayers()->GetActorHandleFromSAMPPlayerID(i) == -1) continue;
        stRemotePlayer *pPlayer = &SF->getSAMP()->getPlayers()->pRemotePlayer[i]; // вроде так
        pos[0] = pPlayer->pPlayerData->fOnFootPos[0];
        pos[1] = pPlayer->pPlayerData->fOnFootPos[1];
        pos[2] = pPlayer->pPlayerData->fOnFootPos[2];
        break; // лишнее
}
Может кто помочь?
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,696
1,468
GetActorHandleFromSAMPPlayerID при невалидном игроке возвращает 0, вроде как.
 

SR_team

like pancake
BH Team
4,798
6,470
Спасибо, но я догадался убрать звездочку сам)

И еще вопрос из разряда нубо:
крашит игра при выполнении следующего кода:
PHP:
float pos[3];
for (int i = MAX_PLAYERS; i != 0; i--)
    {
        if (SF->getSAMP()->getPlayers()->GetActorHandleFromSAMPPlayerID(i) == -1) continue;
        stRemotePlayer *pPlayer = SF->getSAMP()->getPlayers()->pRemotePlayer[i];
        pos[0] = pPlayer->pPlayerData->fOnFootPos[0];
        pos[1] = pPlayer->pPlayerData->fOnFootPos[1];
        pos[2] = pPlayer->pPlayerData->fOnFootPos[2];
        break;
}
Может кто помочь?
Если ты тут пытаешься получить свои координаты, когда ты пешком, то вот так будет проще:

Pos[0] = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData.fPosition[0];
Pos[1] = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData.fPosition[1];
Pos[2] = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData.fPosition[2];
 

NarutoUA

NarutoUA
BH Team
692
1,549
Если ты тут пытаешься получить свои координаты, когда ты пешком, то вот так будет проще:

Pos[0] = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData.fPosition[0];
Pos[1] = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData.fPosition[1];
Pos[2] = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData.fPosition[2];
Так очевидно что он не свои координаты получить пытается
 

SR_team

like pancake
BH Team
4,798
6,470
Так очевидно что он не свои координаты получить пытается
ну тогда
Код:
                uint32_t null = *(int*)0xB74490;
                null += 0x4;
                null = *(int*)null;
                for (uint32_t one = 0; one < 35584; one += 0x100)
                {
                    uint32_t two = *(byte*)null;
                    null += 0x1;
                    if ((two >= 0x00) && (two < 0x80))
                    {
                        two += one;
                        int    P_id = SF->getSAMP()->getPlayers()->GetSAMPPlayerIDFromGTAHandle(Ppos_two);
                        if ((SF->getSAMP()->getPlayers()->IsPlayerDefined(P_id)) && (P_id != SF->getSAMP()->getPlayers()->sLocalPlayerID))
                        {
                            if ((SF->getSAMP()->getPlayers()->pRemotePlayer[P_id]->iIsNPC == false) && (SF->getSAMP()->getPlayers()->pRemotePlayer[P_id]->pPlayerData->iAFKState != 2))
                            {
                                CVector result;
                                typedef void(__thiscall *CPed__getBonePositionWithOffset) (void *_this, CVector *offset, int bodeId, bool includeAnim);
                                (CPed__getBonePositionWithOffset(0x5E01C0))(SF->getSAMP()->getPlayers()->pRemotePlayer[P_id]->pPlayerData->pSAMP_Actor->pGTA_Ped, &result, 1, true);
                               //resul.fX, resul.fY и resul.fZ - координаты игрока. Чекает пешком и в машине
                            }
                        }
                    }
                }