|
|
转载4 R* K0 |( F9 p- b" s
自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:
. m/ i8 U, g- W/ W" w' eD2Client:
$ ]9 C9 V# `7 L, {1 z( o8 F6FB20AE1为拦截输入框(用于获得命令)
1 i& z. J+ Y7 r5 U l6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发
) ]% g: ?+ Q9 ?6 h' _6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发
) u, u6 |8 L( X6FAF4230为hackmap的loop点 我用的hackmap导出位置
4 R/ a4 u- m- \5 f$ r$ p; ^$ I5 X- }- t! t
9 F; T& ^6 C" a' W. d$ D发包函数:9 \1 w1 o; d. U% ?9 ?0 T
class D2PKT_ITEM
* R% }1 C6 K J) i2 w0 E( R{
" F, z% F) Q/ ^$ Q2 d: k#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上8 a( Y! }- E% c' ?1 V
#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多1 D" Y* V6 [4 {2 `0 a9 i) }5 U
#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上7 Y# H. J& N6 z" G$ p5 H
#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上, N; c: c/ ~) e! d& p
#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH
) Z/ B; _( E8 m/ l4 I6 v7 i#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上9 Z P/ |4 n: q1 c1 h! @( F
#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏
5 x+ m% V5 h- g$ Y#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上
N6 E! H: Z' J2 l# u- S#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -3 \7 K" p: _6 q) S$ b7 X
#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店
% T% Y, v5 Z: g5 d! _0 A#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV
$ y5 \2 `% w, H6 l! P* Q) z# L#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道
f6 d5 p1 _" y! P) _! e! p#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带' s# e6 X) [) ?$ ^& i+ K J+ Z
#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上
. z5 Z; @6 |# c#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -
u# d, I* `0 I( n; e" s I# q) u#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上
' C$ G% q5 b% ?' ?9 B2 P% |: S#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -
, o( F* C& e% W# j" T1 l7 A& M# p' G: p* j9 R7 i. y- i$ f3 @! u
#define PacketItemMaxTick 150( C% i% `3 a3 S! ?0 y
#define PacketItemPickUpTick 20$ |- D0 {: z j
1 `9 g& B1 D" h2 Hprivate:
8 J- Z, A- Y7 t p; [ static DWORD _PKTItemTick;
; }9 F3 J3 ]- ~ static DWORD _PKTItemAction;+ j0 R$ o/ X1 I8 q7 r
static DWORD _PKTItemID;* C' t6 P$ a) s4 f7 a
static BYTE _PKTPKTType;
' k, g# H F5 kpublic:+ l% T5 k- U I" a0 t; E
static DWORD PKTItemGetTick() { return _PKTItemTick; }, H9 n B8 l" |& X9 O" ~
, Q# K) g9 W% r- C2 P static void PKTItemRelease() 7 S- }% D- J7 h
{5 K) Y* X' T3 [9 S; n
_PKTItemTick = 0;* P7 ~; l' g, E& _5 w% j5 O: Q
_PKTItemAction = 0;! S' d8 \$ {9 O% i8 f9 K* T
_PKTItemID = 0;
2 |9 n+ M* x: P% s4 E: O _PKTPKTType = 0;
) R$ B: N3 C* l2 c6 E: P }
S( h) P) _4 T1 l
1 o$ J0 B3 r) Z o2 e, k( a static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick) + B* N2 |2 B u
{
4 x: M. }! H. F& {3 |! H _PKTPKTType = aPacket0;
2 V) x8 m* N( M* k% Y. U _PKTItemTick = tick;6 B7 v4 i- g$ t. D# o8 |& y
_PKTItemAction = ItemAction;
- i. |& t2 G D8 F7 y' A _PKTItemID = dwItemID;
: v; h# r/ I9 Q- O }
: X6 \ F6 o& B
1 ~, L0 M5 O. R, ~6 \' V( T& F% ~ static void PKTItemTellW8(DWORD tick) A1 n& H: f, Z! \
{& M. O; g" u. D
_PKTItemTick = tick;, M7 S N+ ]/ S3 U: d) ], ~4 m
}
8 h7 w$ P4 u7 A2 F0 i6 u i2 S/ E- C$ n/ r$ h
static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor
7 q. D$ M, s$ n& N- _ {% b+ T6 y1 V1 n0 b; _
if (aLength >= 8)6 d1 ]$ a: r4 i6 X
{
# r) X6 J6 f3 F5 @ DWORD dwItemId = 0;
& I, x% Z$ Q9 J% N2 y- l1 t* w* I memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));( G3 q8 ~6 o0 g0 x% T3 u6 _
if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE
) e( @$ E" G1 m! V0 v% u && _PKTItemAction == ITEM_ACTION_TO_STORAGE
7 z. H; N' p7 I9 h7 H && _PKTPKTType == PACKET_NEWITEM; B( ?+ s% a" V+ o
)4 [( s. t9 Y% y6 X1 Z
{
2 Q& F4 f! @; X# V$ V2 ^ if (_PKTItemID == 0 && _PKTItemTick)1 S$ G7 [. y) b* U& }& N
{; @* w0 k1 D4 u0 g7 i* i! f% s! D
PKTItemRelease();% G3 |# w1 d9 i3 s7 W4 g5 i& A
}; u1 p3 _# N5 R2 p# h- A
else if(_PKTItemID== dwItemId&& _PKTItemTick)- Z# C& K9 N& Q
{
2 ]7 F0 Y* b- P) v& X" D3 X( p PKTItemRelease();
2 C9 g; E, }7 J8 H% X: P8 O7 ]1 R }
( r3 T7 r% S/ A% [! u }$ U) T- J: D% x$ O- o
7 M% C& N. @" I1 M0 `4 g" { X( z
} H. F0 D$ }& V+ n
}
- b3 P& x. J/ M0 D+ }: W
+ n- X: A" ?9 a5 z% | static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored, X1 W Z3 S; {( \1 l5 y
{$ j% w7 K1 a4 a0 q( r+ Z) ?3 o9 X- i
if (aLength >= 8)
) ~9 v% Z" n8 N! y9 @1 c6 O {
$ `% J9 t8 v7 h8 R" I, O DWORD dwItemId = 0;
8 q* z& |7 ?8 h7 C memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
# y) e5 H, l' P if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE
! j& u( X# }" [- u && _PKTItemAction == ITEM_ACTION_FROM_STORAGE6 m( J; A1 U/ F8 q- Q8 F$ z
&& _PKTPKTType == PACKET_ITEMACTION
* s6 b3 A8 O7 N* ?0 F8 S )9 a2 G6 V- M' h" Y7 D+ i, b
{1 n3 G" g) t- s8 m# J8 M/ }- G
if (dwItemId == 0 && _PKTItemTick)4 V* h% u! E2 y' @2 Q
{
* k) U8 p' [( ^8 E* r PKTItemRelease();
, i+ w) D& }; z }
! a6 f# w4 v F% ~! I! S else if (dwItemId == _PKTItemID && _PKTItemTick)* s q* X+ W& B+ o0 o7 @- H6 d
{
: p( o. m* R& N, ~5 u PKTItemRelease();
: e; o. W) e4 Z8 g+ r }7 V- T( m! F( p/ c
}
% z( C0 O/ X; v& Y' L( H0 ?5 y" s7 p9 s
/ j6 V$ h4 P% }& n }
/ R1 r6 H9 d4 J0 l. Y" f) ]6 a0 p }
6 a y% \" x m1 @5 F1 q* ]0 @' A* X- U i0 ^
static void PKTItemGameLoop()' q' W( r& r- A1 {
{
, M* T& s$ Z5 B5 d4 L- [" F if (_PKTItemTick > 0)( n% p. E3 \0 h* m9 N+ R
_PKTItemTick--;
9 t) }, N% G; U2 w0 N else if (_PKTItemTick == 0)
3 e; l( o" U; G/ Q7 Y PKTItemRelease();
# t3 P8 n% @/ E+ n; P }
8 [7 }+ N! ` U/ k: G
- z/ L& O1 A5 e3 v. i static BOOL PKTItemCando()
( \: L+ s6 y( ?4 ]( N9 f- Q {
1 {2 A- G8 {1 T if (_PKTItemTick == 0)return TRUE;2 U. a( R9 [% i
return FALSE;
3 G9 V' q# J f! m" B8 w }/ A& v2 i; G* ?( m. L
1 D* W. d! @( b3 } static BOOL BuyItem(DWORD ItemID, DWORD npcid)
& z2 V2 m0 r( D5 _0 H {
9 P& o% e* F$ V! ]0 t$ L! c PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick); Y4 K( ]1 e- u
BYTE aPacket[17] = { 0 };8 M: H! U% k6 S$ s+ |
aPacket[0] = 0x32;4 Z- `0 W: l+ I& |7 o- d
::memcpy(&aPacket[1], &npcid, 4);% p. T( u; Q8 P' d. {
::memcpy(&aPacket[5], &ItemID, 4);
( h; ?- E6 z! s- o //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
. Y( u( o0 R3 u! O D2Net::D2SendToServer(17, 0, aPacket);
0 r4 {' g, b5 s+ C' V, q0 {" I return TRUE;" S2 k! i+ }: r
}
5 f6 ]6 J. O' Z9 Z3 }; U
+ V1 }, _) }& F static BOOL SellItem(DWORD ItemID, DWORD npcid)( |' V/ {% H6 J* B
{' \1 v/ c. T6 \5 u1 r% M5 p
PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
3 T; C5 T S& V% |0 p" o- f2 D BYTE aPacket[17] = { 0 };
4 |& a1 S5 t& y2 ~. H- H1 g aPacket[0] = 0x33;( P3 ?5 _# r9 c1 e
::memcpy(&aPacket[1], &npcid, 4);
9 {) W% ?0 L" Z. M) G8 n ::memcpy(&aPacket[5], &ItemID, 4);
! c; W A, H6 @" b9 L$ n! F* ^ //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
$ Z1 X! C, R: }6 [5 U# N D2Net::D2SendToServer(17, 0, aPacket);
9 ]7 c. J, } s5 y. H2 K& j9 h return TRUE; Y9 L# D) ^0 l, t
}- H3 m5 H9 U! o3 V5 T$ b- V6 l% S* U
7 o% k# T4 r. N% M- B% ~
static BOOL Interact(DWORD nUnitId, DWORD nUnitType);
4 J' Z1 Y& @+ v$ s
3 g9 J! e/ X0 T I4 ]- N+ B' Q5 w static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);8 b! B A& {3 [
: { p# k% ]3 j static BOOL OpenCube()
* M8 M C X% Z. w6 s; \2 _$ u {1 Z9 }. R1 m% {) E& }0 a, K
if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;( ?- k& g8 Q" F$ x: c: q
& L( M0 k% F% |* u( g UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);8 y5 Q6 Y$ z1 i5 T: _" D
if (!pCube)
' Y/ c6 e/ Z' ^- s5 `1 F: l: ] {
) b' s# T5 U+ H2 ~. k) Y( ^ pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
" B0 I& m* F' H& W6 E, x) `/ J3 i8 s if (!pCube)
* s% f7 `5 ?. I/ l% `' }' z return FALSE;
; j3 g, t7 t8 D9 z }9 p6 L& p3 I# `- j3 x7 O! j) \# I7 ?7 D
PKTItemTellW8(PacketItemMaxTick);! k& {8 d" X. Q3 j" V
! \% y* i1 I! |6 h D2CoordStrc mypst = { NULL };4 r0 `) h. ~9 s" h) v! O. X
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);) ?/ ]+ E3 h/ l( P( _( x4 f
& t3 D+ W+ x1 U
BYTE aPacket[13] = { 0x20,0 };
7 Z8 V; \" `8 i- J ::memcpy(aPacket + 1, &pCube->nItemNum, 4);
1 {3 k+ V1 g1 Z# [( | ::memcpy(aPacket + 5, &(mypst.nX), 4);
, f2 Y) ^) o% {$ f6 c ::memcpy(aPacket + 9, &(mypst.nY), 4);. u7 N; ]1 @: W
D2Net::D2SendToServer(13, 0, aPacket);4 F/ A- x0 g5 T0 f
return TRUE;, g7 k7 R. t* W3 C+ s
}
' }6 j7 `" Q6 c3 ~- s! S+ x) k# Q% J$ @: ~! l8 C
static BOOL ToInvxy(DWORD x, DWORD y)4 x/ {; O* a* b) _, B! b
{% H) x1 i9 E8 F. i% @0 C! u0 O
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);+ | I4 z, m% r# L$ ?# R6 y& ^" N# ^
, v, x `. o" u! Z* ]; Y if (phand == NULL)
3 [# _9 z* U% Q( h; T) Y* H return FALSE;2 m7 ?5 q. i/ W' X4 u
) K8 U7 u$ q6 c8 n& D. T4 _ PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);+ `7 U$ z8 J# @" z( c( V
2 Y1 G6 x+ q6 c7 [* [! s BYTE aPacket[17] = { 0x18,0 };
/ m' j1 l9 x! G# M) N% { ::memcpy(aPacket + 1, &phand->nItemNum, 4);
+ Y" }5 p7 V5 @+ E: ^6 L; c0 U ::memcpy(aPacket + 5, &x, 4);/ }! @9 Q! K" E
::memcpy(aPacket + 9, &y, 4);
4 i5 d0 L" h3 I: d; d D2Net::D2SendToServer(17, 0, aPacket);: g* i# }% S* e! }
return TRUE;
; P, n: U2 g/ ~: ^- z) h }
, ~; g5 U& e! w4 m& T5 V
8 B3 H- z. ~. O9 g: S static BOOL ToInvRandom(BOOL bBagFix = FALSE)
+ V4 r$ X* V1 X# O( ? {4 ^4 y6 l* H% K! p
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
- q/ J1 s( d" B' z9 } if (!phand)" D1 e4 j) X$ s0 ?2 I2 E
return FALSE;
0 Z5 C7 ` |, u7 k+ u5 \ int desx = 0;
& }. L0 w9 Z$ B' s( C0 {2 c6 R( {2 ~ int desy = 0;
Q. N* ?$ h" a2 Q. a if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))
7 h* X8 ~! |) G1 g+ i' { {4 B/ o" x9 H; F- T; D
ToInvxy(desx, desy);2 O; s: F8 S5 H3 g- C& R3 n
return TRUE;
5 o3 e: b6 ~3 w! {' M }
# X7 G$ L% r3 {& H1 ?) C8 k return FALSE;* K8 q- ~9 V B/ t8 H
}' j/ Z: {4 a) K+ j
3 s: @6 m* t, j5 W+ [6 ]4 S r static BOOL ToCube()
}! A& [- @# @# \- M5 {' Q2 z {/ @0 f3 Z+ i0 _2 i) f6 [. D9 O! F& l0 _: P
if (!(*D2Client::ptPlayerClient))return FALSE;
! A" Y$ ~ h# o( a. a1 [: S! p" A. @/ \$ e
UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);2 T8 h3 `! z9 r
if (!phand)return FALSE;; h6 i. l' W, j7 _7 O- b( m
1 i/ P' Y/ z* R0 N: n UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块7 l+ K) v: g, N4 x0 c; ^( y/ N
if (!pCube)
# o4 {( t a* A. z6 j+ D {9 _4 t8 |' ]9 _/ Z* R
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块; e) G- r1 D8 F4 S1 m
if (!pCube || !pCube->nItemNum)- [4 O6 U$ e ]' _# n; N6 H
return FALSE;2 N2 m$ v Y6 b
}
1 C7 n% m& C0 x( S7 S6 p+ L
$ |. V2 G2 Z; A- m) s9 w7 g s if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))2 @% V! T& i7 g4 C7 }- n
return FALSE;
' K5 H8 W" P9 f& T( E2 K7 I5 n1 F1 N5 _6 w
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);) H6 v1 w; `: _3 U+ a
5 f5 X$ ~# f: `/ K1 T. j' r( q
BYTE aPacket[9] = { 0x2A,0 };
# R' H0 Y0 P: H9 z( ] @% x4 m9 Z, K ::memcpy(aPacket + 1, &phand->nItemNum, 4);
- M+ Z+ ~5 r N+ r: S" h ::memcpy(aPacket + 5, &pCube->nItemNum, 4);* ~7 z R# u' |- s1 V
D2Net::D2SendToServer(9, 0, aPacket);3 r8 J* z1 z @. s
return TRUE;
& E5 F& F. q9 P( X. O* T. B# u, e: t; b
7 G4 k% q" H/ p }9 z7 v$ f$ K m9 S
( J/ H( N [! F) ? static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno); V# s. ^7 S# C2 R# U/ z" k% S' b
0 p, A2 v9 o7 v. c) T4 T0 I _/ \
static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存8 \ M) A( i3 ]& q7 d
{
* B! v P1 q' P D2CoordStrc mypst = { NULL }; Y9 ?% u: {, o0 A
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
" n6 T4 |3 m& p8 x! r2 h; a! d M! `- A* c- F2 z& E
if (!mypst.nX)return FALSE;: A6 E4 z1 p t8 I2 ^( ?! \
, G1 d' Z) q9 \6 D PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
% b3 i5 G, w/ m( o, a3 m. Q# `6 _7 J& ~4 N8 y& q2 [
BYTE aPacket[13] = { 0x20,0 };7 v# x6 D$ u' {1 B" s, F
::memcpy(aPacket + 1, &dwItemID, 4);$ S5 U7 t2 W% E0 N6 E2 v6 C
::memcpy(aPacket + 5, &mypst.nX, 4);
$ U" [0 K0 k y) w% P- W ::memcpy(aPacket + 9, &mypst.nY, 4);
8 R1 B, }0 G) `8 c/ } //return D2Net::D2NetSendPacketToServer(0, aPacket, 13);2 g; ^7 e9 ~$ M/ y+ {- d$ M
D2Net::D2SendToServer(13, 0, aPacket);# J; c( f$ N. w1 L, A) g! }
return TRUE;
7 S9 V6 T5 ]' u8 C* ~2 l5 r }' U" H! \7 G3 I2 ?
; B7 ]% C+ r6 s% [8 B7 o G6 X+ H1 M static BOOL DropCursorItemToGround()
2 g5 u# z: l& H) @, X2 r( S {- b" W6 P. _, ]) C
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);$ ]' V1 Z: V4 q, J ^
if (!phand)
! ^( ], ^1 \! W return FALSE;9 t2 I( G4 K0 f
% `- q4 C4 M( @2 `+ d
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);+ L4 Q* {% h4 h. C1 K& D
- e7 Q8 S9 V3 ?5 Z, P BYTE aPacket[5] = { 0x17 }; L) O8 Z: G% @7 F/ s/ q
::memcpy(aPacket + 1, &phand->nItemNum, 4);
6 D9 G8 d" b6 W5 X1 e# P ^% ] u D2Net::D2SendToServer(5, 0, aPacket);$ W8 H( }9 X8 q$ U8 S8 x: ~* s
return TRUE;
+ r9 ^' L1 v) X0 y
( s: M* u0 D" d8 B }
" X+ H+ ?; h( I1 d: K# Z3 H3 i' _! R. v
static BOOL PickStorageItemToCursor(DWORD dwItemID)
' h$ Y- |5 L! {" r6 i* r& a {1 z& j. M9 A- n8 ?- ? A1 Y" e2 I
PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
_' w( h+ W' K. h: y4 v& G! u5 x* E
BYTE aPacket[5] = { 0 };4 c+ U3 W. T$ M
aPacket[0] = 0x19;
1 P3 Y' E1 g3 E* B% N+ f& |. O2 B$ O ::memcpy(aPacket + 1, &dwItemID, 4);# ]/ c4 X! n& G2 e4 d$ U
//return D2Net::D2NetSendPacketToServer(0, aPacket, 5);
2 q P# x' }/ q# K3 d D2Net::D2SendToServer(5, 0, aPacket);' I. P o- o; z2 d+ R" ?
return TRUE;
0 m* r& F+ h! d. A8 v9 x- S }
$ A7 Z8 r2 y: s4 V0 G$ r5 H* P& l) Q- u7 p Q# v3 y
static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)3 `' f% `. U8 q8 p4 k; K' v
{
6 a- q" c @( E$ F5 l PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);4 b3 T6 i3 H" Y6 V8 r
BYTE aPacket[17] = { 0x1f,0 };- h+ }0 j, b4 Y/ W/ n
::memcpy(aPacket + 1, &ItemID1, 4);
1 r; H, x: p/ u$ A ::memcpy(aPacket + 5, &ItemID2, 4);
- R% S4 O% f' b# t //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
1 U( J# `6 C% @1 u D2Net::D2SendToServer(17, 0, aPacket);
& W/ Y2 n0 K0 }& a& O- w6 g return TRUE;- ?2 S8 m7 g9 A
}
/ J! P7 o* G/ J. K. R
I8 J, a, f! x [ static BOOL Transmute()
6 V4 {* {# u, ^/ |* M) Q. U {$ M0 v2 q+ U' _0 G* Q- q
if (!(*D2Client::ptPlayerClient))return FALSE;
6 H" o4 t; G9 G9 [
7 \# p- j$ j8 n3 p. \5 ] if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))9 I. ^% @% d; P; g( |) e c
return FALSE;
" `' z/ [1 D, j' K( t
9 O* s0 {. G4 t$ ?$ H2 {) [ PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);1 ]( U8 I! Q' k |
BYTE aPacket[7] = { 0 };
b- H( h) A7 d0 W: J aPacket[0] = 0x4f;
5 u: h/ l3 N' U ? aPacket[1] = 0x18;' d, I/ f( m M* U: \
D2Net::D2SendToServer(7, 0, aPacket);
6 ?; h( \5 |/ Z7 x( A return TRUE;
; K0 Q5 Z+ {# x6 Q( v }
: \# {' y8 ]. T' X1 Q1 ]};+ P0 m1 {0 H6 J2 Q9 Z2 a. M
" |0 q4 t* _( D5 s5 S3 s0 y6 N
|
|