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

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

  1. CarLCas

    CarLCas Известный пользователь

    Регистрация:
    12.07.13
    Сообщения:
    143
    Лайки:
    29
    Репутация:
    16
    Определи самую длинную строку, получи её ширину в пикселях, возьми получение значение+Х текста получишь Х для линии, сделай линию вниз.
     
    Последние данные очков репутации:
    REJJ: 1 Очко 20 окт 2016
    #1841
  2. Woofing Giraffe

    Woofing Giraffe Известный пользователь

    Регистрация:
    14.06.15
    Сообщения:
    376
    Лайки:
    45
    Репутация:
    14
    Чем отличаются знаки форматирования %d и %i?
     
    #1842
  3. iAmerican

    Проверенный

    Регистрация:
    17.02.14
    Сообщения:
    324
    Лайки:
    65
    Репутация:
    11
    нечем , имеют разницу только при вводе scanf()
     
    #1843
  4. max20216

    max20216 Пользователь

    Регистрация:
    15.06.13
    Сообщения:
    20
    Лайки:
    4
    Репутация:
    0
    Visual Studio 2015 подойдет?
     
    #1844
  5. DarkP1xel

    DarkP1xel Δ9
    BH Team

    Регистрация:
    17.06.13
    Сообщения:
    2.059
    Лайки:
    1.238
    Репутация:
    327
  6. DarkExorcist

    DarkExorcist Известный пользователь

    Регистрация:
    21.05.14
    Сообщения:
    77
    Лайки:
    3
    Репутация:
    2
    как узнать, что ты убил игрока?
     
    #1846
  7. Woofing Giraffe

    Woofing Giraffe Известный пользователь

    Регистрация:
    14.06.15
    Сообщения:
    376
    Лайки:
    45
    Репутация:
    14
    RPC_ScrDeathMessage хукай
     
    #1847
  8. 2Shae

    2Shae Известный пользователь

    Регистрация:
    14.05.14
    Сообщения:
    103
    Лайки:
    5
    Репутация:
    4
    Почему RPC_GiveTakeDamage выдаёт неверный дамаг? К примеру, наноситься урон 5, но RPC_GiveTakeDamage отображает 1.
     
    #1848
  9. Dark_Knight

    Dark_Knight РКН Тян на страже твоей анальной девственности.
    Друг

    Регистрация:
    18.03.13
    Сообщения:
    2.342
    Лайки:
    665
    Репутация:
    199
    Потому что сервер сам свои значения может снимать. Ты хоть верно читаешь?
     
    #1849
  10. 2Shae

    2Shae Известный пользователь

    Регистрация:
    14.05.14
    Сообщения:
    103
    Лайки:
    5
    Репутация:
    4
    
    if (params->packetId == RPCEnumeration::RPC_GiveTakeDamage)
        {
            bool giveTake;
            WORD playerID;
            float amount;
            DWORD weaponID;
    
            params->bitStream->ResetReadPointer();
            params->bitStream->Read(giveTake);
            params->bitStream->Read(playerID);
            params->bitStream->Read(amount);
            params->bitStream->Read(weaponID);
            params->bitStream->ResetReadPointer();
    }
    
    Например, удары кулаком наносят 6 урона, но отображает либо 1, либо 3, либо 6. Рандомно крч. Чё за фигня?. :D
     
    #1850
    Последнее редактирование: 6 сен 2016
  11. Dark_Knight

    Dark_Knight РКН Тян на страже твоей анальной девственности.
    Друг

    Регистрация:
    18.03.13
    Сообщения:
    2.342
    Лайки:
    665
    Репутация:
    199
    bool type;
    WORD playerID;
    float damage;
    int gun, bodyID;
    params->bitStream->ResetReadPointer();
    params->bitStream->Read(type);
    params->bitStream->Read(playerID);
    params->bitStream->Read(damage);
    params->bitStream->Read(gun);
    params->bitStream->Read(bodyID);
     
    #1851
  12. QGate

    QGate Известный пользователь

    Регистрация:
    27.03.16
    Сообщения:
    78
    Лайки:
    0
    Репутация:
    0
    Можно ли как-то выбрать нужный пункт в диалоге не прибегая к использованию эмуляции нажатия клавиши?
     
    #1852
  13. Rorian

    Rorian Пользователь

    Регистрация:
    11.09.14
    Сообщения:
    20
    Лайки:
    6
    Репутация:
    1
    Возможно. Через RPC
     
    #1853
  14. QGate

    QGate Известный пользователь

    Регистрация:
    27.03.16
    Сообщения:
    78
    Лайки:
    0
    Репутация:
    0
    А примера не будет?
     
    #1854
  15. 2Shae

    2Shae Известный пользователь

    Регистрация:
    14.05.14
    Сообщения:
    103
    Лайки:
    5
    Репутация:
    4
    Здрасти.
    for (int m = 0; m <= 999; n++)
    {
        if (typeOne == m)
        {
            for (int n = 0; n <= 9999; n++)
            {
                if (typeTwo == typeThree[n])
                {
                    SF->getSAMP()->getChat()->AddChatMessage(-1, "One: %d, Two: %d, Three: %s", typeOne, typeTwo, typeThree[n]);
                }
            }
        }
    }
    Почему крашит? Нужно вывести текст из массива typeThree. (код для примера)
     
    #1855
  16. SR_team

    SR_team BH Team
    BH Team

    Регистрация:
    26.10.13
    Сообщения:
    2.611
    Лайки:
    1.573
    Репутация:
    418
    ты странный. ты в цикле ищешь число, которое совпадает с числом записаным в уже существующую переменную. Зачем???
     
    #1856
  17. 2Shae

    2Shae Известный пользователь

    Регистрация:
    14.05.14
    Сообщения:
    103
    Лайки:
    5
    Репутация:
    4
    Да бля, сонный с выебаными мозгами писал. Исправил:
    for (int m = 0; m <= 999; n++)
    {
        if (typeOne == m)
        {
            for (int n = 0; n <= 9999; n++)
            {
                if (typeTwo == typeThree[n])
                {
                    SF->getSAMP()->getChat()->AddChatMessage(-1, "One: %d, Two: %d, Three: %d, Four: %s", typeOne, typeTwo, typeThree, typeFour[n]);
                }
            }
        }
    }
    Нужно вывести текст из массива typeFour, меня какого-то фига крашит.
     
    #1857
    Последнее редактирование: 22 сен 2016
  18. SR_team

    SR_team BH Team
    BH Team

    Регистрация:
    26.10.13
    Сообщения:
    2.611
    Лайки:
    1.573
    Репутация:
    418
    тебе меня не обмануть.
     
    #1858
  19. 2Shae

    2Shae Известный пользователь

    Регистрация:
    14.05.14
    Сообщения:
    103
    Лайки:
    5
    Репутация:
    4
    SF->getSAMP()->getChat()->AddChatMessage(-1, "One: %d, Two: %d, Three: %d, Four: %s", typeOne, typeTwo, typeThree, typeFour[n]);
     
    #1859
  20. 2Shae

    2Shae Известный пользователь

    Регистрация:
    14.05.14
    Сообщения:
    103
    Лайки:
    5
    Репутация:
    4
    Dark_Knight помог крч.
     
    #1860
  21. Nintendo

    Nintendo Пользователь

    Регистрация:
    19.08.16
    Сообщения:
    9
    Лайки:
    0
    Репутация:
    0
    как нарисовать 3д текст? над головой
     
    #1861
    Последнее редактирование: 22 сен 2016
  22. iAmerican

    Проверенный

    Регистрация:
    17.02.14
    Сообщения:
    324
    Лайки:
    65
    Репутация:
    11
    Ну я делал запарным методом.
    Получал координаты кости головы.
    Потом была формула которая в зависимости от того на какой дистанции игрок , прибавляла число к координате головы.
    Ну как то так , думаю можно и проще . Код если нужен , в лс пиши.
     
    #1862
  23. MISTER_GONWIK

    Регистрация:
    09.03.13
    Сообщения:
    990
    Лайки:
    1.050
    Репутация:
    637
    SF->getSAMP()->getInfo()->pPools->pText3D->Create3DText(..);
     
    #1863
  24. Nintendo

    Nintendo Пользователь

    Регистрация:
    19.08.16
    Сообщения:
    9
    Лайки:
    0
    Репутация:
    0
    Не рендрится нихуя.
    bool CALLBACK outcomingRPC( stRakNetHookParams *params ) 
    {
        if( params->packetId == RPCEnumeration::RPC_GiveTakeDamage)
        if(lol == true)
        {
       params->bitStream->Read(bGiveOrTake); 
       params->bitStream->Read(iPlayerID); 
       params->bitStream->Read(fAmmount); 
       params->bitStream->Read(iWeaponID); 
       params->bitStream->Read(iBodyPart);
       
    
        if(!bGiveOrTake)
        {
             
            SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(245, 184, 0), "{006400}Попал по: %d | Нанес: %.f | Оружие: %d | Часть тела: %d ",iPlayerID, fAmmount, iWeaponID, iBodyPart);  
       
    
            sprintf(buf, "{006400}/ - %.2f / ", fAmmount );
            rTimer = GetTickCount() + 2000;
        }
        else
        {
            SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(245, 184, 0), "{8b0000}Урон от: %d | Нанес по мне: %.f | Оружие: %d | Часть тела: %d ",iPlayerID, fAmmount, iWeaponID, iBodyPart);  
           
        }
    };
    
        return true; 
    };
    
    
    bool CALLBACK Present ( CONST RECT *pSourceRect, CONST RECT *pDestRect, HWND hDestWindowOverride,
                                     CONST RGNDATA *pDirtyRegion )
    {
        if( SUCCEEDED( SF->getRender()->BeginRender()  ) ) 
         if (rTimer >= GetTickCount())
          {
            float sx, sy;
                SF->getGame()->convert3DCoordsToScreen(SF->getSAMP()->getPlayers()->GetOnFootData(iPlayerID)->fPosition[0],SF->getSAMP()->getPlayers()->GetOnFootData(iPlayerID)->fPosition[1],SF->getSAMP()->getPlayers()->GetOnFootData(iPlayerID)->fPosition[2]+1,&sx,&sy);       
            pFont->Print(buf, sx, sy, false );
       
          SF->getRender()->EndRender();    
           
        };
    
        return true; 
    };
     
    #1864
  25. Dark_Knight

    Dark_Knight РКН Тян на страже твоей анальной девственности.
    Друг

    Регистрация:
    18.03.13
    Сообщения:
    2.342
    Лайки:
    665
    Репутация:
    199
    А ты зарегистрировал все коллбеки?
     
    #1865
  26. Nintendo

    Nintendo Пользователь

    Регистрация:
    19.08.16
    Сообщения:
    9
    Лайки:
    0
    Репутация:
    0
    SF->getRakNet()->registerRakNetCallback( RakNetScriptHookType::RAKHOOK_TYPE_OUTCOMING_RPC, outcomingRPC );  
            pFont = SF->getRender()->CreateNewFont("Tahoma", 5, FCR_BORDER );
            SF->getRender()->registerD3DCallback( eDirect3DDeviceMethods::D3DMETHOD_PRESENT, Present );
            SF->getSAMP()->registerChatCommand( "dinf", testt );
     
    #1866
  27. iAmerican

    Проверенный

    Регистрация:
    17.02.14
    Сообщения:
    324
    Лайки:
    65
    Репутация:
    11
    Уверен что таймер работает как надо?
     
    #1867
  28. Nintendo

    Nintendo Пользователь

    Регистрация:
    19.08.16
    Сообщения:
    9
    Лайки:
    0
    Репутация:
    0
    Вроде как
     
    #1868
  29. Woofing Giraffe

    Woofing Giraffe Известный пользователь

    Регистрация:
    14.06.15
    Сообщения:
    376
    Лайки:
    45
    Репутация:
    14
    Мож ты 5-ый размер не видишь просто?
     
    #1869
  30. MISTER_GONWIK

    Регистрация:
    09.03.13
    Сообщения:
    990
    Лайки:
    1.050
    Репутация:
    637
    я вижу "if(lol ==true)", он вообще активен?
     
    #1870
  31. Woofing Giraffe

    Woofing Giraffe Известный пользователь

    Регистрация:
    14.06.15
    Сообщения:
    376
    Лайки:
    45
    Репутация:
    14
    Как преобразовать вектор скорости машины в одно число? Чтоб было тоже самое что 02E3 возвращает
     
    #1871
  32. MISTER_GONWIK

    Регистрация:
    09.03.13
    Сообщения:
    990
    Лайки:
    1.050
    Репутация:
    637
    загугли
     
    #1872
  33. Nintendo

    Nintendo Пользователь

    Регистрация:
    19.08.16
    Сообщения:
    9
    Лайки:
    0
    Репутация:
    0
    Да, конечно
     
    #1873
  34. iAmerican

    Проверенный

    Регистрация:
    17.02.14
    Сообщения:
    324
    Лайки:
    65
    Репутация:
    11
    Посмотри сурс тут - http://blast.hk/threads/13382/
    хз правда что там твой 02e3 возвращает , но думаю тоже самое.
     
    #1874
    Woofing Giraffe нравится это.
  35. Dark_Knight

    Dark_Knight РКН Тян на страже твоей анальной девственности.
    Друг

    Регистрация:
    18.03.13
    Сообщения:
    2.342
    Лайки:
    665
    Репутация:
    199
    float speed = sqrt(pow(car->speed[0], 2) + pow(car->speed[1], 2) + pow(car->speed[2], 2));
     
    #1875
    Woofing Giraffe нравится это.
  36. Nintendo

    Nintendo Пользователь

    Регистрация:
    19.08.16
    Сообщения:
    9
    Лайки:
    0
    Репутация:
    0
    Вот весь код
    #include <windows.h>
    #include <string>
    #include <assert.h>
    #include <process.h>
    
    #include "SAMPFUNCS_API.h"
    #include "game_api\game_api.h"
    
    SAMPFUNCS *SF = new SAMPFUNCS();
    bool lol;
    bool bGiveOrTake;
    short int iPlayerID;
    float fAmmount;
    int iWeaponID, iBodyPart;
    DWORD rTimer;
    stFontInfo *pFont;
    char buf[128];
    
    bool CALLBACK outcomingRPC( stRakNetHookParams *params )
    {
        if( params->packetId == RPCEnumeration::RPC_GiveTakeDamage)
        if(lol == true)
        {
       params->bitStream->Read(bGiveOrTake);
       params->bitStream->Read(iPlayerID);
       params->bitStream->Read(fAmmount);
       params->bitStream->Read(iWeaponID);
       params->bitStream->Read(iBodyPart);
     
    
        if(!bGiveOrTake)
        {
           
            SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(245, 184, 0), "{006400}Попал по: %d | Нанес: %.f | Оружие: %d | Часть тела: %d ",iPlayerID, fAmmount, iWeaponID, iBodyPart);
     
    
            sprintf(buf, "{006400}/ - %.2f / ", fAmmount );
            rTimer = GetTickCount() + 2000;
        }
        else
        {
            SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(245, 184, 0), "{8b0000}Урон от: %d | Нанес по мне: %.f | Оружие: %d | Часть тела: %d ",iPlayerID, fAmmount, iWeaponID, iBodyPart);
         
        }
    };
    
        return true;
    };
    
    
    bool CALLBACK Present ( CONST RECT *pSourceRect, CONST RECT *pDestRect, HWND hDestWindowOverride,
                                     CONST RGNDATA *pDirtyRegion )
    {
        if( SUCCEEDED( SF->getRender()->BeginRender() && lol == true))
         if (rTimer >= GetTickCount())
          {
            float sx, sy;
                SF->getGame()->convert3DCoordsToScreen(SF->getSAMP()->getPlayers()->GetOnFootData(iPlayerID)->fPosition[0],SF->getSAMP()->getPlayers()->GetOnFootData(iPlayerID)->fPosition[1],SF->getSAMP()->getPlayers()->GetOnFootData(iPlayerID)->fPosition[2]+1,&sx,&sy);     
            pFont->Print(buf, sx, sy, false );
     
          SF->getRender()->EndRender();  
         
        };
    
        return true;
    };
    
    
    void CALLBACK testt( std::string param )
    {
    
        lol ^= true;
    
     
     
        if(lol)
            SF->Log("{006400}ON");
        else
            SF->Log("{8b0000}OFF");
    
    }
    
    void CALLBACK mainloop()
    {
        static bool init = false;
        if (!init)
        {
            if (GAME == nullptr)
                return;
            if (GAME->GetSystemState() != eSystemState::GS_PLAYING_GAME)
                return;
            if (!SF->getSAMP()->IsInitialized())
                return;
        
            SF->getRakNet()->registerRakNetCallback( RakNetScriptHookType::RAKHOOK_TYPE_OUTCOMING_RPC, outcomingRPC );
            pFont = SF->getRender()->CreateNewFont("Tahoma", 5, FCR_BORDER );
            SF->getRender()->registerD3DCallback( eDirect3DDeviceMethods::D3DMETHOD_PRESENT, Present );
            SF->getSAMP()->registerChatCommand( "dinf", testt );
    
            init = true;
        }
    }
    
    BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved)
    {
        switch (dwReasonForCall)
        {
            case DLL_PROCESS_ATTACH:
                SF->initPlugin(mainloop, hModule);
                break;
            case DLL_THREAD_ATTACH:
            case DLL_THREAD_DETACH:
            case DLL_PROCESS_DETACH:
                break;
        }
        return TRUE;
    }
     
    #1876
  37. Dark_Knight

    Dark_Knight РКН Тян на страже твоей анальной девственности.
    Друг

    Регистрация:
    18.03.13
    Сообщения:
    2.342
    Лайки:
    665
    Репутация:
    199
    Я или идиот, или так не правильно же будет?
    if( SUCCEEDED( SF->getRender()->BeginRender()&& lol ==true))
    замени на
    if( SUCCEEDED( SF->getRender()->BeginRender()) && lol )
     
    #1877
  38. Nintendo

    Nintendo Пользователь

    Регистрация:
    19.08.16
    Сообщения:
    9
    Лайки:
    0
    Репутация:
    0
    Сделал как ты сказал, после чего начал стрелять в игрока нету рендера, и потом краш.
     
    #1878
  39. Dark_Knight

    Dark_Knight РКН Тян на страже твоей анальной девственности.
    Друг

    Регистрация:
    18.03.13
    Сообщения:
    2.342
    Лайки:
    665
    Репутация:
    199
    Уже на верном пути тогда. Проверяй что актер существует, а потом только уже получай координаты.
     
    #1879
  40. DarkExorcist

    DarkExorcist Известный пользователь

    Регистрация:
    21.05.14
    Сообщения:
    77
    Лайки:
    3
    Репутация:
    2
    BitStream bsClass;
    bsClass.Write((DWORD)playerid);
    bsClass.Write((DWORD)0xFF0000FF);
    bsClass.Write((float)100.0);
    bsClass.Write((DWORD)10000);
    bsClass.Write("1111",5);
    SF->getRakNet()->emulateRecvRPC(59, &bsClass);
    При перехвате все работает, а вот при эмуляции - нет. Что не так в коде?
     
    #1880