|
|
转载 S4 J {: u( Q9 ?! d# D: U: @1 q" r
自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:
% @* i* D. K" N' K+ U. R( FD2Client: O; }2 ~$ Y7 A' |9 ~* h* U! r" M
6FB20AE1为拦截输入框(用于获得命令)
% ]. R+ \# ]: f- i6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发
' _ V1 j5 @0 E9 E6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发
+ t0 z! w! ?9 D! K! Q1 c0 p8 x6FAF4230为hackmap的loop点 我用的hackmap导出位置7 L3 Z$ j, R3 J2 I
- ]1 s# N1 `! z: Y) w$ H" z
& \6 p0 A9 }( R }% f4 H3 [ d$ x/ L发包函数:
) d" k6 c! o2 Z( _5 ^; b/ ~class D2PKT_ITEM2 J: T5 W% M$ V, z. y- t
{" ]/ v: R0 h! p6 b9 S6 Y% a6 |; I
#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上
; F) u4 ], w# K/ o#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多
2 G2 U0 X( p: d* e5 u0 f#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上; |3 e g; o6 c' Y) A4 H, H6 u& h* h
#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上8 Y. s/ a6 u- l$ G" W+ {
#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH- [, m5 |; m& M* x2 ^
#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上# w% K/ ^. V3 q5 J
#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏( f l: }* B: r8 H
#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上
+ d$ M3 L' S6 [0 r#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -" L+ C/ z' K% \9 o
#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店5 Z+ \; T. s) `- e
#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV
- A" K3 M! o& [#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道 + F; J! E. D2 ?9 N4 r7 u2 P# C! z
#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带( h+ ~) O( q- V3 X
#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上6 M% |- F! l* \* o N, e
#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -
' f' |8 b5 O3 |6 @! i1 B#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上% G6 G7 V: |. c3 u' ]% h7 s- P4 b% L
#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -
9 I( Q, R6 b& ^0 q! a I$ M0 Y0 ~) ~) E' m5 A8 [$ e
#define PacketItemMaxTick 150
. T3 ]# h, ~# s0 _: u#define PacketItemPickUpTick 20$ ^3 x7 D) v. K% M5 J* t3 D! I
0 W0 x1 E: N+ h. m% b2 [; ?+ a8 x. L
private:+ a, d* w/ U/ n% v
static DWORD _PKTItemTick;
- V+ D) _; l5 N7 V2 F7 O static DWORD _PKTItemAction;$ n# T$ Q2 K3 z0 e% J
static DWORD _PKTItemID;) G8 ~. P q- U
static BYTE _PKTPKTType;
# K& q+ k( B/ `% Upublic:
! }5 M+ x j: m4 Z+ o/ y static DWORD PKTItemGetTick() { return _PKTItemTick; }
! [, D! w$ L7 i n2 a% _! W) Z2 c6 w7 ]8 D& Y+ Q4 y
static void PKTItemRelease() * a* g" \8 ~1 o/ R& E+ {! X5 K
{
6 H) E& q) K/ @& G _PKTItemTick = 0;+ l0 F$ r" }. s9 E2 e* J3 w
_PKTItemAction = 0;
% Z5 T1 G; V8 r- G I/ }* w- g _PKTItemID = 0;0 G2 X! i/ B" b
_PKTPKTType = 0;
0 C% u7 p$ [6 [; o8 Y) R$ e }" D3 S! ~ s6 B( Q
: Q3 A! k+ P5 z% e* r! h static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick)
|4 {. u: p: J6 x" W x {3 b, g: E2 \6 z) X* | i; ]6 g
_PKTPKTType = aPacket0;
+ ^5 H$ N- L; Z; w( S _PKTItemTick = tick;
- n' {/ T r' j6 l$ P8 S. ~ _PKTItemAction = ItemAction;
8 L+ [$ p7 J( l% T3 ` _PKTItemID = dwItemID;' |1 t) ], F$ H* r G& `
}
& M; \& q+ U4 z
# \% F K& d9 }5 |" z' t0 l3 R9 c static void PKTItemTellW8(DWORD tick)
% g" y+ P# g, l2 P( w6 L {- { ]6 o6 L/ b8 N, K
_PKTItemTick = tick;
9 s' h# J$ E' ^: W }
- _9 L4 A5 v+ L2 _. o
3 S8 l. E: m% T: y( U% S1 K1 S static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor9 N! @3 E* {5 b# t! ^
{
7 w8 J3 K0 ]; m9 y3 }# Y! Y* S if (aLength >= 8)
) ~( ~. a4 e, w" K/ j {$ J5 t" k. d, @2 }3 R4 ?
DWORD dwItemId = 0;
$ j4 l$ [4 X8 q8 p8 q+ X& W7 U memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
h4 ?' P0 l7 j2 A0 u: e( p$ j if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE
% [; s2 H) Q) l) S. }( |' a && _PKTItemAction == ITEM_ACTION_TO_STORAGE$ s& f, \5 G E
&& _PKTPKTType == PACKET_NEWITEM
3 X- U: @% n9 `$ j$ U( X3 F4 q3 m )
, y0 }2 r( o' [' Y {
) F* z. r( o' U+ w3 ]' o* F+ z% Y9 r if (_PKTItemID == 0 && _PKTItemTick)
& R, f, y8 ]# u6 t, g2 Z {
! x% X' D# R" f% K4 v; V2 A PKTItemRelease();" E4 b* q2 ?4 A; ]5 a- G
}
$ v! C) T" c- \4 F* d: R) S else if(_PKTItemID== dwItemId&& _PKTItemTick)
! b1 r$ a& j7 N. z, U1 u% e {% s% e" P$ U# R* r, c6 [4 `
PKTItemRelease();
! Z$ w- A1 \6 O+ P }
, [% q( V0 _ u+ y7 N3 Y } R" b- Y/ F$ C7 z- G1 W
; M1 B) N Z* ~, l" j2 D
}+ h( R6 M" l% `) _7 `
}
3 \6 R k5 D, [4 U( @/ ^
5 a$ W* ]( c- M3 O! l3 p static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored0 O1 U3 L- ]; o) a1 j
{+ d" y4 e8 Z! Z6 Q2 w
if (aLength >= 8)' k- G/ W% s. `+ e/ y) c
{* `4 v1 q( r, u& `
DWORD dwItemId = 0;
# C. J/ j, Y( n7 m5 b memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));0 w! m% e1 }0 x, F
if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE
6 L+ q! q% q* ^( J% u5 b( o# O && _PKTItemAction == ITEM_ACTION_FROM_STORAGE
6 P# A) e6 `- V v && _PKTPKTType == PACKET_ITEMACTION8 Y: g1 u# D) N1 @( r1 S
)6 v5 n) o- F1 e& O8 u# L
{
+ V/ n, P/ r2 t: C% H4 z if (dwItemId == 0 && _PKTItemTick)* m7 y0 Q! B6 q! {3 W5 \2 ]# C( g
{6 h/ A# l* ^' O7 @* _8 ~
PKTItemRelease();
; Y# o' V5 F0 `% w Y7 S1 T" V }2 g* Z' c _7 a U* U( h$ _" \( q
else if (dwItemId == _PKTItemID && _PKTItemTick)
+ O( H$ a7 [1 \7 i; M {8 G- _% }4 y! {9 P) B
PKTItemRelease();3 D" R- j4 C4 Q; q
}
& o: D5 p% Q* ? }
: p$ F! l6 l5 t4 D % z$ n+ d+ K. d/ c
}; `$ \+ `* ^& d7 Q# `% H# \
}
5 w9 z6 p. X- ~5 D
# h' [! Y* `5 D0 U" c9 Y' }& K static void PKTItemGameLoop()
7 d! \: e: V9 W" m O, |* w {
: p* d3 L! K6 O9 Y( q8 P0 K; X9 D' e if (_PKTItemTick > 0) u' x! }0 z' O4 G d
_PKTItemTick--;
& T, I1 n) j; o- i( W else if (_PKTItemTick == 0)- T. z" n" T2 }
PKTItemRelease();( J; @3 L- d6 v) [& q$ y$ x) ?; g& n
}
7 \5 x* }8 a% z0 F. \) p
7 f, t7 T f9 N- o; Q; ^* A static BOOL PKTItemCando() 0 R8 ]7 w% n) I
{
; }) r4 ? Y. k5 E& | if (_PKTItemTick == 0)return TRUE;0 i6 D( q1 u7 t) V& L" I6 h/ w
return FALSE;
' k3 A8 M4 {5 X }6 J. y# @% R; X2 ?9 g8 C
- d+ N6 J/ P! v5 m. R9 \# j static BOOL BuyItem(DWORD ItemID, DWORD npcid)
; P9 `* i, d$ J) V1 w! h9 y2 k7 f {
( U% c7 q2 H. W/ X# o3 } PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);( d% w P# G, |' w: D) o/ @, e% f
BYTE aPacket[17] = { 0 };
( ?9 w! V3 ` f* e+ ?. _ aPacket[0] = 0x32;# I- Q5 ]: h& M) r' V2 D8 `# z- |
::memcpy(&aPacket[1], &npcid, 4);0 j) P7 v3 P2 R
::memcpy(&aPacket[5], &ItemID, 4); j5 G, w2 M7 a: H% {+ |! r7 V
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);( }# ^8 I k$ h; a
D2Net::D2SendToServer(17, 0, aPacket);
" \; D& t* Z/ q2 z return TRUE;
1 y0 x- z, v- E# _ }- y5 J8 P0 L1 @4 p, P
3 y: @/ o4 h$ w, ?
static BOOL SellItem(DWORD ItemID, DWORD npcid)9 X1 K7 [4 n! E3 N+ F% |- J5 N' I
{
5 ?% ~9 h! m3 y( c% j& G) ?- w PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
# {- S( s |& Y* |9 k BYTE aPacket[17] = { 0 };
, b8 [/ f# J# Z1 J ^* ]' T3 h aPacket[0] = 0x33;! B0 A: \% Y1 G Q: K! N
::memcpy(&aPacket[1], &npcid, 4);
; v* [. |' W# e$ U ::memcpy(&aPacket[5], &ItemID, 4);: U- s" [4 C$ J ?. e+ j" C' M
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);: l( \$ {" W2 x
D2Net::D2SendToServer(17, 0, aPacket);
; `0 y+ P9 n! ^& J, a( @! R% C return TRUE;% A/ j9 y; c: s+ u5 ^9 H; ^
}
& [) S; i5 h' X, U8 M, W3 g) p* F+ G$ J
static BOOL Interact(DWORD nUnitId, DWORD nUnitType);
/ Z( [/ N' z- A1 z/ B* Z& N, k- b% \5 q' ?5 g! W- |' S
static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);- n; k9 b o _. M: s8 o6 G( o
- z# o% g: l" u2 ]
static BOOL OpenCube(). i* ~4 k* d7 d2 K6 U8 ~
{) g. f# i6 V# k; v/ h6 B$ Y" Q( Z `
if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;
, Q- ]0 B g, e: I* Y! S( I# `0 h) N
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
5 r+ m2 i: h& w6 `6 e. h z if (!pCube)
% m5 W! ?$ _0 Y0 o8 a {8 @8 t" y% W7 b1 v3 `! e: @# i
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);3 l& y$ e& E5 F
if (!pCube)
$ H ]( _ P6 d% n return FALSE;
, }& P3 x4 q A% f5 x& Q" p* s3 w }6 z2 ?" z- a! {2 V l4 K# U0 j
PKTItemTellW8(PacketItemMaxTick);
/ q3 B; s+ l3 {1 o4 T% {
! Q8 O5 N4 K1 O' b D2CoordStrc mypst = { NULL };
5 d, s3 @5 O3 U( y D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
* l) E T0 a" j1 b7 ]. @9 ~
9 O X% e( }: F/ \$ B' b% g BYTE aPacket[13] = { 0x20,0 };
- Y7 m1 C: p& k; N2 G ::memcpy(aPacket + 1, &pCube->nItemNum, 4);
! h( F8 R2 r; F2 e% Q9 @9 o ::memcpy(aPacket + 5, &(mypst.nX), 4);
% V- p. g0 [( W" g/ y; |0 [8 } ::memcpy(aPacket + 9, &(mypst.nY), 4);7 L: l0 W; U' _4 i4 T
D2Net::D2SendToServer(13, 0, aPacket);
/ c1 q3 }$ ? {3 R7 k* p9 _9 Z return TRUE;# q# f+ ]; ~$ v- @: E6 k
}
, d. t: H# z& t% L% r3 |
* Y9 B3 x' p( R5 E$ Z. r; B3 j static BOOL ToInvxy(DWORD x, DWORD y)
. ~0 x, a+ Q7 W7 q) M {; u$ U/ ~. P* v/ u3 Y
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);1 Z/ @ i6 v6 L& t
7 s% t/ k/ {0 A) q Q( _% w* q if (phand == NULL)
1 }5 T: b+ Z5 E return FALSE;: _- T( f4 ~# G+ |4 K
" k9 U" i B/ l4 e+ L PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
4 V- o1 d6 H# Q
; G$ D2 C5 f; H- ]" \ BYTE aPacket[17] = { 0x18,0 };
# R# J+ X8 h! a5 J7 v2 G ::memcpy(aPacket + 1, &phand->nItemNum, 4);
1 x, F1 E* q) E- W ::memcpy(aPacket + 5, &x, 4);
. k' } K5 e1 s; | ::memcpy(aPacket + 9, &y, 4);6 H- H5 d( L2 K% b) J9 A
D2Net::D2SendToServer(17, 0, aPacket);1 n, x9 }5 W* t2 X
return TRUE;
; p3 F: e$ t/ V: \$ _, J) V }+ }4 [- G1 S; | @# `
( v) c9 {9 R. a- ?) O+ [+ {& V G
static BOOL ToInvRandom(BOOL bBagFix = FALSE) ' l2 Q8 a- M: i. T' k/ F
{
1 R2 H, j1 J# ^3 U" N UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);$ F. N% B( v' q2 O& O3 L4 U
if (!phand)
V# B' D6 T0 C( J, X4 D return FALSE;
1 [' v+ h$ F! `9 I int desx = 0;
* H" e" p* e# s. p7 V8 [ l int desy = 0;
% {7 k# _+ k4 Z ~. ^ if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))0 z8 i' w9 t/ b2 Q) M, n
{! P4 F1 @, o" G2 P, S2 r. `
ToInvxy(desx, desy);
; w9 ]8 ^% `1 {0 \% X return TRUE;
e# _+ [: L8 P& U* Q( Q }* `, g/ U/ W9 M. h2 f
return FALSE;9 D; a! A2 c. n% _" _ ~
}% q# K5 {& G1 }1 H7 m- S% s
; P3 p7 M: J @+ z3 _3 }
static BOOL ToCube()
( j5 u+ h) H c' z. z' w {
+ X- ^% X& [: h4 C if (!(*D2Client::ptPlayerClient))return FALSE;
" _' |" r3 D2 S
* f. @5 p$ M4 s9 J. F UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);4 u3 h5 L) i8 q; Q
if (!phand)return FALSE;
8 H1 a4 h0 J7 @6 V
8 f: |2 S- d0 q UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块
7 {' D) n3 T5 @/ o6 \1 a* x if (!pCube)( E6 X2 J% y5 g& w7 s
{
, I7 b/ f1 A, ^& i! k pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块) T+ h P. w9 d; Z; M- W: M
if (!pCube || !pCube->nItemNum)
, f: H- Z+ D. P2 J1 W. e return FALSE;0 J/ z" c1 `' ?( e& _. u; o7 S
}
1 N, t' f3 | _$ N i; B7 t! `- H* I- p
if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))6 f8 K7 L* e7 R( f
return FALSE;8 V' q7 x* i7 J1 p# ?5 E# o
5 }& ~" n( Q1 V8 y$ V PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
( X2 c0 ?% v, h+ _1 U; V; W/ S# z
7 k" v% i- U: X* b. f BYTE aPacket[9] = { 0x2A,0 };8 x( ^* V, R1 g
::memcpy(aPacket + 1, &phand->nItemNum, 4);- }$ h; B$ H9 K9 W2 o
::memcpy(aPacket + 5, &pCube->nItemNum, 4);& |+ ~/ m N0 ?( i
D2Net::D2SendToServer(9, 0, aPacket);
3 F) k4 u" ?6 C {- T" h return TRUE;
# _' Q3 R: g5 l! e7 h H- O$ v
- p. s# D$ u* ~6 Y# i) Y }, h. q) w, d- B
1 W9 n- y1 k8 y
static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);& O7 V7 S/ R. ]2 H; Z
) H' G3 J$ k* \( U* P- m$ I0 R2 v
static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存
: j- e5 U7 R4 }: W8 |" m9 G {4 ~5 `8 H% Q5 p! n1 `9 y0 @- A
D2CoordStrc mypst = { NULL };" ~5 l a8 E- ?2 T6 Q
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);: w+ g* w, c- T& q* e# h4 `
8 n! F& g+ W; a' a+ ~+ @ if (!mypst.nX)return FALSE;
. W3 T- \1 a* a
- f/ l7 o0 p4 e- p# b7 s PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
# C" \, n" G. h1 V# z# _0 s
' ^" E2 T1 Z8 D6 o! Z BYTE aPacket[13] = { 0x20,0 };9 Z# D+ y1 O; G% j) P+ y' V5 [
::memcpy(aPacket + 1, &dwItemID, 4);9 z( v0 K- V9 ~% y( D1 E. ~$ `/ O' R& o
::memcpy(aPacket + 5, &mypst.nX, 4);
' `( U* h2 P' L) I ::memcpy(aPacket + 9, &mypst.nY, 4);5 q" z# c$ g6 ~$ d# X# R0 z5 a% v
//return D2Net::D2NetSendPacketToServer(0, aPacket, 13);
7 P7 m! d7 O, A% S D2Net::D2SendToServer(13, 0, aPacket);
9 a% s/ F* {8 R& q- Z return TRUE;
! z! ~4 ?! v/ O$ G, E$ V. m }+ H3 P& E% r4 J
' ]! x/ @$ q$ f! B1 Y" G6 X( u
static BOOL DropCursorItemToGround()
" Y% Z: a1 O* {/ X! J. Q& g {
9 K7 L3 P6 h2 d2 U4 d- c UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);9 m& L8 ^( R3 |7 w* T w* W
if (!phand)
3 g8 d) K! `2 y' S return FALSE;# }. A+ I) s( \; ?/ u
* [( Y1 k% `! E
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);
/ Y! u, X! r# C) h0 e. e4 I/ Y( o) |6 v' J4 N+ w' U# z7 V
BYTE aPacket[5] = { 0x17 };5 d6 K8 D$ M ^
::memcpy(aPacket + 1, &phand->nItemNum, 4);
5 i" u0 B& Q; b- w; q* H; y D2Net::D2SendToServer(5, 0, aPacket);
/ q0 D* U \: S3 k6 I. F return TRUE;3 e+ T1 Z; P/ L, R0 ]
( W8 G; M" [4 g2 D( w+ r }0 i4 H4 e' k) I: f( m0 E7 f1 `1 E
- d1 w8 K2 d" E$ ]; V2 ~) }0 G
static BOOL PickStorageItemToCursor(DWORD dwItemID)+ g3 T+ t9 e. J
{
1 m3 Q3 ^. K) F+ J/ M PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
, ^3 G$ U, L0 h, @* t( L+ C8 S, B+ E" O- c
BYTE aPacket[5] = { 0 };; N1 n2 h7 A y8 M: f4 x
aPacket[0] = 0x19;
* H9 I& o% ?/ F# L ::memcpy(aPacket + 1, &dwItemID, 4);* a3 U# e2 ?" B* c2 I; [3 E
//return D2Net::D2NetSendPacketToServer(0, aPacket, 5);3 ^# N7 B" J$ z$ F0 E2 _6 { a5 x
D2Net::D2SendToServer(5, 0, aPacket);( [" V# I( T8 T, \$ N; E8 _
return TRUE;1 `1 B: o% W" A& j0 i, T
}
' }2 j8 L8 V3 E0 T, v; v
6 F1 E, [# e; S static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)/ u1 c% |; P1 u
{
X: v7 e9 g7 T' f PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
- \9 n, c$ \& U* B. b& R( i5 k BYTE aPacket[17] = { 0x1f,0 };
% @: h! B4 h. e7 Z( D( f& M ::memcpy(aPacket + 1, &ItemID1, 4);
( B0 n( E$ x- \# s ::memcpy(aPacket + 5, &ItemID2, 4);
1 W; G; A' }* k. A) x( q- H //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
& n1 x2 y, m4 `1 X; Z( _% P/ l D2Net::D2SendToServer(17, 0, aPacket);+ o t; r- m3 o+ ]: h. `8 D
return TRUE;' |4 {% j7 n. f0 @
}9 Z/ C' d) T& M" R3 [
: I+ O% ~0 E5 }9 i8 g6 l static BOOL Transmute()
* L. z2 j/ ?# `& n {6 G6 L" D, i* |0 d; O
if (!(*D2Client::ptPlayerClient))return FALSE;. b0 o5 D' e- n: A2 T/ n
9 A, c5 L! I( [ if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))
6 L$ I# g8 Y7 ?$ Z" ?: ^ return FALSE;- H7 B9 q- W" m- u4 B2 s
! e- O# l, z( n( t) h4 L
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
) _; _. U* G- Z, V* ] BYTE aPacket[7] = { 0 };1 t9 O J9 h8 {2 i
aPacket[0] = 0x4f;5 f! X! _ f* d! C a& h+ o3 }
aPacket[1] = 0x18;2 u; U+ ^3 o. k9 Z0 g: h2 V
D2Net::D2SendToServer(7, 0, aPacket);* D1 r; T" }- R4 Z! [" o
return TRUE;
7 O) L1 {# {) ^& }5 L2 G8 J% F( r- W }
, }5 f7 e( Z \$ l: w( u8 I};$ M: ?* z) a! U! V5 k2 N: l
* a' O; Z- N4 ~ z+ R! {/ ? |
|