Éú»îÇ黳-Éñ»°°µºÚ-°µºÚÆÆ»µÉñ2

 ÕÒ»ØÃÜÂë
 Á¢¼´×¢²á

QQ怬

Ö»ÐèÒ»²½£¬¿ìËÙ¿ªÊ¼

ËÑË÷
²é¿´: 3512|»Ø¸´: 0
ÊÕÆð×ó²à

×Ô¶¯¼ñÇ®µÄÔ´Âë

[¸´ÖÆÁ´½Ó]
  • TAµÄÿÈÕÐÄÇé
    ¿ªÐÄ
    ǰÌì 14:58
  • Ç©µ½ÌìÊý: 10 Ìì

    [LV.3]¾íÖáÓ¡¼Ç

    912

    Ö÷Ìâ

    97

    Ôª±¦

    2382 Сʱ

    ÔÚÏßʱ¼ä

    ¹ÜÀíÔ±

    Rank: 9Rank: 9Rank: 9

    »ý·Ö
    97
    ·¢±íÓÚ 2020-10-2 00:58:48 | ÏÔʾȫ²¿Â¥²ã |ÔĶÁģʽ
    ×ªÔØ£ºhttps://tieba.baidu.com/p/6664705435


    D2Vars.h£º




    //ÒÆ¶¯º¯ÊýµØÖ·Áбí
    #define MOVE_MAX_SIZE0x00000050




    È«¾Ö±äÁ¿£º
    VAR(D2CharMoveTableStrc, MoveTbl[MOVE_MAX_SIZE])


    D2Ptrs.h£º




    ËùÓõ½µÄËùÓк¯ÊýµØÖ·£º




    #define D2GAME_PickUpGold(pGame, pPlayer, pItem)D2GAME_PickUpGold_Stub(pGame, pPlayer, pItem)




    ASMPTR(D2GAME, PickUpGold_I, 0xD6C80)




    FUNCPTR(D2GAME, CharMove, BOOL, __fastcall, (Game* pGame, UnitAny* pPlayer, int, int), 0x79B90)




    FUNCPTR(D2COMMON, GetRoomFromUnit, DRLGRoom*, __stdcall, (UnitAny * ptUnit), 0x2FE10)
    FUNCPTR(D2COMMON, GetLevelNoFromRoom, BOOL, __stdcall, (DRLGRoom* pRoom), 0x3C000)
    FUNCPTR(D2COMMON, IsTownByLevelNo, BOOL, __stdcall, (DWORD dwLevelNo), 0x3B230)
    FUNCPTR(D2COMMON, GetUnitState, int, __stdcall, (UnitAny *pUnit, DWORD dwStateNo), 0x33CD0)
    FUNCPTR(D2COMMON, GetUnitStat, long, __stdcall, (UnitAny* pUnit, DWORD dwStat, DWORD nLayer), 0x38B70)
    FUNCPTR(D2COMMON, GetBeltGoldLimit, unsigned int, __stdcall, (UnitAny* pUnit), 0x31940)
    FUNCPTR(D2COMMON, GetItemText, ItemTxt *, __stdcall, (DWORD dwItemNo), 0x719A0)
    FUNCPTR(D2COMMON, GetDistance, int, __stdcall, (int pPlayerCoordsnX, int pPlayerCoordsnY, int pItemCoordsnX, int pItemCoordsnY), 0xD180)




    FUNCPTR(D2CLIENT, PrintPartyString, void, __stdcall, (wchar_t *wMessage, int nColor), 0x7D610)


    D2Structs.h£º




    typedef int(__fastcall *D2CharMove_t)(Game*, UnitAny*, int , int);




    struct D2CharMoveTableStrc
    {
    D2CharMove_t GameFunc;
    };




    D2Stubs.h£º




    void __fastcall D2GAME_PickUpGold_Stub(Game* pGame, UnitAny* pPlayer, UnitAny* pItem);


    D2Stubs.cpp£º




    __declspec (naked) void __fastcall D2GAME_PickUpGold_Stub(Game *pGame, UnitAny* pPlayer, UnitAny* pItem)
    {
    __asm
    {
    push esi
    push [esp + 8]
    push ecx
    mov esi,edx
    call D2GAME_PickUpGold_I
    pop esi
    retn 0x04
    }
    }




    PickUpGold.h£º




    BOOL __fastcall Move_Init();




    BOOL __fastcall MovEax1(Game* pGame, UnitAny* pPlayer, int uknown1, int uknown2);




    BOOL __fastcall CheckIfMove(Game* pGame, UnitAny* pPlayer, int uknown1, int uknown2);




    void __fastcall GOLDPICKUP_PickupInRangeGold(Game* pGame, UnitAny* pPlayer);






    PickUpGold.cpp£º




    #define REVERSE16( w ) ( ( (w & 0xFF00) >> 8 ) | ( (w & 0x00FF) << 8 ) )
    #define REVERSE32( dw ) ( ( (dw & 0xFF000000) >> 24 ) | ( (dw & 0x00FF0000) >> 8 ) | ( (dw & 0x0000FF00) << 8 ) | ( (dw & 0x000000FF) << 24 ) )
    #define CODE32( sz ) REVERSE32( ( ( const unsigned long )( sz ) ) )
    #define CODE16( sz ) REVERSE16( ( ( const unsigned short)( sz ) ) )




    LPCWSTR stringToLPCWSTR(std::string orig)
    {
    size_t origsize = orig.length() + 1;
    const size_t newsize = 100;
    size_t convertedChars = 0;
    wchar_t *wcstring = (wchar_t *) malloc(sizeof(wchar_t) *(orig.length() - 1));
    mbstowcs_s(&convertedChars, wcstring, origsize, orig.c_str(), _TRUNCATE);
    return wcstring;
    }




    BOOL __fastcall Move_Init()
    {
    std::copy(D2GAME_MoveTable, D2GAME_MoveTable + 19, MoveTbl);




    MoveTbl[2].GameFunc = &CheckIfMove;
    MoveTbl[3].GameFunc = &CheckIfMove;
    MoveTbl[6].GameFunc = &CheckIfMove;
    MoveTbl[19].GameFunc = &CheckIfMove;




    MoveTbl[0].GameFunc = &MovEax1;
    MoveTbl[1].GameFunc = &MovEax1;
    MoveTbl[4].GameFunc = &MovEax1;
    MoveTbl[5].GameFunc = &MovEax1;
    MoveTbl[9].GameFunc = &MovEax1;
    MoveTbl[17].GameFunc = &MovEax1;




    return TRUE;
    }




    BOOL __fastcall CheckIfMove(Game* pGame, UnitAny* pPlayer, int uknown1, int uknown2)
    {




    if (!pGame || !pPlayer)
    return FALSE;




    BOOL AlreadyMove = D2GAME_CharMove(pGame, pPlayer, uknown1, uknown2);
    BOOL Move = AlreadyMove;




    if (!AlreadyMove)
    Move = FALSE;




    GOLDPICKUP_PickupInRangeGold(pGame, pPlayer);




    return Move;




    }




    BOOL __fastcall MovEax1(Game* pGame, UnitAny* pPlayer, int uknown1, int uknown2)
    {
    return TRUE;
    }




    void __fastcall GOLDPICKUP_PickupInRangeGold(Game* pGame, UnitAny* pPlayer)
    {




    if (!pGame || !pPlayer || pPlayer->dwType != UNIT_PLAYER)
    return;




    DRLGRoom* pRoom = D2COMMON_GetRoomFromUnit(pPlayer);
    if (!pRoom) return;




    int alvl = D2COMMON_GetLevelNoFromRoom(pRoom);
    BOOL isTown = D2COMMON_IsTownByLevelNo(alvl);
    if (isTown)
    return;




    if (pPlayer->CurrentAnim == PLAYER_MODE_DEATH)
    return;




    if (D2COMMON_GetUnitState(pPlayer, STATE_UNINTERRUPTABLE))
    return;




    for (UnitAny* pUnit = pRoom->pUnitFirst; pUnit; pUnit = pUnit->pListNext)
    {
    int INVENTORY_GOLD = D2COMMON_GetUnitStat(pPlayer, STATS_GOLD, NULL);
    int QUANTITY_GOLD = D2COMMON_GetUnitStat(pUnit, STATS_GOLD, NULL);
    int GOLD_LIMIT = D2COMMON_GetBeltGoldLimit(pPlayer);




    if (pUnit->dwType != UNIT_ITEM)
    continue;




    ItemTxt* pItemRecord = D2COMMON_GetItemText(pUnit->dwTxtFileNo);
    if (!pItemRecord) continue;




    if (pItemRecord->dwCode != CODE32('gld '))
    continue;




    DRLGCoord pItemCoords = {};
    DRLGCoord pPlayerCoords = {};




    if (D2COMMON_GetDistance(pPlayerCoords.nX, pPlayerCoords.nY, pItemCoords.nX, pItemCoords.nY) > 12)
    continue;




    if ((INVENTORY_GOLD + QUANTITY_GOLD) <= GOLD_LIMIT)
    {
    D2GAME_PickUpGold(pGame, pPlayer, pUnit);


    wchar_t sMsg[512];
    wsprintfW(sMsg, stringToLPCWSTR("PickUp %dGold"), D2COMMON_GetUnitStat(pPlayer, STATS_GOLD, 0) - INVENTORY_GOLD);
    D2CLIENT_PrintPartyString(sMsg, GREEN);




    }




    if ((INVENTORY_GOLD + QUANTITY_GOLD) > GOLD_LIMIT)
    {
    wchar_t sMsg[512];
    wsprintfW(sMsg, stringToLPCWSTR("Gold Limit!"));
    D2CLIENT_PrintPartyString(sMsg, GREEN);
    }
    }
    }






    D2Patch.h£º




    PatchÄÚÈÝ£º




    //½ð±ÒPatchλÖãºD2Game
    {D2DLL_D2GAME, 0x79A28, (DWORD)MoveTbl, FALSE, 0x00},
    {D2DLL_D2GAME, 0x79A43, (DWORD)MoveTbl, FALSE, 0x00},


    Éñ»°Õ½Íø³öÆ·£¬±Ø³ö¾«Æ·£¡

    ÏÓ¹ÖÎïºÍµØÍ¼ËزÄ̫С???¸Ï½ôÕÒÎÒ¶¨ÖưÉ!!!
    QQ:281886256
    »Ø¸´

    ʹÓõÀ¾ß ¾Ù±¨

    ÄúÐèÒªµÇ¼ºó²Å¿ÉÒÔ»ØÌû µÇ¼ | Á¢¼´×¢²á

    ±¾°æ»ý·Ö¹æÔò

    QQ|Archiver|ÊÖ»ú°æ|СºÚÎÝ|Éñ»°°µºÚ ( ÉÂICP±¸18004004ºÅ-1 )

    GMT+8, 2026-2-18 01:05 , Processed in 0.099090 second(s), 24 queries .

    Powered by Discuz! X3.4

    © 2001-2023 Discuz! Team.

    ¿ìËٻظ´ ·µ»Ø¶¥²¿ ·µ»ØÁбí