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

vasiliy130198

Новичок
27
0
Привет. Пожалуйста подскажите, не выходит правильно сделать перехват SetObjectMaterial.. Что не так, как правильно будет?

C++:
        case ScriptRPCEnumeration::RPC_ScrSetObjectMaterial:
        {
            //SF->getSAMP()->getChat()->AddChatMessage(-1, "создалась какая-то текстура");
            WORD objectid, materialindex, modelid;
            char txdname[50], texturename[50];
            byte Len;

            params->bitStream->ResetReadPointer();
            params->bitStream->Read(objectid);
            params->bitStream->Read(materialindex);
            params->bitStream->Read(modelid);
            params->bitStream->Read(txdname, Len), txdname[Len] = '\0';
            params->bitStream->Read(texturename, Len), texturename[Len] = '\0';

            SF->getSAMP()->getChat()->AddChatMessage(-1, "SetObjectMaterial(myobject, %i, %i, \"%s\", \"%s\", ",
                materialindex, modelid, txdname, texturename);
        }

cfSii7v-a-s.jpg

Порядок считывания в Read брал отсюда: SetObjectMaterial - SA-MP Wiki(https://sampwiki.blast.hk/wiki/SetObjectMaterial)
 

ЯedЯuM

Malware Maker
244
304
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Привет. Пожалуйста подскажите, не выходит правильно сделать перехват SetObjectMaterial.. Что не так, как правильно будет?

C++:
        case ScriptRPCEnumeration::RPC_ScrSetObjectMaterial:
        {
            //SF->getSAMP()->getChat()->AddChatMessage(-1, "создалась какая-то текстура");
            WORD objectid, materialindex, modelid;
            char txdname[50], texturename[50];
            byte Len;

            params->bitStream->ResetReadPointer();
            params->bitStream->Read(objectid);
            params->bitStream->Read(materialindex);
            params->bitStream->Read(modelid);
            params->bitStream->Read(txdname, Len), txdname[Len] = '\0';
            params->bitStream->Read(texturename, Len), texturename[Len] = '\0';

            SF->getSAMP()->getChat()->AddChatMessage(-1, "SetObjectMaterial(myobject, %i, %i, \"%s\", \"%s\", ",
                materialindex, modelid, txdname, texturename);
        }

cfSii7v-a-s.jpg

Порядок считывания в Read брал отсюда: SetObjectMaterial - SA-MP Wiki(https://sampwiki.blast.hk/wiki/SetObjectMaterial)
Перед чтением строки в битстриме, перед этим нужно читать её длину.
 

Stiopko

Известный
Проверенный
307
218
Привет. Пожалуйста подскажите, как зная кординаты точки на карте(x, y без z) повернуть нашего игрока лицом к точке?
 
Последнее редактирование:

ALF

Известный
Проверенный
320
537
Привет. Пожалуйста подскажите, как зная кординаты точки на карте(x, y без z) повернуть нашего игрока лицом к точке?
C++:
struct actor_info *self = SF->getGame()->actorInfoGet(ACTOR_SELF, ACTOR_ALIVE);
if (self == NULL) return;

float cPos[2] = {
    self->base.matrix[4 * 3],
    self->base.matrix[4 * 3 + 1]
};

float angle = atan2(mapPos[0] - cPos[0], cPos[1] - mapPos[1]);
angle += M_PI;

self->fTargetRotation = angle;
self->fCurrentRotation = angle;
 
Последнее редактирование:
  • Нравится
Реакции: Stiopko

LaRossa

Потрачен
429
117
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Подскажите как это будет выглядеть в С++
CLEO:
0BAC: samp 0@ = get_server_settings_ptr
0C0C: 1@ = struct 0@ offset 0x2C size 1
0C0C: 2@ = struct 0@ offset 0x2D size 1
 

ALF

Известный
Проверенный
320
537
Подскажите как это будет выглядеть в С++
CLEO:
0BAC: samp 0@ = get_server_settings_ptr
0C0C: 1@ = struct 0@ offset 0x2C size 1
0C0C: 2@ = struct 0@ offset 0x2D size 1
C++:
SF->getSAMP()->getInfo()->pSettings->byteWorldTime_Hour = 12;
SF->getSAMP()->getInfo()->pSettings->byteWorldTime_Minute = 10;
 
  • Нравится
Реакции: LaRossa

Stiopko

Известный
Проверенный
307
218
Подскажите пж, как через хук отслеживать позицию игрока?

C++:
SF->getRakNet()->registerRakNetCallback(RakNetScriptHookType::RAKHOOK_TYPE_INCOMING_RPC, incomingRPC);
 

Rjx13

Известный
Проверенный
224
160
Подскажите пж, как через хук отслеживать позицию игрока?

C++:
SF->getRakNet()->registerRakNetCallback(RakNetScriptHookType::RAKHOOK_TYPE_INCOMING_RPC, incomingRPC);
Читаешь вот это, если тебе нужно рисовать на игроках что-то - https://blast.hk/threads/23412/

И вкуриваешь вот это:
Код:
bool CALLBACK Present(CONST RECT *pSourceRect, CONST RECT *pDestRect, HWND hDestWindowOverride,
    CONST RGNDATA *pDirtyRegion)
{
        if (SUCCEEDED(SF->getRender()->BeginRender())) // если рендер готов к рисованию
        {

            for (int i = 0; i < SAMP_MAX_PLAYERS; i++) // перебор всех игроков
            {
#pragma region ValidPlayer
                // проверяем каждого игрока на валидность, зону стрима
                if (SF->getSAMP()->getPlayers()->iIsListed[i] != 1) continue;
                if (SF->getSAMP()->getPlayers()->pRemotePlayer[i] == NULL) continue;
                if (SF->getSAMP()->getPlayers()->pRemotePlayer[i]->pPlayerData == NULL) continue;
                if (SF->getSAMP()->getPlayers()->pRemotePlayer[i]->pPlayerData->pSAMP_Actor == NULL) continue;
                if (SF->getSAMP()->getPlayers()->pRemotePlayer[i]->pPlayerData->pSAMP_Actor->pGTA_Ped == NULL) continue;
                // Если игрок не существует или не в зоне стрима, то пропускаем
#pragma endregion ValidPlayer

                float enpos[3]; // для координат игрока
                float screen[2]; // для экранных координат

                switch (SF->getSAMP()->getPlayers()->pRemotePlayer[i]->pPlayerData->bytePlayerState)
                {
                case PLAYER_STATE_ONFOOT:
                    enpos[0] = SF->getSAMP()->getPlayers()->pRemotePlayer[i]->pPlayerData->fOnFootPos[0]; // X
                    enpos[1] = SF->getSAMP()->getPlayers()->pRemotePlayer[i]->pPlayerData->fOnFootPos[1]; // Y
                    enpos[2] = SF->getSAMP()->getPlayers()->pRemotePlayer[i]->pPlayerData->fOnFootPos[2]; // Z

                    break;
                case PLAYER_STATE_DRIVER:
                    enpos[0] = SF->getSAMP()->getPlayers()->pRemotePlayer[i]->pPlayerData->inCarData.fPosition[0]; // X
                    enpos[1] = SF->getSAMP()->getPlayers()->pRemotePlayer[i]->pPlayerData->inCarData.fPosition[1]; // Y
                    enpos[2] = SF->getSAMP()->getPlayers()->pRemotePlayer[i]->pPlayerData->inCarData.fPosition[2]; // Z

                    break;
                case PLAYER_STATE_PASSENGER:
                    enpos[0] = SF->getSAMP()->getPlayers()->pRemotePlayer[i]->pPlayerData->passengerData.fPosition[0]; // X
                    enpos[1] = SF->getSAMP()->getPlayers()->pRemotePlayer[i]->pPlayerData->passengerData.fPosition[1]; // Y
                    enpos[2] = SF->getSAMP()->getPlayers()->pRemotePlayer[i]->pPlayerData->passengerData.fPosition[2]; // Z

                    break;
                }

                // Переводим игровые координаты в экранные
                SF->getGame()->convert3DCoordsToScreen(enpos[0], enpos[1], enpos[2], &screen[0], &screen[1]);

                // Получаем CPed
                CPed* Ped = GAME->GetPools()->GetPed((DWORD*)SF->getSAMP()->getPlayers()->pRemotePlayer[i]->pPlayerData->pSAMP_Actor->pGTA_Ped);
                // Проверяем есть ли игрок на экране
                if (Ped->IsOnScreen())
                {
                    //Тут уже делаешь, что тебе надо
                }

            }
          
            SF->getRender()->EndRender(); // завершаем рисование
        }

    return true; // возвращаем положительный результат
};
 
  • Нравится
Реакции: Stiopko

Stiopko

Известный
Проверенный
307
218
Подскажите, что ему не так, установил новый SDK SAMPFUNCTS]
upload_2018-12-16_12-52-24.png
 

-raymond-

Известный
110
9
как инициализировать info локального игрока?

C++:
vehicle_info *info;
        if (gm)
        {
            info->flags |= 4;
            info->flags |= 8;
            info->flags |= 64;
            info->flags |= 128;
        }
        else info->flags &= ~VEHICLE_FLAGS_INVULNERABLE;
 
Последнее редактирование:

ALF

Известный
Проверенный
320
537
как инициализировать info локального игрока?

C++:
vehicle_info *info;
        if (gm)
        {
            info->flags |= 4;
            info->flags |= 8;
            info->flags |= 64;
            info->flags |= 128;
        }
        else info->flags &= ~VEHICLE_FLAGS_INVULNERABLE;
Код:
vehicle_info *info = SF->getSAMP()->getPlayers()->pLocalPlayer->pSAMP_Actor->pGTA_Ped->vehicle;
 

-raymond-

Известный
110
9
как сделать неуязвимость к пробитию колёс на тачке в которой я сижу?