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

Тема в разделе "C/C++", создана пользователем urShadow, 5 дек 2014.

  1. Rjx13

    Rjx13 Интересующийся

    Регистрация:
    2 июн 2018
    Сообщения:
    130
    Симпатии:
    50
    Как получить ближайший ID игрока в определенном радиуса от прицела?
     
  2. CleanLegend

    Всефорумный модератор

    Регистрация:
    28 мар 2013
    Сообщения:
    290
    Симпатии:
    399
    https://blast.hk/threads/10970/#post-124093
     
    Rjx13 нравится это.
  3. DonHomka

    Друг

    Регистрация:
    8 ноя 2017
    Сообщения:
    2.344
    Симпатии:
    1.457
    @CleanLegend SF->getSAMP()->sendClickPlayer() Что отправлять вторым параметром? int source
     
  4. CleanLegend

    Всефорумный модератор

    Регистрация:
    28 мар 2013
    Сообщения:
    290
    Симпатии:
    399
    DonHomka нравится это.
  5. DonHomka

    Друг

    Регистрация:
    8 ноя 2017
    Сообщения:
    2.344
    Симпатии:
    1.457
    stRemotePlayer *player = SF->getSAMP()->getPlayers()->pRemotePlayer.iPing;
    Возвращает 0. Почему?
     
  6. Rinat_Namazov

    Rinat_Namazov ( ͡° ͜ʖ ͡°)
    Друг

    Регистрация:
    9 авг 2015
    Сообщения:
    1.119
    Симпатии:
    536
    pRemotePlayer[ID_Игрока]
     
  7. DonHomka

    Друг

    Регистрация:
    8 ноя 2017
    Сообщения:
    2.344
    Симпатии:
    1.457
    Чет не так скопировал, там есть ид игрока, возвращает 0.
     
  8. CleanLegend

    Всефорумный модератор

    Регистрация:
    28 мар 2013
    Сообщения:
    290
    Симпатии:
    399
    Вызови обновление таба
    и если тестишь на ботах, то попробуй на игроках
     
  9. DonHomka

    Друг

    Регистрация:
    8 ноя 2017
    Сообщения:
    2.344
    Симпатии:
    1.457
    да уже нашел, стоило покопаться в структуре stSAMP. UpdateScoreAndPing.
    Спасиб
     
  10. Rjx13

    Rjx13 Интересующийся

    Регистрация:
    2 июн 2018
    Сообщения:
    130
    Симпатии:
    50
    Как проверить, что локальный игрок стреляет?
    Пробовал так, но не работает :/
    if (PEDSELF->GetWeapon(PEDSELF->GetCurrentWeaponSlot())->GetState() == WEAPONSTATE_FIRING) return;
     
  11. CleanLegend

    Всефорумный модератор

    Регистрация:
    28 мар 2013
    Сообщения:
    290
    Симпатии:
    399
    g_Players->pLocalPlayer->onFootData.stSampKeys.keys_secondaryFire__shoot
     
    Rjx13 нравится это.
  12. Stiopko

    Stiopko Интересующийся

    Регистрация:
    28 фев 2018
    Сообщения:
    164
    Симпатии:
    58
    Как поставить чекпоинт через sf плагин?
     
  13. Jenecheque

    Jenecheque Интересующийся

    Регистрация:
    12 окт 2014
    Сообщения:
    157
    Симпатии:
    76
    крашит игру из за того что не срабатывает деструктор игры в собейте
    версия соба 4.4.1.3, версия сампа 0.3.7-R2
     
  14. Rjx13

    Rjx13 Интересующийся

    Регистрация:
    2 июн 2018
    Сообщения:
    130
    Симпатии:
    50
    Попробуй поставить 0.3.7 R1
     
  15. LUCHARE

    LUCHARE BH Team
    Друг

    Регистрация:
    23 май 2017
    Сообщения:
    526
    Симпатии:
    601
    Stiopko и imring нравится это.
  16. Stiopko

    Stiopko Интересующийся

    Регистрация:
    28 фев 2018
    Сообщения:
    164
    Симпатии:
    58
    А хуки в сф как работают?
    Хук работает параллельно с mainloop или когда заканчиваетса mainloop.
    Просто я не знаю делать ли защиту переменных если одновременно к ним хук обратиться и mainloop?
     
  17. DonHomka

    Друг

    Регистрация:
    8 ноя 2017
    Сообщения:
    2.344
    Симпатии:
    1.457
    параллельно с мэинлуп.
     
    Stiopko нравится это.
  18. Stiopko

    Stiopko Интересующийся

    Регистрация:
    28 фев 2018
    Сообщения:
    164
    Симпатии:
    58
    А нужно делать защиту на переменные к которым обращается mainlooop и хук или в SF ето не обязательно?
     
  19. DonHomka

    Друг

    Регистрация:
    8 ноя 2017
    Сообщения:
    2.344
    Симпатии:
    1.457
    смотря что делаешь. Покажи код
     
  20. Stiopko

    Stiopko Интересующийся

    Регистрация:
    28 фев 2018
    Сообщения:
    164
    Симпатии:
    58
    https://blast.hk/threads/27029/ (Иногда просто вылетает )
     
  21. vasiliy130198

    vasiliy130198 Активный участник

    Регистрация:
    6 дек 2017
    Сообщения:
    27
    Симпатии:
    0
    Привет. Пожалуйста подскажите, не выходит правильно сделать перехват SetObjectMaterial.. Что не так, как правильно будет?

    
            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);
            }
    
    [​IMG]

    Порядок считывания в Read брал отсюда: SetObjectMaterial - SA-MP Wiki(https://wiki.sa-mp.com/wiki/SetObjectMaterial)
     
  22. ЯedЯuM

    ЯedЯuM Malware Maker

    Регистрация:
    13 мар 2016
    Сообщения:
    282
    Симпатии:
    284
    Перед чтением строки в битстриме, перед этим нужно читать её длину.
     
  23. Stiopko

    Stiopko Интересующийся

    Регистрация:
    28 фев 2018
    Сообщения:
    164
    Симпатии:
    58
    Привет. Пожалуйста подскажите, как зная кординаты точки на карте(x, y без z) повернуть нашего игрока лицом к точке?
     
    #2858 Stiopko, 10 дек 2018
    Последнее редактирование: 10 дек 2018
  24. ALF

    ALF Интересующийся

    Регистрация:
    14 ноя 2017
    Сообщения:
    114
    Симпатии:
    127
    
    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;
    
     
    #2859 ALF, 10 дек 2018
    Последнее редактирование: 10 дек 2018
    Stiopko нравится это.
  25. LaRossa

    Проверенный

    Регистрация:
    4 фев 2017
    Сообщения:
    433
    Симпатии:
    137
  26. ALF

    ALF Интересующийся

    Регистрация:
    14 ноя 2017
    Сообщения:
    114
    Симпатии:
    127
    
    SF->getSAMP()->getInfo()->pSettings->byteWorldTime_Hour = 12;
    SF->getSAMP()->getInfo()->pSettings->byteWorldTime_Minute = 10;
    
     
    LaRossa нравится это.
  27. Stiopko

    Stiopko Интересующийся

    Регистрация:
    28 фев 2018
    Сообщения:
    164
    Симпатии:
    58
    Подскажите пж, как через хук отслеживать позицию игрока?

    SF->getRakNet()->registerRakNetCallback(RakNetScriptHookType::RAKHOOK_TYPE_INCOMING_RPC, incomingRPC);
     
  28. Rjx13

    Rjx13 Интересующийся

    Регистрация:
    2 июн 2018
    Сообщения:
    130
    Симпатии:
    50
    Читаешь вот это, если тебе нужно рисовать на игроках что-то - 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 нравится это.
  29. Rjx13

    Rjx13 Интересующийся

    Регистрация:
    2 июн 2018
    Сообщения:
    130
    Симпатии:
    50
    Как получить CPed чужой машины?
     
  30. Stiopko

    Stiopko Интересующийся

    Регистрация:
    28 фев 2018
    Сообщения:
    164
    Симпатии:
    58
    Подскажите, что ему не так, установил новый SDK SAMPFUNCTS]
    upload_2018-12-16_12-52-24.png
     
  31. Rjx13

    Rjx13 Интересующийся

    Регистрация:
    2 июн 2018
    Сообщения:
    130
    Симпатии:
    50
    Stiopko нравится это.
  32. beento

    beento Постоянный участник

    Регистрация:
    17 дек 2017
    Сообщения:
    82
    Симпатии:
    2
    как инициализировать info локального игрока?

    vehicle_info *info;
            if (gm)
            {
                info->flags |= 4;
                info->flags |= 8;
                info->flags |= 64;
                info->flags |= 128;
            }
            else info->flags &= ~VEHICLE_FLAGS_INVULNERABLE;
     
    #2867 beento, 16 дек 2018
    Последнее редактирование: 16 дек 2018
  33. ALF

    ALF Интересующийся

    Регистрация:
    14 ноя 2017
    Сообщения:
    114
    Симпатии:
    127
    
    vehicle_info *info = SF->getSAMP()->getPlayers()->pLocalPlayer->pSAMP_Actor->pGTA_Ped->vehicle;
    
     
  34. beento

    beento Постоянный участник

    Регистрация:
    17 дек 2017
    Сообщения:
    82
    Симпатии:
    2
    как сделать неуязвимость к пробитию колёс на тачке в которой я сижу?
     
  35. Rjx13

    Rjx13 Интересующийся

    Регистрация:
    2 июн 2018
    Сообщения:
    130
    Симпатии:
    50
    Как получить CPed чужой машины?