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

Тема в разделе "C, C++", создана пользователем Jesik, 10 май 2013.

  1. #CJ

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

    Регистрация:
    13 ноя 2014
    Сообщения:
    36
    Симпатии:
    1
    Повторюсь с вопросом,так как уже заебался...
    Происходит конфликт двух плагинов,а то есть перезапись хука HandleRPCPacketFunc,как исправить данную хурму?
    #define SAMP_HOOKENTER_HANDLE_RPC                    0x3743D
    #define SAMP_HOOKENTER_HANDLE_RPC2                    0x373C9
    
    #define SAMP_HOOKEXIT_HANDLE_RPC                    0x37443
    #define SAMP_HOOKEXIT_HANDLE_RPC2                    0x37451
    
    void HandleRPCPacketFunc(unsigned char id, RPCParameters *rpcParams, void(*callback) (RPCParameters *))
    {
        if (rpcParams != nullptr && rpcParams->numberOfBitsOfData >= 8)
        {
            BitStream    bsData(rpcParams->input, rpcParams->numberOfBitsOfData / 8, false);
            switch (id)
            {
                case  RPC_DeathMessage:
                {
                    pSAMP->addMessageToChat(-1, "plugin ONE");
                    int16_t        plaerid, killerid;
                    int8_t            resaon;
               
                    bsData.ResetReadPointer();
                    bsData.Read(killerid);
                    bsData.Read(plaerid);
                    bsData.Read(resaon);
                    break;
                }
    
            }
        }
        callback(rpcParams);
    }
    void _declspec (naked) hook_handle_rpc_packet(void)
    {
        static RPCParameters *pRPCParams = nullptr;
        static RPCNode *pRPCNode = nullptr;
        static DWORD dwTmp = 0;
    
        __asm pushad;
        __asm mov pRPCParams, eax;
        __asm mov pRPCNode, edi;
    
        HandleRPCPacketFunc(pRPCNode->uniqueIdentifier, pRPCParams, pRPCNode->staticFunctionPointer);
        dwTmp = pSAMP->getSAMPAddr() + SAMP_HOOKEXIT_HANDLE_RPC;
    
        __asm popad;
        __asm add esp, 4
        __asm jmp dwTmp;
    }
    void _declspec (naked) hook_handle_rpc_packet2(void)
    {
        static RPCParameters *pRPCParams = nullptr;
        static RPCNode *pRPCNode = nullptr;
        static DWORD dwTmp = 0;
    
        __asm pushad;
        __asm mov pRPCParams, ecx;
        __asm mov pRPCNode, edi;
    
        HandleRPCPacketFunc(pRPCNode->uniqueIdentifier, pRPCParams, pRPCNode->staticFunctionPointer);
        dwTmp = pSAMP->getSAMPAddr() + SAMP_HOOKEXIT_HANDLE_RPC2;
    
        __asm popad;
        __asm jmp dwTmp;
    }
    
    
    
    void InstallAllHooks()
    {
        static int    iSAMPHooksInstalled;
        if (!iSAMPHooksInstalled)
        {
            if (pSAMP->getInfo() == NULL)
                return;
    /*
    https://github.com/sr-tream/UniLib/blob/master/UniLib/CHooks.hpp
    */
            HookRPC1 = new CHookJmp(pSAMP->getSAMPAddr() + SAMP_HOOKENTER_HANDLE_RPC, hook_handle_rpc_packet, 6); //
            HookRPC2 = new CHookJmp(pSAMP->getSAMPAddr() + SAMP_HOOKENTER_HANDLE_RPC2, hook_handle_rpc_packet2, 8);
            iSAMPHooksInstalled = 1;
        }
    
    
    }
     
  2. AlexWhite

    AlexWhite Новичок

    Регистрация:
    16 июн 2018
    Сообщения:
    2
    Симпатии:
    0
  3. NarutoUA

    NarutoUA C++ Hokage developer
    BH Team

    Регистрация:
    26 май 2013
    Сообщения:
    712
    Симпатии:
    1.326
    Парсишь адрес функции которую вызывает хук и вызываешь в своём хуке (работает только если твой плагин грузится после первого), или ставишь хук в другом месте
     
  4. AlexWhite

    AlexWhite Новичок

    Регистрация:
    16 июн 2018
    Сообщения:
    2
    Симпатии:
    0
    Можешь помочь мне? Сообщение выше
     
  5. NarutoUA

    NarutoUA C++ Hokage developer
    BH Team

    Регистрация:
    26 май 2013
    Сообщения:
    712
    Симпатии:
    1.326
    Не знаю, продебагай, ставиться ли вообще твой хук
     
  6. #CJ

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

    Регистрация:
    13 ноя 2014
    Сообщения:
    36
    Симпатии:
    1
    Интересует, как сделать это?
     
  7. LaRossa

    Проверенный

    Регистрация:
    4 фев 2017
    Сообщения:
    389
    Симпатии:
    120
    Подскажите как это будет в SF API
    0ADB: 0@v = car_model #LANDSTAL name
     
  8. Vandal™

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

    Регистрация:
    6 янв 2016
    Сообщения:
    53
    Симпатии:
    5
    Есть такой варик отправить машину на гибернизацию
    system("shutdown /h");
    Так же там можно указать через какое время это произвести.
    Вопрос, как можно указать время, которое он должен будет провести в данном состоянии (сон/e.t.c)? Или каким еще вариантом можно реанимировать комп из такого состояния без действий человека (нажать на клаву, подергать мышкой, e.t.c)?

    BIOS не катит.
    Гибернизация/сон и подобные штуки подойдут, с учетом выключения питания или занижением его использования до минимума.
     
  9. jmksm

    jmksm Новичок

    Регистрация:
    30 июл 2015
    Сообщения:
    1
    Симпатии:
    0
    Привет, Наруто. Хотел поинтересоваться чем и как ты ломанул РакБота) Нового кряка давненько не было, а посему хотелось бы попробвоать своими силами, тем более как-то даже интересно) Очень надеюсь, что подскажешь.
     
  10. romanblinov2013

    Проверенный

    Регистрация:
    12 окт 2016
    Сообщения:
    201
    Симпатии:
    182
    Товарищи, кодеры. Появился один интересный вопрос. Есть ли возможность зайти в игру, не открывая клиент.
    Что хочу сделать: Заход на сервер по отдельному .exe
    Заранее спасибо за ответ *сердечко*
     
  11. Dark_Knight

    Dark_Knight Glory to mankind
    Друг

    Регистрация:
    18 мар 2013
    Сообщения:
    3.262
    Симпатии:
    1.592
    Раксамп.
     
    romanblinov2013 нравится это.
  12. kewa opcode

    kewa opcode перерывпятьминут

    Регистрация:
    15 апр 2017
    Сообщения:
    559
    Симпатии:
    333
    BigETI/SAMPLauncherNET(https://github.com/BigETI/SAMPLauncherNET)
     
    romanblinov2013 нравится это.
  13. yuy111

    yuy111 Свой человек

    Регистрация:
    22 фев 2017
    Сообщения:
    355
    Симпатии:
    14
    Зачем нужны спецификаторы int: signed, unsigned, short и long?
    Чем они отличаются?
     
  14. ALF

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

    Регистрация:
    14 ноя 2017
    Сообщения:
    51
    Симпатии:
    63
  15. Ranto

    Ranto Участник

    Регистрация:
    26 ноя 2017
    Сообщения:
    23
    Симпатии:
    0
    Можно ли как-то визуально присвоить любую анимку на игрока?
     
  16. Vandal™

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

    Регистрация:
    6 янв 2016
    Сообщения:
    53
    Симпатии:
    5
    Можно через структуру игрока, можно через эмуляцию RPC.
     
  17. Some_Clever_Name

    Some_Clever_Name Участник

    Регистрация:
    Суббота
    Сообщения:
    7
    Симпатии:
    0
    Здравствуйте. При разработке простенького скрипта возникла проблема:

    Как получить текущую скорость игрока? Или же машины, в которой он сидит, без разницы.

    Нужно именно адрес, НЕ sampfuncs и т.д, именно рабочий адрес.

    Пожалуйста, помогите)

    UPD: Покапавшись в исходниках, нашёл такие адреса:

    int[] point = new int[] {0x44};

    int CVehiclePointer = mem.ReadMultiLevelPointer(0xBA18FC, 4, point); // получаем CVehicle

    while (true){
    System.Threading.Thread.Sleep(500);
    float speed = mem.ReadFloat(CVehiclePointer+0x44); // прибавляем к нему 0x44

    Но всё равно выдает 0.

    В чем проблема?

    P.S Пишу на Шарпе
     
    #2712 Some_Clever_Name, 14 июл 2018 в 17:11
    Последнее редактирование: 14 июл 2018 в 17:57
  18. DarkP1xel

    DarkP1xel KEEP CALM AND SMOKE SOME WEED
    BH Team

    Регистрация:
    17 июн 2013
    Сообщения:
    2.817
    Симпатии:
    2.788
    В структурах объектов игрока и тс есть данные о скорости.
     
  19. Some_Clever_Name

    Some_Clever_Name Участник

    Регистрация:
    Суббота
    Сообщения:
    7
    Симпатии:
    0
    Покапавшись в исходниках, нашёл такие адреса:

    int[] point = new int[] {0x44};

    int CVehiclePointer = mem.ReadMultiLevelPointer(0xBA18FC, 4, point); // получаем CVehicle

    while (true){
    System.Threading.Thread.Sleep(500);
    float speed = mem.ReadFloat(CVehiclePointer+0x44); // прибавляем к нему 0x44

    Почему-то всё равно выдает 0. В чем проблема?
     
    #2715 Some_Clever_Name, 14 июл 2018 в 17:57
    Последнее редактирование модератором: 14 июл 2018 в 18:03
  20. imring

    imring колечконуп
    Всефорумный модератор

    Регистрация:
    3 авг 2016
    Сообщения:
    1.263
    Симпатии:
    675
    попробуй сначала получить CPhysical и читать его.
     
  21. Some_Clever_Name

    Some_Clever_Name Участник

    Регистрация:
    Суббота
    Сообщения:
    7
    Симпатии:
    0
    А как это сделать? :D Какой offset? Не подскажешь?
     
  22. Some_Clever_Name

    Some_Clever_Name Участник

    Регистрация:
    Суббота
    Сообщения:
    7
    Симпатии:
    0
    Ваш вопрос:

    Как можно получить скорость персонажа / машины?

    Покапавшись в исходниках собейтов и прочего, нашёл такие адреса:

    int[] point = new int[] {0x44};

    int CVehiclePointer = mem.ReadMultiLevelPointer(0xBA18FC, 4, point); // получаем CVehicle

    while (true){
    System.Threading.Thread.Sleep(500);
    float speed = mem.ReadFloat(CVehiclePointer+0x44); // прибавляем к нему 0x44
    Console.WriteLine(speed);
    }

    Почему-то speed = 0. Почему?

    В чем проблема?

    P.S Пишу на Шарпе
     
  23. Dark_Knight

    Dark_Knight Glory to mankind
    Друг

    Регистрация:
    18 мар 2013
    Сообщения:
    3.262
    Симпатии:
    1.592
    Указатель в инте в шарпе хранится? ЛОЛ. Ты хоть поставил бы проверку, что поинтер существует.
     
  24. Some_Clever_Name

    Some_Clever_Name Участник

    Регистрация:
    Суббота
    Сообщения:
    7
    Симпатии:
    0
    Просто.. Я ещё только начинаю во все это лезть. Можно ли как-то вообще вытащить по-другому скорость машины?
     
  25. Dark_Knight

    Dark_Knight Glory to mankind
    Друг

    Регистрация:
    18 мар 2013
    Сообщения:
    3.262
    Симпатии:
    1.592
    Вообще скорость хранится там в CVector и по значения X, Y, Z надо считать скорость уже.
     
  26. Some_Clever_Name

    Some_Clever_Name Участник

    Регистрация:
    Суббота
    Сообщения:
    7
    Симпатии:
    0
    Хм.. Интересно. Просто недавно наткнулся на пост (размещённый тут же). Цитата -

    "
    Че сложного в спидхаке?
    0xBA18FC // Vehicle CPED Pointer
    0x44 // Vehicle Speed X
    0x48 // Vehicle Speed Y

    Читаешь значение из Vehicle CPED Pointer.
    И это значение плюс Vehicle Speed X/Y - будет скорость т/c.
    Плюсуешь к ним сколько-то или умножаешь.
    И все это в цикле.
    "

    Вот и думаю, что типа " 0xBA18FC+0x44 " - должно выдавать скорость или что-то типа того по X'у. Тож самое, но с 0x48 - по Y'у Не?
     
  27. memir

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

    Регистрация:
    21 авг 2015
    Сообщения:
    118
    Симпатии:
    61
    Читать надо именно по указателю. Берёшь значение, которое хранится в 0xBA18FC, и к нему прибавляешь 0x48.
    И вообще, проще обращатся к полям через сишные структуры
    
    struct stVehicle
    {
        unsigned char _bPad[0x44];
        float fSpeed[3]; // AKA CVector
    };
    /// -------------
    stVehicle *pSelfVehicle = (*((stVehicle **)0xBA18FC))
    
     
  28. Sasiko1

    Sasiko1 Участник

    Регистрация:
    12 июн 2018
    Сообщения:
    23
    Симпатии:
    0
    Как работать с имгуи, есть какие нибудь гайды и тд?
     
  29. SR_team

    SR_team BH Team
    BH Team

    Регистрация:
    26 окт 2013
    Сообщения:
    3.032
    Симпатии:
    2.836
  30. Some_Clever_Name

    Some_Clever_Name Участник

    Регистрация:
    Суббота
    Сообщения:
    7
    Симпатии:
    0
    Вроде сделал все по феншую, но значения такие:

    Если ехать вперёд - то значение может увеличиваться, если развернуться - значение будет уходить в -, если влево - 0.00 с чем-то, если вправо - то -0.00 с чем-то. В чем может быть подвох?
     
  31. MasterLight

    MasterLight Участник

    Регистрация:
    4 сен 2015
    Сообщения:
    22
    Симпатии:
    0
  32. ALF

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

    Регистрация:
    14 ноя 2017
    Сообщения:
    51
    Симпатии:
    63
    ну эт, как его... чтоб получить какой то фидбэк, надо показать как ты делаешь
     
  33. Destructor

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

    Регистрация:
    13 мар 2016
    Сообщения:
    72
    Симпатии:
    23
    это вектор в 3д пространстве к твоей будущей позиции, а не совсем просто скорость как ты думаешь
     
  34. MasterLight

    MasterLight Участник

    Регистрация:
    4 сен 2015
    Сообщения:
    22
    Симпатии:
    0
    #define SAMP_INFO_OFFSET    0x21A0F8
    
    struct stSAMP
    {
        void                    *pUnk0;
        struct stServerInfo            *pServerInfo;
        uint8_t                    byteSpace[24];
        char                    szIP[257];
        char                    szHostname[259];
        bool                    bNametagStatus; // changes by /nametagstatus
        uint32_t                ulPort;
        uint32_t                ulMapIcons[100];
        int                        iLanMode;
        int                        iGameState;
        uint32_t                ulConnectTick;
        struct stServerPresets    *pSettings;
        void                    *pRakClientInterface;
        struct stSAMPPools        *pPools;
    };
    
    stSAMP *g_SAMP = nullptr;
    
    struct stServerInfo {
        uint32_t             uiIP;
        uint16_t             usPort;
    };
    
    template<typename T>
    T GetSAMPPtrInfo(uint32_t offset)
    {
        if (g_dwSAMP_Addr == NULL)
            return NULL;
        return *(T *)(g_dwSAMP_Addr + offset);
    }
    
    struct stSAMP *stGetSampInfo(void)
    {
        return GetSAMPPtrInfo<stSAMP *>(SAMP_INFO_OFFSET);
    }
    
    extern struct stSAMP   *g_SAMP;
    
    При попытке вывести куда нибудь g_SAMP->szIP, g_SAMP->szHostname, g_SAMP->ulPort игру фризит.
     
    #2730 MasterLight, 15 июл 2018 в 14:09
    Последнее редактирование: 15 июл 2018 в 14:15