|
|
转载# ]5 M" l9 x: ^
自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:% _- V+ h' l" ~
D2Client:4 y- b/ {9 J+ k2 B w3 k$ ^, ]
6FB20AE1为拦截输入框(用于获得命令)
4 E! n, d0 k# G6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发, R4 F0 B" V' Q" K5 n( u: b6 |
6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发2 g3 L3 [7 q+ L' H; H: V3 [$ Y! O. w
6FAF4230为hackmap的loop点 我用的hackmap导出位置
1 g9 `+ G7 |& G, I1 Q( c8 `7 `* W
U: }1 Y) z' @$ z
9 @4 s! a7 ~ z8 S6 c$ z ~5 R2 T发包函数:; r/ I8 X, e- n+ ?/ Y; A m1 Z
class D2PKT_ITEM
+ a! H; R) s) V6 `/ p7 K{) U# U7 t' X2 J% k; P; R0 p0 y& Q
#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上
- M8 w( F- A: l) Q' ]% u#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多# A' h1 s8 Z( k# J6 J" r* o
#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上
9 p, J0 f& [# L- y, i7 [#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上0 x# i5 N: q* F% h- Z" {
#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH
9 T: G& J7 x* u0 ~! G#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上
# D$ W+ N {/ G' X) R! b# H9 D4 ^ M" P#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏
( _( i6 |2 D( O3 R. v#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上. ? }9 ?7 X. {1 O
#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -
, w# E# |: J# W+ Y8 m: A" |# P#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店
$ B5 e- C( V0 g" w- u$ Z#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV5 K. C8 ^$ ^2 Q9 l: Q" y
#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道
" E, ]0 P/ a2 L% p9 R2 j#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带8 }/ s; j! p9 q1 I- a ^6 v
#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上
3 \- {" n' b# w# l# A$ [/ l#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -
& L5 }4 i! k) t! Q0 A#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上$ Z' g5 ~0 A" S& K4 P2 w( h
#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -
+ K( a- C1 w, E" a; b& G; i; Z9 K* g, [; \! E; Q
#define PacketItemMaxTick 150
* |8 k, X9 Y( B* x#define PacketItemPickUpTick 20
/ J! d# n6 T; d2 g7 ]! M6 M8 x% V. g( G$ q F
private:
T7 r( O+ {: v" B! {+ k; y) \4 L static DWORD _PKTItemTick;8 X! V! F& K7 g0 F' L; ]
static DWORD _PKTItemAction;
# A# Y3 ~% V2 Y6 o4 j- i; f, ?8 P static DWORD _PKTItemID;
5 w) N2 C# u( g- |- N3 b static BYTE _PKTPKTType;
* X8 t4 W( @' Wpublic:
9 W$ s+ T" T+ B) ^; [, [+ A static DWORD PKTItemGetTick() { return _PKTItemTick; }+ g! m2 j* p" M( t) A( K
( n2 n. E0 b/ P, K9 x static void PKTItemRelease() & d" c2 l; @4 @% w
{1 g$ Z, k8 B: s. q& E, S V
_PKTItemTick = 0;% T5 p1 M; k# M$ h
_PKTItemAction = 0;! W! S: l2 }9 ]% L& d( e2 ?
_PKTItemID = 0;- U- G" L9 x5 k+ U' {2 s* g
_PKTPKTType = 0;
: O. ?$ I: N+ K! K& O }# V- i" C& k& }1 M- i
/ W2 z/ k3 W! N& D
static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick) 0 L2 d- k V+ b4 z. G
{! `$ a# S( \; G/ ]. w+ R+ j
_PKTPKTType = aPacket0;' C0 Z8 ~3 n# I# n5 _
_PKTItemTick = tick;. w: x0 x& v7 i; ?4 q' o) ~
_PKTItemAction = ItemAction;
" L; j5 L& s7 \! x5 Y( i _PKTItemID = dwItemID;6 Y" a8 r+ w- |+ V2 U( z/ x2 ?% j" g
}
. [4 r: r; F4 t1 H! X$ U' r0 ]% e% ?
static void PKTItemTellW8(DWORD tick)9 K) o( ?0 j' S
{( N* ~* }( T9 t: z
_PKTItemTick = tick;2 Z5 W; ~4 r7 p/ e- V6 w
}
; w% Z5 @) Y. w. T' t' O% p" M4 G/ ^' V
static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor
. w( i0 |/ _( e. G: ?6 p/ _- y {
0 h$ q, P! z& J: L6 ` if (aLength >= 8)
- Y6 Y% ~. w) l {& e& Y+ a8 ~" ]- ]7 y. L
DWORD dwItemId = 0;' e, R: _: \2 G6 {) S) d7 I
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
a! w% Y$ Q" |/ d* D% @. x if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE
9 p" F6 x" w& b9 F: a && _PKTItemAction == ITEM_ACTION_TO_STORAGE
+ n, Y* R' K) B7 u8 q+ t && _PKTPKTType == PACKET_NEWITEM$ d A, {' A, G* d
)+ J# p' l* M# ~- o' e; m9 I
{# K# k( I0 i" E
if (_PKTItemID == 0 && _PKTItemTick)
) a# I' p9 F+ f) J {
, q! z& G, n8 S8 f' y PKTItemRelease();
0 N7 C$ z: s5 P8 v" b% A }
! f) O! D5 ]$ u2 X- n, Z- p else if(_PKTItemID== dwItemId&& _PKTItemTick)
" U7 e$ l5 a& r1 x, b1 h {
- c7 m# }6 F( R) G' q0 g; p/ m PKTItemRelease();
% z: Y( Q. w, T1 U }$ s/ M( s7 Z( t
}
( u8 t s! S& p0 p# K+ ?
& Q7 V8 @1 t+ r }
$ ?0 \1 P$ G g8 w/ x+ o R }
( x' I( n; g! v q! }- }/ _2 Q: q. q; [, E$ N
static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored
. C& i9 g! I, ~0 A/ Y3 U1 J% j' J {
5 t3 w+ R6 v# E if (aLength >= 8)/ A9 e0 _* ?2 m! B1 S6 Q4 O% e
{9 i! i( n2 h. h. z% Z" R" [" H, p" a
DWORD dwItemId = 0;
6 O3 M: \1 e. Q0 N memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));+ j6 m J' H H' U
if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE
+ t# d; H' R; f && _PKTItemAction == ITEM_ACTION_FROM_STORAGE
" T1 q# m+ i) I I3 Y2 Z && _PKTPKTType == PACKET_ITEMACTION3 M8 c( |* K% |& r) h& h
)
; N: P& Q" ~) n {
: x; n& X8 s) _- n1 l# z if (dwItemId == 0 && _PKTItemTick)
% d% U7 X @( y6 n, X {7 l8 u1 S& v0 E5 c+ P
PKTItemRelease();- \+ |; E/ e/ F0 I0 A! T3 y8 g
}
! ?( m T u$ r* L/ {! u else if (dwItemId == _PKTItemID && _PKTItemTick)
+ x2 X; Q' {, o5 }' {. _) D$ b {, a2 m; X% U6 j
PKTItemRelease();
3 v R( R" d, z+ J }9 B( y) Y. O" R' R5 e
}
3 v+ c, s7 _* r$ h6 o$ N2 H
8 e* ]8 a! x) c( M }* G# p3 M# n& c. K e4 h$ G9 u) Z
}
: B) j" P) Y1 U. w" C+ _
! r S* m( a* E7 R7 a0 ` static void PKTItemGameLoop()& F; [4 H$ D. i: e2 ?* d
{- j% p: v- H$ Y- M* h( z
if (_PKTItemTick > 0)
: X9 B/ S/ Y% _: i; B( ^ _PKTItemTick--;
8 a Y" g0 n3 Y& r9 n" }9 U. g else if (_PKTItemTick == 0)) }. I; L# m( @/ F: r
PKTItemRelease();
' ?: k# K: ], p }# X( b- |% j" b; x8 g& ^( M
( p) o: E4 k: J4 n/ Z7 C static BOOL PKTItemCando()
3 P) p# b, e! Y) V* N9 Y! y {
1 |6 Q$ J, @4 g* B- \ if (_PKTItemTick == 0)return TRUE;
: Z; c" W; m) x/ [ return FALSE;
B, l" Z K0 h0 i }& H1 L2 v* N! A1 ^) ?
Q3 f, Q' E+ ]$ I) b static BOOL BuyItem(DWORD ItemID, DWORD npcid)
1 r H' z" u. k+ c$ q {
. ^" Q( N4 @8 _* U y$ H* c PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);" L- k3 G- A( ]5 S9 m
BYTE aPacket[17] = { 0 };
1 O- i" [4 z4 ` aPacket[0] = 0x32;' O7 ]% y8 ^6 \; P- z8 V
::memcpy(&aPacket[1], &npcid, 4);9 ~' Z! M# I& u7 c( V! U7 |
::memcpy(&aPacket[5], &ItemID, 4);
4 {, r" B5 ]9 A; o9 [; A //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);: C/ r. ^ u1 O+ [& G0 D/ t
D2Net::D2SendToServer(17, 0, aPacket);
5 c- t0 s" n1 O- P return TRUE;
' R/ g# Q0 D8 [& C% z& v }2 @( b6 S2 J' h* H$ ?! ?5 }
$ Q8 @5 ]* t$ f% z1 C: _9 _ static BOOL SellItem(DWORD ItemID, DWORD npcid) o( ~9 H1 E8 a; A+ X% r( Z
{: p& ^5 O. Y2 n& f% M
PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);, ~- _1 e1 f: ~/ Y
BYTE aPacket[17] = { 0 };
4 o+ W O. }2 I aPacket[0] = 0x33;
1 g. d0 R v! y7 x ::memcpy(&aPacket[1], &npcid, 4);
9 Q6 R7 R H! W( K ::memcpy(&aPacket[5], &ItemID, 4);' Q1 S) y% Y+ Q$ s8 n! m" C5 w) k
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
. M s1 ?: s6 D+ L; [$ w) j; o D2Net::D2SendToServer(17, 0, aPacket);$ G* J4 J8 G! Y- ^0 t
return TRUE;
0 \8 u. k9 o3 Y( N; u, _ }
9 J7 _3 z% D2 \! O
# O: m5 e$ | b! W static BOOL Interact(DWORD nUnitId, DWORD nUnitType);/ {3 ?0 ^6 b7 Z0 G0 s" D+ z
! J1 `+ u# ^4 a6 e+ M. P static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);
0 _1 D% _ S6 h$ y L4 g2 d" k
/ l6 t9 h5 c6 t3 @, h2 c7 y static BOOL OpenCube()" t. a' M& f6 }. P/ W( x# z
{! W2 D. A. V; Y0 Y' j6 N/ h
if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;# k! h: E$ u4 p/ w# M! J
* m0 p; g; b" i1 k
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
3 \- R0 w/ K8 [9 G if (!pCube)8 R7 k! v" t' ~; X2 b
{. ~# j' H/ N! R$ k3 g6 S
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);6 t( ^3 i/ _, |$ T, A$ z
if (!pCube)
1 X( Y8 \* O' f! g, m return FALSE;8 S9 q* \( Q6 \4 m# w
}, C, X" I: x: \, x& @
PKTItemTellW8(PacketItemMaxTick);" l9 X7 P6 g$ a, J
* h9 e: E' ?( k& V/ ?2 ~+ a D2CoordStrc mypst = { NULL };/ x' \$ W4 t3 S5 q) Z1 b
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
. M" y, l5 T% C' F$ D8 C
) p, {! B( y2 o; L3 X( b0 L BYTE aPacket[13] = { 0x20,0 };6 V8 [8 X3 W4 ~; S$ S- V
::memcpy(aPacket + 1, &pCube->nItemNum, 4);* g% t2 B4 @. g+ K4 D
::memcpy(aPacket + 5, &(mypst.nX), 4);
+ \; K$ |+ Q$ V+ o7 q ::memcpy(aPacket + 9, &(mypst.nY), 4);
4 L% P2 w* a" ~+ p D2Net::D2SendToServer(13, 0, aPacket);0 K! z# [ U- v, ^
return TRUE;% q R+ x# Q; z h2 d) ?: c
}
+ n" I# v2 `$ n6 a
0 N% G6 P: D$ m6 c* |% X static BOOL ToInvxy(DWORD x, DWORD y)
1 E/ `, g: J7 q6 }% r7 i {* g& L& i+ j& `" m8 U5 o" C/ [
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);* }5 U2 F- M7 W6 X
$ M0 |. t! v$ U, C; F9 n! z
if (phand == NULL); N* o7 \% `: |( ~
return FALSE;
1 g% O3 W6 M1 `5 T: Z$ i9 M8 t! b: u
: J9 H7 Z9 U0 \4 _( ~2 b PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);& X5 @/ h, ?$ I3 p/ G
2 _* r5 m+ I g+ Y
BYTE aPacket[17] = { 0x18,0 };
8 a. k9 w- V9 y4 |! i ::memcpy(aPacket + 1, &phand->nItemNum, 4);% X2 G! l+ i* {1 \+ }) H3 s/ B
::memcpy(aPacket + 5, &x, 4);
& ?; j7 H3 D2 G' [. e ::memcpy(aPacket + 9, &y, 4);" z' a0 L. W) E. u x+ s- n
D2Net::D2SendToServer(17, 0, aPacket);
" G8 |5 w" C9 H& a) I9 Y return TRUE;
) k. L" f! a0 G" _$ i+ l }
3 e6 Q2 }4 F$ Q& z6 ]1 P, Q: Y$ B2 [% S) R7 B) A
static BOOL ToInvRandom(BOOL bBagFix = FALSE)
4 ]/ S4 H) g& Q; q {. c8 X B7 Y' Q4 G
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
) R+ L$ y9 _) ^9 [0 M% U4 D, S# C if (!phand)' F5 }2 U1 P" H7 `/ B- d9 Z
return FALSE;
- ]$ _% X- n. N3 Z1 {/ d- }: v int desx = 0;
, Y3 m! V ~; F: f6 i9 q int desy = 0;
0 h/ [7 x( G4 W* h6 H( o' E if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))
1 \- E+ i* D. F% o8 { {7 e9 c. f. q' W* ]8 s% u& I* @" ^
ToInvxy(desx, desy);# K$ g) Y: r8 Y. |! Q$ ]1 j4 ^
return TRUE;
/ }7 y! |; Q9 k# f }
& P+ y, w) S5 g1 }5 w2 ] return FALSE;
) t- k5 {+ B! j( X/ x8 {" S }
( `! r( u0 m& Y
' L5 b! ^/ l2 O0 V p static BOOL ToCube()
0 v4 }) @4 o; o1 \ X- s {
; I+ t$ j4 O1 w; x0 l- | if (!(*D2Client::ptPlayerClient))return FALSE;
5 l) a6 C) Y, t+ m
6 w3 }5 i+ j7 Q6 H7 g UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);/ g# P: \) {7 y" k! v* F
if (!phand)return FALSE;
& y2 A% c6 l/ O: h+ I9 X$ k9 \3 v; |7 R; o
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块" K% F4 b8 H" M' u4 d% P; B1 \
if (!pCube)
5 ?% a- a* A# _ {
2 S# C) P( |; D$ W( m: L6 A pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块/ k' Y7 p- Z0 b) K- d9 m- L
if (!pCube || !pCube->nItemNum)1 Q4 q; K8 T2 N' P5 ~
return FALSE;8 v$ B' w0 H% }: f/ U3 {
}: H; w* m- ]6 u+ I. t# U
: I" m% ]3 ~' ?) e" ` if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))
0 Y8 p' X" h6 ^0 p P5 ~ return FALSE;
9 L1 k2 P- C$ | `
. D- j* R1 Y2 n* J PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
, q1 V& i6 v3 ?. F# N5 L" |: Y0 f
BYTE aPacket[9] = { 0x2A,0 };; {" ~: i: e6 R/ |
::memcpy(aPacket + 1, &phand->nItemNum, 4);3 a0 ]9 k! U" }4 \* Q8 j4 h. N
::memcpy(aPacket + 5, &pCube->nItemNum, 4);
( v1 \3 y" V1 `7 ]+ U+ s' r D2Net::D2SendToServer(9, 0, aPacket);! e' v V. {! i6 `: j4 f2 E
return TRUE;: a' A7 @# q5 Q. L( C: \! K2 l
+ k5 D: q3 [+ E% o" G) Z V; {
}
5 D- \6 R# I6 q. L* B( e' r u0 e' Z: y9 r/ _
static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);
" G' _1 v, E3 s3 l' h) j7 `& D2 u' G7 f4 i! h
static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存
D* j8 p2 F# `+ g {) C6 h5 s$ b9 A; ]$ u* d* y
D2CoordStrc mypst = { NULL };+ O: {' N. q& k
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
& r. q1 n; u+ E4 ]6 {" Y. D
5 Y8 B1 u% E' d x% v" h if (!mypst.nX)return FALSE;% @- H, t' n' R8 h4 L6 j
0 W8 d! {4 U" \1 u9 w$ W8 k PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
. O, k" C: ~# Q8 [ h7 u7 _+ f0 A1 Q
BYTE aPacket[13] = { 0x20,0 };
# U% z% G0 l) a ::memcpy(aPacket + 1, &dwItemID, 4);1 A$ a, V# ^ _$ @
::memcpy(aPacket + 5, &mypst.nX, 4);
: F4 m# W3 w+ j3 x9 L. D4 X ::memcpy(aPacket + 9, &mypst.nY, 4);
/ x+ A& B8 n" ?0 w6 z //return D2Net::D2NetSendPacketToServer(0, aPacket, 13);
4 [2 S) s- ~: [7 G D2Net::D2SendToServer(13, 0, aPacket);& C" P# k0 b, d( ?. m
return TRUE;
( c) @* s' x( K. I* m }1 B4 g) y b5 R
8 M) p3 q5 N" h
static BOOL DropCursorItemToGround()
! ^+ [: X4 i$ j- D" R/ ]5 Q0 x {7 j; a9 ~5 [0 M. p1 N6 g X
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
$ }5 u, U$ U2 l' q8 c4 q& f if (!phand)
" }- O. I! y4 f8 ]. E% E return FALSE;
8 w) ?/ m$ S/ J2 P5 Z1 y' A% s/ {! O$ j* b9 s L
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);- v( s8 x# _' l; z, A* O8 n
8 E5 Q; M5 w* B% b BYTE aPacket[5] = { 0x17 };
8 O/ C, W! S# l# `* ` ::memcpy(aPacket + 1, &phand->nItemNum, 4);
7 c+ r0 U0 X3 p( c D2Net::D2SendToServer(5, 0, aPacket);5 @, O" A: M6 ~9 m- e# T3 f
return TRUE;+ L3 b! k9 v6 U, ]
1 E5 h1 j$ i3 O$ B
}
) M8 N8 N- f H1 |8 q- ^8 y$ ]5 T- w/ C. O9 V) }; x
static BOOL PickStorageItemToCursor(DWORD dwItemID)
! K# V: y& r9 W9 D- _0 ?) z {
8 g) L/ n4 \6 U) y) ^# l PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
( Y8 x- ? o4 V5 M3 @, ^, g6 P$ F0 }; q# s8 n
BYTE aPacket[5] = { 0 };
: r9 {0 t. x1 n aPacket[0] = 0x19;
1 I9 h, p' y2 z2 T) h9 n9 _) ] ::memcpy(aPacket + 1, &dwItemID, 4);
% h% P5 T+ p& @( b3 x& r //return D2Net::D2NetSendPacketToServer(0, aPacket, 5);# p+ O" p! U/ R) @
D2Net::D2SendToServer(5, 0, aPacket);
5 E" P/ ~0 L X; o3 b+ n3 x' h return TRUE;
8 n5 H( C9 Y5 _6 m2 C8 W0 p6 o }
! D% F! d3 S0 C% W, h1 i8 e5 }- y6 m% z1 [! u+ I) A9 \
static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)
& X# M- Q2 g# e( Q {
& g& `1 [1 c( \: l PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);; D! m3 H ?6 b ?/ n7 I6 ^
BYTE aPacket[17] = { 0x1f,0 };
8 {) r: d% }% z. y ::memcpy(aPacket + 1, &ItemID1, 4);
8 E/ k6 `6 H* `; u; V ::memcpy(aPacket + 5, &ItemID2, 4);1 \- K& D' Z+ B$ {# k
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17); F1 ~# }3 O3 [
D2Net::D2SendToServer(17, 0, aPacket);
! f9 D @3 }. X- H3 A" g. J* \ return TRUE;7 q2 L! _- w: Y$ _6 s4 a+ U
}' O. v3 W) V: c
1 r9 {$ x" z$ C( ?3 ]+ _% E
static BOOL Transmute()
" C1 y) p* |0 n- ?! {- L {$ H' m% T" }/ S' |
if (!(*D2Client::ptPlayerClient))return FALSE;0 X- }! O' X. H
) l4 n2 G+ Y; z% Y if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))0 H( Q+ {& h9 S% K4 u
return FALSE;- \, c& _1 K* j
( @& `3 B& R5 c+ y PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);! ]& |3 k4 m2 g" a
BYTE aPacket[7] = { 0 };
/ o* `# r, G6 F% T8 m- S aPacket[0] = 0x4f;
* N: t7 ], q6 P3 y7 K" `- s7 g" [5 V( M aPacket[1] = 0x18;
, E* D- P8 W5 a2 p D2Net::D2SendToServer(7, 0, aPacket);
& b# ?& p- q: Y; }2 r5 q return TRUE;1 S) V" v# S8 @5 q, T! N8 ^
}
8 L0 j7 o5 d& j3 W};
9 J& s6 ^# j ~% R+ J
. u2 _1 n) c9 o; e |
|