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

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

QQ怬

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

ËÑË÷
¶ºÆÆ°µºÚModȺ£º67994934¶ºÆÆ°µºÚMod¿Í»§¶Ë¼°²¹¶¡¶ºÆÆ°µºÚModÐÂÊÖ¹¥ÂÔ¶ºÆÆ°µºÚModÔÞÖú²Ëµ¥
Éñ»°»³¾ÉMODȺ£º67994934Éñ»°»³¾ÉMod¿Í»§¶Ë¼°²¹¶¡Éñ»°»³¾ÉModÐÂÊÖ¹¥ÂÔÉñ»°»³¾ÉModÔÞÖú²Ëµ¥
Ê¥Õß¹éÀ´ModȺ£º558972013Ê¥Õß¹éÀ´Mod¿Í»§¶Ë¼°²¹¶¡Ê¥Õß¹éÀ´ModÐÂÊÖ¹¥ÂÔÊ¥Õß¹éÀ´ModÔÞÖú²Ëµ¥
²é¿´: 3473|»Ø¸´: 0
ÊÕÆð×ó²à

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

[¸´ÖÆÁ´½Ó]

706

Ö÷Ìâ

830

Ôª±¦

2347 Сʱ

ÔÚÏßʱ¼ä

¹ÜÀíÔ±

Rank: 9Rank: 9Rank: 9

»ý·Ö
830
·¢±íÓÚ 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},


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

rgbrgbrgbrgb]
»Ø¸´

ʹÓõÀ¾ß ¾Ù±¨

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

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

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

GMT+8, 2026-1-19 15:41 , Processed in 0.062961 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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