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

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

  1. legend2360

    legend2360   ¯\_(°□°)_/¯
    Всефорумный модератор

    Регистрация:
    23.03.2013
    Сообщения:
    2.402
    Симпатии:
    860
    Репутация:
    483
    unsigned short - playerid
    integer - color
    float - draw distance
    integer - expire time
    byte - string lenght
    char - string
     
  2. 2Shae

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

    Регистрация:
    14.05.2014
    Сообщения:
    110
    Симпатии:
    6
    Репутация:
    4
    Когда-то была темка на форуме, как использовать AntTweakBar в одном плагине, без дополнительного "0 LiteAntTweakBar.sf". Может кто сейчас подсказать как это реализовать? :D
     
  3. DarkP1xel

    DarkP1xel #ТГК
    BH Team

    Регистрация:
    17.06.2013
    Сообщения:
    2.273
    Симпатии:
    1.420
    Репутация:
    344
    А какая разница? Без этого .SF тебе все равно придется использовать .DLL.
     
  4. Apolo11

    Apolo11 Активный пользователь

    Регистрация:
    17.01.2016
    Сообщения:
    39
    Симпатии:
    8
    Репутация:
    0
    Он имеет введу, чтобы вшить атб в сам плагин, без использования дополнительных библиотек. Как в сб хаке.
     
  5. Dark_Knight

    Dark_Knight Мое лицо, когда человек верующий.
    Друг

    Регистрация:
    18.03.2013
    Сообщения:
    2.510
    Симпатии:
    763
    Репутация:
    208
  6. 2Shae

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

    Регистрация:
    14.05.2014
    Сообщения:
    110
    Симпатии:
    6
    Репутация:
    4
    Что не так? Какую-то фигню выдаёт вместо нужного текста.
    
    if (params->packetId == ScriptRPCEnumeration::RPC_ScrCreate3DTextLabel)
        {
            WORD ID;
            char text[256];
            DWORD color;
            float pos[3];
            BYTE testLOS;
    
            params->bitStream->ResetReadPointer();
            params->bitStream->Read(ID);
            params->bitStream->Read(text);
            params->bitStream->Read(color);
            params->bitStream->Read(pos);
            params->bitStream->Read(testLOS);
    
            SF->getSAMP()->getChat()->AddChatMessage(-1, "ID: %d | Text: %s", ID, text);
    
        }
    
    Если эт не то, то как считaть 3д текст?
     
    #1886 2Shae, 13 окт 2016
    Последнее редактирование: 13 окт 2016
  7. san0

    san0 (っ◔◡◔)っ ♥ #San0 ♥
    Проверенный

    Регистрация:
    15.12.2013
    Сообщения:
    310
    Симпатии:
    134
    Репутация:
    56
    
    if (params->packetId == ScriptRPCEnumeration::RPC_ScrCreate3DTextLabel)
    {
        WORD ID;
        char text[256];
    
        params->bitStream->ResetReadPointer();
        params->bitStream->Read(ID);
        params->bitStream->SetReadOffset(0xD8);
        SF->getRakNet()->DecodeString(text, 256, params->bitStream);
    
        SF->getSAMP()->getChat()->AddChatMessage(-1, "ID: %d | Text: %s", ID, text);
    }
    
    Полная структура
    id - word, color - dword, pos - float[3], DrawDist - float, testLOS - byte, unk - dword(всегда 0xFFFFFF), text - encoded
     
    2Shae нравится это.
  8. Skadi

    Skadi Активный пользователь

    Регистрация:
    03.11.2014
    Сообщения:
    43
    Симпатии:
    8
    Репутация:
    8
    Почему не перемещает за размеры 500, 500? OnMouseHover(x, y, 500, 500)
    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;
        }
    }
     
  9. iAmerican

    Проверенный

    Регистрация:
    17.02.2014
    Сообщения:
    351
    Симпатии:
    72
    Репутация:
    15
    Пример :
    
    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;
            }
        }
    Или попробуй вот так :

     
  10. Skadi

    Skadi Активный пользователь

    Регистрация:
    03.11.2014
    Сообщения:
    43
    Симпатии:
    8
    Репутация:
    8
    уже лучше, но всё равно возвращает на исходные координаты, если далеко увожу мышку.
     
  11. MoZg

    MoZg Новичок

    Регистрация:
    09.03.2015
    Сообщения:
    1
    Симпатии:
    0
    Репутация:
    0
    Подскажите, почему GetHealth() постоянно показывает 100 и только если оно берет хп моё тогда правильно показывает?!
    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)
                                {
                                    // действие
                                }
                            }
                        }
                    }
                }
     
  12. NarutoUA

    NarutoUA C++ Hokage developer
    BH Team

    Регистрация:
    26.05.2013
    Сообщения:
    615
    Симпатии:
    704
    Репутация:
    313
  13. AWRage

    Проверенный

    Регистрация:
    10.07.2015
    Сообщения:
    646
    Симпатии:
    119
    Репутация:
    57
    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]);
    А в логе получаю вот это:
    TagetID: 256 | Target: -123526324853786050000000.000, 3002534671919167300000.000, -157041088764241890000000000000000.000 | Origin: 2224.054, -0.000, -70597757144914183000000000000000.000 | Center: -2.004, 0.000, -2600830318495991100000000000000000.000
    В чем проблема?
     
  14. DarkP1xel

    DarkP1xel #ТГК
    BH Team

    Регистрация:
    17.06.2013
    Сообщения:
    2.273
    Симпатии:
    1.420
    Репутация:
    344
    там player id после ид пакета
     
  15. AWRage

    Проверенный

    Регистрация:
    10.07.2015
    Сообщения:
    646
    Симпатии:
    119
    Репутация:
    57
    Почему тогда outcoming пакет читается нормально?

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

    Как реализовать функци. get_z_angle_for_point на С++. Мне нужно отправить ложную онфут синхру.
     
    #1895 AWRage, 29 окт 2016
    Последнее редактирование модератором: 30 окт 2016
  16. 2Shae

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

    Регистрация:
    14.05.2014
    Сообщения:
    110
    Симпатии:
    6
    Репутация:
    4
    Можно ли как-то вставить текст в input диалога?
     
  17. SR_team

    SR_team BH Team
    BH Team

    Регистрация:
    26.10.2013
    Сообщения:
    2.743
    Симпатии:
    1.777
    Репутация:
    454
    юзай структуру remote player или плагин ActiveHitpoints
     
  18. andrejandrej

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

    Регистрация:
    29.12.2015
    Сообщения:
    5
    Симпатии:
    0
    Репутация:
    0
            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();
    Шо не правильно? Не могу получить нужный результат, ничего не записывается в структуру. (входящий)
     
  19. legend2360

    legend2360   ¯\_(°□°)_/¯
    Всефорумный модератор

    Регистрация:
    23.03.2013
    Сообщения:
    2.402
    Симпатии:
    860
    Репутация:
    483
    ID игрока - 2 байта
     
  20. AWRage

    Проверенный

    Регистрация:
    10.07.2015
    Сообщения:
    646
    Симпатии:
    119
    Репутация:
    57
    Какой функцией на С++ можно заменить опкод get_z_angle_for_point?
    Использовал:
    atan2(targetPos.fY - GAME->GetCamera()->GetCam(GAME->GetCamera()->GetActiveCam())->GetSource()->fY,
                targetPos.fX - GAME->GetCamera()->GetCam(GAME->GetCamera()->GetActiveCam())->GetSource()->fX);
    но это не то, наверное.
     
    #1900 AWRage, 5 ноя 2016
    Последнее редактирование: 5 ноя 2016
  21. andrejandrej

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

    Регистрация:
    29.12.2015
    Сообщения:
    5
    Симпатии:
    0
    Репутация:
    0
    Интересненький вопрос, ребят. Как к примеру отправить онфут синхру смены координат, но при этом чтобы этого не было видно другим игрокам.
     
  22. AWRage

    Проверенный

    Регистрация:
    10.07.2015
    Сообщения:
    646
    Симпатии:
    119
    Репутация:
    57
    Никак. Если только отправить один раз из 20 за секунду, чтобы это чисто физически никто не заметил.
     
  23. andrejandrej

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

    Регистрация:
    29.12.2015
    Сообщения:
    5
    Симпатии:
    0
    Репутация:
    0
    По какому принципу работает "ГМ облет пуль"? или подобное :scratch:
     
  24. AWRage

    Проверенный

    Регистрация:
    10.07.2015
    Сообщения:
    646
    Симпатии:
    119
    Репутация:
    57
    В входящей буллет синхре изменяется оффсет или таргет, вроде.

    Если я поставлю хук на D3DMETHOD_RESET, мой callback вызовется перед вызовом оригинального метода, или после него? И можно ли как-то поставить хук перед вызовом и после вызова? SFAPI
     
    #1904 AWRage, 11 ноя 2016
    Последнее редактирование модератором: 13 ноя 2016
  25. BlackKnigga

    Проверенный

    Регистрация:
    10.01.2016
    Сообщения:
    670
    Симпатии:
    158
    Репутация:
    72
    Как нажать на Player TextDraw? SF->getSAMP()->sendClickTextDraw() как я понял жмет только на обычные текстдравы.
    Мне нужны те что в структуре PlayerTextdraw хранятся.


    Отправил рпц, заработало.
     
    #1905 BlackKnigga, 13 ноя 2016
    Последнее редактирование: 13 ноя 2016
  26. 2Shae

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

    Регистрация:
    14.05.2014
    Сообщения:
    110
    Симпатии:
    6
    Репутация:
    4
    Делаю что-то на подобии чекера. Показ игроков при заходе на сервер/выходе с сервера отображает/сохранение новых ников в файлик работает на ура, а вот при попытке принудительно (командой/клавишей, не важно) перегрузить список (из файла) - крашит.
    Крашит именно из-за этого участка кода:
    if (reload == true)
    {
        for (int id = 0; id <= SAMP_MAX_PLAYERS; id++)
        {
            for (int x = 1; x <= line; x++)
            {
                if (!stricmp(SF->getSAMP()->getPlayers()->GetPlayerName(id), playername[x]))
                {
                    SF->getSAMP()->getChat()->AddChatMessage(-1, "Пиздюк %s[%d] подключился к серверу.", SF->getSAMP()->getPlayers()->GetPlayerName(id), id);
                }
            }
        }
        reload = false;
    }
    p.s. не поливайте сразу гавном :D
     
    #1906 2Shae, 14 ноя 2016
    Последнее редактирование: 14 ноя 2016
  27. legend2360

    legend2360   ¯\_(°□°)_/¯
    Всефорумный модератор

    Регистрация:
    23.03.2013
    Сообщения:
    2.402
    Симпатии:
    860
    Репутация:
    483
    Есть такая штука как комментарии. С помощью них ты можешь узнать какая именно строчка является проблемной.
     
  28. 2Shae

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

    Регистрация:
    14.05.2014
    Сообщения:
    110
    Симпатии:
    6
    Репутация:
    4
    Конечно сорян за нубский вопрос, но о чём ты? :D
    Я знаю что такое комментарии, но как они помогут понять немогу.
     
  29. legend2360

    legend2360   ¯\_(°□°)_/¯
    Всефорумный модератор

    Регистрация:
    23.03.2013
    Сообщения:
    2.402
    Симпатии:
    860
    Репутация:
    483
    К тому, что это может быть либо addChatMessage, либо stricmp. Перед тем, как написать сюда, закомментировал тело цикла и искал бы именно проблемную функцию. Тут их уж не так и много, и предполагаю, что getPlayerName возвращает NULL и stricmp пытается прочитать нулевой указатель.
     
  30. Gorkem95

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

    Регистрация:
    02.11.2014
    Сообщения:
    10
    Симпатии:
    7
    Репутация:
    4
    Any Example For Create DXUT Dialog? like a in cleo.
     
  31. legend2360

    legend2360   ¯\_(°□°)_/¯
    Всефорумный модератор

    Регистрация:
    23.03.2013
    Сообщения:
    2.402
    Симпатии:
    860
    Репутация:
    483
    Search the required SAMP DXUT's addresses or use SF->getCleo()->callOpcode
     
  32. Sire

    Sire vk.com/sire_lol
    Друг

    Регистрация:
    20.10.2014
    Сообщения:
    407
    Симпатии:
    265
    Репутация:
    39
    Можн как-то зарендрить то что я ввожу с клавиатуры?
     
  33. BlackKnigga

    Проверенный

    Регистрация:
    10.01.2016
    Сообщения:
    670
    Симпатии:
    158
    Репутация:
    72
    Как проверить нажата ли клавиша при открытом чате?
     
  34. CarLCas

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

    Регистрация:
    12.07.2013
    Сообщения:
    149
    Симпатии:
    32
    Репутация:
    17
    Как вариант, GetAsyncKeyState
     
  35. BlackKnigga

    Проверенный

    Регистрация:
    10.01.2016
    Сообщения:
    670
    Симпатии:
    158
    Репутация:
    72
    Пробовал уже, и хук ставил SetWindowsHookEx, выходит ошибка:
    error LNK2019: ссылка на неразрешенный внешний символ __imp__GetAsyncKeyState@4 в функции "void __stdcall mainloop(void)" (?mainloop@@YGXXZ)
    
    Мб что то не так делаю?
    if (GetAsyncKeyState(VK_TAB))
        {
            SF->Log("Tab Pressed");
        }
     
  36. Sire

    Sire vk.com/sire_lol
    Друг

    Регистрация:
    20.10.2014
    Сообщения:
    407
    Симпатии:
    265
    Репутация:
    39
    Библиотеку вруби
     
    Последние данные очков репутации:
    BlackKnigga: 1 Очко (Скомпилился, все работает. Спс) 16 ноя 2016
    BlackKnigga нравится это.
  37. AWRage

    Проверенный

    Регистрация:
    10.07.2015
    Сообщения:
    646
    Симпатии:
    119
    Репутация:
    57
    Поставить хук на функцию WndProc.
    Твой wndProc:

    bool __stdcall wndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
    return true;
    }

    Регистрируем callback:
    SF->getGame()->registerWndProcCallback(SFGame::WndProcCallbackPriority::HIGH_CB_PRIORITY, *wndProc);

    Честно, не знаю что за приоритеты в аргументе, сам уже потестишь.
     
  38. BlackKnigga

    Проверенный

    Регистрация:
    10.01.2016
    Сообщения:
    670
    Симпатии:
    158
    Репутация:
    72
    Как можно переместить чат с input box?
     
  39. Woofing Giraffe

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

    Регистрация:
    14.06.2015
    Сообщения:
    384
    Симпатии:
    45
    Репутация:
    14
    [​IMG]
    Из за чего цвет смещается? Вроде всё правильно выставил
     
  40. Dark_Knight

    Dark_Knight Мое лицо, когда человек верующий.
    Друг

    Регистрация:
    18.03.2013
    Сообщения:
    2.510
    Симпатии:
    763
    Репутация:
    208
    Мы ванги? Код где?