|
|
转载 i: H' w2 K! y2 k+ r) G
自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:# H+ i/ q9 y% X3 z
D2Client:
3 B( {0 Z4 ]$ k3 ~6FB20AE1为拦截输入框(用于获得命令)9 m0 @* s( J; E
6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发
4 }0 J+ Z- Z/ \0 S; V6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发
% L' {6 n4 V/ ?4 p1 y: r6FAF4230为hackmap的loop点 我用的hackmap导出位置
& {8 V5 v0 D! l0 d4 s1 ~- m; K+ j$ w5 L2 S( c: X
$ F% ^9 y; }/ T7 T+ ~发包函数:
' J/ L0 X' K ^' s8 r/ E" Bclass D2PKT_ITEM3 N6 p. E) i6 U0 d+ s
{& `8 z, \1 [3 C1 {9 s! \3 m
#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上1 K& z* E; ]6 I p8 x- T/ C
#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多9 W% G7 j- @) u
#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上& J1 g1 X1 p& w+ B% T: I( v; }
#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上* Z8 m! _% |6 |0 Q
#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH* F4 V+ x! c1 d- {5 Z7 K
#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上
% w g u8 K8 K5 z/ D+ {#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏' m: [' F [7 f: F# y
#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上
# ^( c3 K4 v6 d+ {0 b#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -
4 a. V( P7 x) R7 k% q#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店0 u0 A O5 ]- N$ p# ^
#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV/ z9 ~' `/ d) \" i9 N4 @5 U
#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道 7 j5 s& \& R& C. `: M* S1 X& ]) L
#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带8 h' l1 L2 d3 @8 X R1 d* j
#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上: K$ [3 T' ~( \& f
#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -2 w6 z/ s- P! f/ t; }% `7 w
#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上
* T% ]* q) s( b- @#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -
8 p5 T( S: Y% m6 S% w; f2 Y
" S x% W$ h2 w) D8 L% Z#define PacketItemMaxTick 150
8 Y# ]8 f+ P! ?1 G0 x) p6 L#define PacketItemPickUpTick 20
9 E9 y( q. B4 |; ^) K. w* S7 ~7 U0 b; X& v
private:
+ L8 Y. \ p! f6 g( b9 n static DWORD _PKTItemTick;( E. u. o) D. b- Z
static DWORD _PKTItemAction;
# y. a6 W) P/ B' v q static DWORD _PKTItemID;
1 T) ]" m4 U, j/ y7 B4 G static BYTE _PKTPKTType;: Q- F/ @- r# S, D; f; _
public:
5 r; {( V7 B: [- a3 T% | static DWORD PKTItemGetTick() { return _PKTItemTick; }/ ^, K! R: S; k! Q y% U
6 B2 Y: [$ g4 c+ n2 Y- X# w static void PKTItemRelease()
1 n. z: |6 j) T* ^ {
3 m* Q. c% H( k! }$ Q1 h _PKTItemTick = 0;
' m% g0 y& c: V+ O# q' @ _PKTItemAction = 0;+ d1 k" S$ q+ y' o) M
_PKTItemID = 0;
5 b1 U; _" q$ K2 S! A& q _PKTPKTType = 0;
$ _# B9 M, K, i j, ~ }
/ Y+ U* d/ Y' ^+ X' B
( a1 R) a' p- A4 s/ Z6 v! C2 G static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick)
. A! D! t$ Z1 c5 g. E) F {
0 d& `; ~: M' ?. y; m( a _PKTPKTType = aPacket0;% h9 }+ T+ [2 R& v& r9 s+ b
_PKTItemTick = tick;
* j# C. ?( q; ?6 f5 H _PKTItemAction = ItemAction;
* a/ f1 K7 M1 z0 K, l: G& F i _PKTItemID = dwItemID;$ v& v& ~1 f; m# O/ g: D2 L% F
}9 s& Q+ i) K6 g
$ e. f3 ~4 n: w5 o: m) X
static void PKTItemTellW8(DWORD tick)& \; ~5 i k# X, U, B8 j: v9 t6 G
{
9 x/ W( u0 R4 F; |) J: I) Z& C _PKTItemTick = tick;. J$ `# O0 w7 B9 F8 X& k; q; r
}9 K( Y6 y, B ?" l, [3 u- }
. Z) H6 x- B4 ]+ Z* I static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor+ b4 A6 U/ v9 Z
{
- U, _1 S1 m9 I: u1 e if (aLength >= 8)
. @1 h @" t& V% V7 r/ [5 O0 Z {' b. u. T: X" x0 p# z
DWORD dwItemId = 0;! t! ~- e* v2 @" i! j) ~
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));# o: M6 G, ~1 M# t6 e: N
if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE" n0 f8 Y6 M$ a |: L
&& _PKTItemAction == ITEM_ACTION_TO_STORAGE
* n8 O4 @% F- v% v( M' M) {/ |1 l l && _PKTPKTType == PACKET_NEWITEM7 i1 i2 q; F* `- t ^) e
)3 |' D( q) e' ?, N/ j( ~4 D
{" b" b9 w u4 h& o% A u
if (_PKTItemID == 0 && _PKTItemTick)
2 O; B( T+ y" E& n" V {) s, N: g6 m2 X$ f, I2 p# v; m! M
PKTItemRelease();" T L7 q K$ a- J
}
4 C5 V" }* ?+ @ else if(_PKTItemID== dwItemId&& _PKTItemTick)
5 t& w8 N6 G/ I6 r. S { {
0 a5 z3 g% N, p1 q/ P PKTItemRelease();, f/ ?6 e n/ I" n" m' E
}. Q$ C+ z9 s2 R$ N
}
7 @7 c' x U1 b- ]% ` 8 ^' t: I: U7 q1 p: b
}
, B. u, b' R4 ?( n0 [3 T }
5 X+ d& ~# [+ r3 G3 V; A$ s
. e( m+ t! A5 {! r) {3 ~; | ` static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored x. a3 v! k, ~5 W v, z
{
& ~/ ]+ z) J M. G$ p* O D. W# G" k if (aLength >= 8)
+ B" B4 b7 I# b0 R0 U {, E2 T& Q4 |" G/ p- O* H6 \
DWORD dwItemId = 0;9 y7 h/ L4 K6 s7 _
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
2 n8 P8 ~& `, e2 G, } if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE
|/ M' e9 t% J$ U) l && _PKTItemAction == ITEM_ACTION_FROM_STORAGE- n: H$ `' E2 ^) N
&& _PKTPKTType == PACKET_ITEMACTION: y' }2 e9 l8 @) S! _
)0 n5 T1 c, T6 d9 J
{
2 C- L* Q+ S: u if (dwItemId == 0 && _PKTItemTick)
4 m0 X. C$ Z/ H2 K {
" A" [+ K6 R* c7 A$ I PKTItemRelease();1 d! F2 c! Z# k2 @$ B+ d
}
* k4 ^, x. E9 Y. ] else if (dwItemId == _PKTItemID && _PKTItemTick)
! B+ {, @$ z+ n% M% `% x1 l" ? {/ w5 [$ a! l% u5 H
PKTItemRelease();2 L0 Z! a( \: q5 Q
}) j3 v I$ S! l( v/ h5 S2 X* {7 p
}5 J3 e$ G: H( _: L h
! Q1 j( v8 F! _! q Y }8 i7 n+ v9 W. h# M: p
}
9 v4 p4 W% N9 n; p8 [8 T0 j/ b# R( ^1 g2 Z& w5 {9 n
static void PKTItemGameLoop()
! d" ^! h% [# H& z {$ E" B( {( b6 _' m, |% s
if (_PKTItemTick > 0): K) \% w; u& c6 q
_PKTItemTick--;) o2 ]" T+ k, K" M& b
else if (_PKTItemTick == 0)
n( j ^* ^, d# w% ]; W% f PKTItemRelease();' a' w2 k# H# U$ f& n
}
% b- M" ?% Z y* ^- L& J- M" x( _) c0 Q; o- F3 [, O" U3 @
static BOOL PKTItemCando() ; Q4 b' Y. |5 T( F. D& }: E0 v: J
{9 @5 c7 r+ a$ U: v6 c* G
if (_PKTItemTick == 0)return TRUE;
# c3 ?) D0 d0 {% b return FALSE;8 ]/ Z0 J7 j3 b4 L) ^# T' P& D8 I) b5 q
}
, `8 X+ d8 i* o& ~ a" r$ q! t& c7 v, @$ d
static BOOL BuyItem(DWORD ItemID, DWORD npcid)0 @/ `$ W( b" z, f" m3 T
{4 G" h; `: i! j6 F3 }$ w" x& u
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
7 t- e- ~7 ~& ]7 E BYTE aPacket[17] = { 0 };
/ Q( |2 U. P3 V" ^ aPacket[0] = 0x32;& r/ p7 _( T$ |7 f+ q$ N5 @
::memcpy(&aPacket[1], &npcid, 4);
$ T# l# w8 Z* t S ::memcpy(&aPacket[5], &ItemID, 4);+ M7 u5 l( Q8 P# g- ~5 h% ]- q7 l
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);+ D0 A( q6 j+ D5 |: P2 Z
D2Net::D2SendToServer(17, 0, aPacket);
$ a9 s+ i! u. z3 {' T return TRUE; q, o$ r( w X0 d+ Z( m5 I# e$ a
}
/ z, M4 q. L% ?( a( B- ^" T7 H& Z j& v# n9 e8 {. O* s
static BOOL SellItem(DWORD ItemID, DWORD npcid)% {) M0 [0 d: J0 c: K" u
{& i% F$ s4 d5 q- ~% n$ |
PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
: `* j6 c$ B7 I8 _ d, }6 h# T4 y BYTE aPacket[17] = { 0 };
m4 M5 K( B, n8 @ aPacket[0] = 0x33;
% g3 G B$ T; H0 P ::memcpy(&aPacket[1], &npcid, 4);
( Z5 a+ v5 L8 b' W9 E ::memcpy(&aPacket[5], &ItemID, 4);* V& {& B9 B+ N# x4 |
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
. a8 Z& J6 ?7 z, x- }5 S D2Net::D2SendToServer(17, 0, aPacket);; v$ J) {7 i3 f/ c$ v1 J
return TRUE;; a e: ]9 S* }7 x* B
}
( D5 l/ L" I8 W, \+ I1 ]) S, T9 B# P/ o7 |. v
static BOOL Interact(DWORD nUnitId, DWORD nUnitType);
1 d: B6 L5 S, s& L3 b( k" y6 A/ ]! L. x; j# R ]
static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);7 s, n( n7 U" D0 F9 b6 n) e D/ D
3 B7 {& I7 N% ~3 T3 W" J0 y static BOOL OpenCube()
4 R- p' q5 ^, I1 I3 V- ^ {. l3 N% q' B0 |6 u" v
if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;. ]. a7 r" }4 T- t6 [8 H
4 ^3 R( l2 f5 Y3 p, D
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);. y. J1 a6 L) L0 o
if (!pCube)
. d4 Q9 v5 t7 G+ } {6 y1 d1 F9 y6 s: L- `. H0 W
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);4 F: _" Y3 X: J# o, x1 T
if (!pCube)/ D! z3 h" ?* e! e
return FALSE;/ u- R2 {) t7 j9 u8 w7 N' B
}
+ \5 j9 C* N: l9 a9 \5 d. ^- q PKTItemTellW8(PacketItemMaxTick);5 A$ h9 u, U; r9 K, e/ s9 m# h" z
5 W$ v" e7 N8 A8 D D2CoordStrc mypst = { NULL };& c. J9 y7 u( ^
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
0 ~0 I/ o: `+ n* X! q+ \" x7 Q \4 g% o- r% c v& h" p
BYTE aPacket[13] = { 0x20,0 };
' |; u9 A/ V0 j& ~, t ::memcpy(aPacket + 1, &pCube->nItemNum, 4);
1 ~& z( ^7 V/ i ::memcpy(aPacket + 5, &(mypst.nX), 4);+ _2 G( H) p3 d. {& s4 `; {# z
::memcpy(aPacket + 9, &(mypst.nY), 4);& _# Z9 w; i B9 E
D2Net::D2SendToServer(13, 0, aPacket);9 t$ ~) }8 V1 L2 d. u$ }
return TRUE;
) h& F4 H& o; `; ^7 U, } }
9 N& T! v% ~( G3 U/ \5 ~3 z( U
) K( @2 z- [. y6 X- ~3 _) {: h static BOOL ToInvxy(DWORD x, DWORD y)) q' Z7 k" C. l0 ^( E+ d* q
{
4 x9 |6 {, g y( o/ j! B" w UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);1 N* f) S4 G$ U2 ^5 u
: J5 ?4 s) q0 N' H$ K if (phand == NULL)3 X, s; h4 G' M% f. u. x( ~1 k) x
return FALSE;# e' u9 `' }8 Y4 z) d
0 _: Z! ` @. q; A6 ^ PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
* ~- d' x3 {3 @4 n/ v; Y" B$ h* e. ]8 e# w C
BYTE aPacket[17] = { 0x18,0 };
, |5 M( w3 u$ E" _7 n; X ::memcpy(aPacket + 1, &phand->nItemNum, 4);* H3 w( N* ]; W# }" C
::memcpy(aPacket + 5, &x, 4);
4 _* J7 V6 m+ f4 a8 b( | b ::memcpy(aPacket + 9, &y, 4);& d# }4 I/ X9 ^2 [
D2Net::D2SendToServer(17, 0, aPacket);
& `' A8 ]4 `0 P! z' ? return TRUE;
8 [0 N, ] e- o9 V& K& D' c }& {; N# v1 ?" O2 T
( J: v U; Q+ |" R$ h
static BOOL ToInvRandom(BOOL bBagFix = FALSE)
' d" o8 ?% |! l! h* P7 D- r% v {
' p! y0 D) J; y# `$ x. T6 v; y UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);2 s4 b. E5 D% \: P
if (!phand)
! C" {6 A6 v" J5 I$ a+ _ return FALSE;
/ ^" D( {+ z7 E3 m int desx = 0;- t) A# `. b' {9 s. A, b+ M' Y
int desy = 0;
6 J- U4 F; h7 }% { u( c if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))% j( d t8 |" p7 E
{
' z4 z) K6 r K3 @) V+ a5 T ToInvxy(desx, desy);" ?; r8 |6 {3 `; _$ s
return TRUE;/ O8 R2 w0 v/ c; [4 C$ e
}$ S1 y, w% Y! E5 k1 c
return FALSE;
/ @* O% o# e, n4 x: P }4 E% P( X) w- h! L
0 y. B$ I- b5 W# W+ `3 M/ C' t1 T! v static BOOL ToCube()
3 g9 y; ], x8 P/ O {: p- n \4 f# X6 Y! u6 |
if (!(*D2Client::ptPlayerClient))return FALSE;
: ]* R1 f1 Y$ i6 h6 T/ n' M W
: o0 L$ g" }; l/ A/ b UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
% s' Z" S6 ]1 [5 x8 D/ C if (!phand)return FALSE;6 f7 g& A. t" h; Z
5 P) x; f {0 ]' |7 f
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块
2 }& V! z/ A- c1 Y if (!pCube)
6 Y X' F+ l! [/ R {. s2 S3 \. G; H3 n
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块# `) f! p' y9 I4 U* h/ a- A1 H
if (!pCube || !pCube->nItemNum)
& @( V& F" x5 v+ f4 X4 x return FALSE;& o1 q* J7 M: ]2 U+ P) }
}. m: g4 A7 b0 L$ c' f$ O# \
: {) C. }& z. S# q& N% R if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE)), `0 C1 y* t, Z3 J
return FALSE;" x! o% R5 A7 T0 Q
6 J8 Q `% U" }. a; w
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);! [0 l4 K# w, U
/ J! o" _/ o% S+ V" `
BYTE aPacket[9] = { 0x2A,0 };$ h( F5 @7 c f: E' @& ^3 ~
::memcpy(aPacket + 1, &phand->nItemNum, 4);
* [* B2 M8 N/ i ::memcpy(aPacket + 5, &pCube->nItemNum, 4);
" g2 S; |: h9 i! s6 V3 B D2Net::D2SendToServer(9, 0, aPacket);
2 e+ L5 }9 c! p/ L return TRUE;
- t' i9 M0 o3 T7 `1 ]( ?6 c1 @2 f
1 V, g l( M( O% N }
; h \! D2 t6 b9 J
% r$ n5 x, a4 R) ~% ] static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);
4 x; x# ^8 I g6 E) C2 o4 Z4 D
: A, h! e- I5 V | static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存/ N7 H# ] x# G- p2 I( ^, @
{
0 i3 K; J. y: _5 Z D2CoordStrc mypst = { NULL };
3 T) q* w* s. [ D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
* J$ l, v, _" `5 d. P- V
6 E$ C- i) C5 o/ R& f- x" ^7 H! u if (!mypst.nX)return FALSE;5 r) [) d3 v, n; J- q$ V/ ~% ~" \
& m! k( T$ _$ @* o# L
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
0 j; w6 i4 j8 m2 h- N" I! T
. |' q+ m( A1 Q b3 |- a( t BYTE aPacket[13] = { 0x20,0 };2 R ?2 Y! R2 I" c; t
::memcpy(aPacket + 1, &dwItemID, 4);: Y4 h5 S3 }9 ]+ P- h5 k
::memcpy(aPacket + 5, &mypst.nX, 4);
( M( A' [* ~8 j8 m7 ~ ::memcpy(aPacket + 9, &mypst.nY, 4);
5 ^! `+ ?8 ?$ A6 @ //return D2Net::D2NetSendPacketToServer(0, aPacket, 13);
. t' I1 @. K- I: s, F& a D2Net::D2SendToServer(13, 0, aPacket);7 X. [ Y8 A8 m
return TRUE;
, G. ~6 L" H2 L9 o! V }% d& r5 P, g, y( a, O7 j4 h
3 G1 ?; ^$ E. W. r0 j1 o) I0 t! @
static BOOL DropCursorItemToGround()5 P( A2 M t4 X4 k7 F0 Y
{
2 t3 x2 l2 y# W" Q, g UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);- Z" i6 j* G: T3 W
if (!phand)
# g+ i8 [+ E! K) t; {* G' Q6 ]% | return FALSE;6 L: L! A; r& Z; a
; ]; n3 l( X ~( f& I PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);" @5 y& e3 G2 _ W5 d
9 f5 m! a7 ]# B* K' Z5 N/ O) d
BYTE aPacket[5] = { 0x17 };
: u$ a' @6 V# I$ H; [: r ::memcpy(aPacket + 1, &phand->nItemNum, 4);
3 M. Y1 P0 {7 d/ J, k+ q2 ` D2Net::D2SendToServer(5, 0, aPacket);& [& X3 I& K# ^) q; ]
return TRUE;
$ @9 H X+ n6 M0 g. G; a x# k- s
9 n2 h K4 f* F* ? }
$ G" v, l G9 D+ Q" o7 r3 }* \: n5 f. |
static BOOL PickStorageItemToCursor(DWORD dwItemID)$ q0 ~# ?0 v! V3 |' r% c4 X+ g7 H! A
{
' a% ]6 T2 U$ F9 Q3 f PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);* D* t* }; _3 H) C0 y% u/ q
7 Q. L9 K( f' q8 s* g- @
BYTE aPacket[5] = { 0 };
0 }/ p X, ?7 T6 b aPacket[0] = 0x19;
, b, M/ c C! O9 U ::memcpy(aPacket + 1, &dwItemID, 4);
! a5 A( [- v9 z- ?5 x. m //return D2Net::D2NetSendPacketToServer(0, aPacket, 5);$ y+ G" r) c7 A% f, E5 J
D2Net::D2SendToServer(5, 0, aPacket);; F: k6 b( V }3 b; T' y
return TRUE;+ h5 B. [# M6 R. `1 q$ ?9 {
} q7 L" p& h/ I% h- ~' i& ~ \
& b9 K8 W( O$ V' G! c! F" q1 i
static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)& c4 x, M8 d" V' G8 E' o. m9 F7 u
{7 M! m# t1 d9 v+ I6 t* L
PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
3 |$ p- v4 f# H8 {1 z3 F! h2 f BYTE aPacket[17] = { 0x1f,0 };' t7 U0 c$ r7 \+ O, ~6 Q
::memcpy(aPacket + 1, &ItemID1, 4);$ v* k2 A" b9 A. w# D1 g9 b3 n
::memcpy(aPacket + 5, &ItemID2, 4);
7 }* p. A3 e$ j( q1 E //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
?" ^' q3 u' m4 Q D2Net::D2SendToServer(17, 0, aPacket);7 F( m$ b: W( @" ]7 k
return TRUE;
6 @7 z v$ B$ x2 z9 G }
; }4 p: m. q5 C4 Q
6 A3 T1 t- i/ V2 ~. d static BOOL Transmute()
4 @2 o" X F8 f {
* r6 L d% X; d* | H, f if (!(*D2Client::ptPlayerClient))return FALSE;: C) I( D" i( y& |. @( g0 l; W7 M1 V
- |- N( T6 L+ y& V6 n# z- O
if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))0 e8 G) I3 d' C- I" x: f6 {
return FALSE;
! R5 q6 D+ Y, h' ]' G! V3 i) d0 z5 a7 B- L9 B0 i: @, t. G
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
0 k' x. X$ H1 R7 ] BYTE aPacket[7] = { 0 };
, _# b4 T4 {3 ?) w aPacket[0] = 0x4f;
4 u; d2 R% t' n0 Y0 _, }4 B/ j aPacket[1] = 0x18;
1 [( k. E/ w( z0 F( m' R D2Net::D2SendToServer(7, 0, aPacket);8 i. V6 d2 [" v2 d" q
return TRUE;: f7 ^: w0 G! |+ M, u
}
; u) K" R' J( L: U" {/ H};
4 j9 Z! O5 r3 N. K
( Y3 Y0 U3 `, T( Q |
|