|
转载& O& C! `! ?, k0 u3 W4 J& g3 l
自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:0 X/ ?% V1 p, T
D2Client:
1 D7 ]! r/ Z% Z5 {$ f8 V" n6FB20AE1为拦截输入框(用于获得命令)
3 z) O' j" k3 k7 a/ e6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发7 [" }: x" Z# h6 P. E: `3 _
6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发
, E* W! ]3 s% o6FAF4230为hackmap的loop点 我用的hackmap导出位置
2 _2 }* x# ?' `; d& u- O1 P0 g7 ]4 z0 k8 v
1 r$ E) Z* P- w) M! C' K. @# U发包函数:4 F9 k5 o9 o' [4 G
class D2PKT_ITEM9 W- j$ p4 _' X" p1 p7 ^5 A7 s
{
o2 y( L( G, l! p( V/ E#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上
d* \( }, ]$ C- P: Q% G#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多$ D" E# h# U- \ a9 R% v
#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上0 |1 K0 H* l/ {% k
#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上. E& J5 e) ]& Z8 Z: z2 ^& \: A2 i' r! x
#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH
. h }6 E! h+ e* Y#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上
5 I! x, u8 {4 `3 c( v#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏
3 I5 f7 F9 u, C9 S I#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上$ v# a% f6 b" e! T, X3 X
#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -
9 j L, B2 s) X6 f#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店* C5 q; K: f% W5 I8 R1 E' t' R
#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV
8 J( ?+ t$ `* ?& Q#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道 / Y! I* j3 D" x6 d
#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带
/ e5 ]6 ~# M( m- r' r3 r#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上
: k1 L5 g" v$ L; l, e9 t#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -6 w' V+ }3 F# U! c- T4 d9 A
#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上
" W5 @' w7 o6 e/ \9 s5 E#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -7 _" J, P. _" E# g/ p
! W4 Y0 w" k3 Y+ V, e/ k/ ]#define PacketItemMaxTick 1502 a8 L9 w* S8 k0 O
#define PacketItemPickUpTick 20
* a5 k: n4 Z! l. P \: }8 ]( m1 }) z- J; Q
private:8 e, W2 }3 O4 o8 s% I( }
static DWORD _PKTItemTick;' ]6 _, b9 s0 C* S1 c5 `1 \& h
static DWORD _PKTItemAction;
' Q. _- i/ O4 }5 @! v! Z" o static DWORD _PKTItemID;
0 N2 x* ]* M% b- }- \+ V, a static BYTE _PKTPKTType;, r h* p5 d- K) m% m% M
public:5 G# W& N) \+ k' Y4 h+ O
static DWORD PKTItemGetTick() { return _PKTItemTick; }
% ^5 F1 o6 ]' V7 S7 j+ o2 Z& {
. ^- U: \3 ^8 w( \" M+ g static void PKTItemRelease() ) i+ _3 p/ r$ Q: w' Z
{
9 h% h" e2 _; E l9 g6 U0 W& s _PKTItemTick = 0;$ ~4 p$ m1 j% L3 O! j5 I5 h* y* U1 W
_PKTItemAction = 0; W f( }9 Z% c
_PKTItemID = 0;" h0 u4 j+ K) w$ E7 t# k+ I$ K
_PKTPKTType = 0;
9 ~8 i# C. J8 d# q8 g }. T3 R7 H0 @) ?6 h
9 o3 p; l# W0 d( N( x+ j
static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick) , d" S% y/ w. [- r
{
- g1 Y+ s/ v# c _PKTPKTType = aPacket0;! Q& ^ n7 @) {
_PKTItemTick = tick;
& Z8 c5 v# b! u' V( u6 ^. ]3 g _PKTItemAction = ItemAction;
) B3 u; `. v' v Q% ^2 N _PKTItemID = dwItemID;# m) \& g# r/ H3 x) M
}$ K( ?6 }/ P9 X$ b
/ C9 @; Y: N ?# N5 o* n2 h
static void PKTItemTellW8(DWORD tick)7 \6 v' n, m* B* n
{" e' O. O; F o3 l
_PKTItemTick = tick;2 A" S4 k, h2 `$ R& U G/ h
}
+ T& E6 @1 {$ R, y; N. t9 \ a8 I& K" g0 n# v4 N
static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor
2 @! X3 P5 R4 s- w$ J# A {
+ |) M/ V H8 \6 \" P. ^ if (aLength >= 8)* F" p3 v1 F, k. P+ l
{
& J7 t3 h4 W' ?* V3 b DWORD dwItemId = 0;. d8 [( Y. T( {$ K
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
3 w; T7 M$ G- G if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE
' P; g! F' z& s$ | && _PKTItemAction == ITEM_ACTION_TO_STORAGE8 q8 X* P% S2 i0 h1 P ^( a* m- p$ v
&& _PKTPKTType == PACKET_NEWITEM. c$ w( T& y8 \! z5 \, ^
)& i; G% y, x- e% l
{
9 P3 W! T5 M+ i6 h N4 w if (_PKTItemID == 0 && _PKTItemTick)+ J' |# _. b# L) D
{5 p, C: \) y0 G9 _6 J8 C% y
PKTItemRelease();, y" y' s2 U% m2 r! x7 q* C
}- H/ D% b3 c' ~, z$ w
else if(_PKTItemID== dwItemId&& _PKTItemTick)
2 B5 M4 S @* j3 `6 i3 Z5 T5 V {
4 a( S' C" o1 H PKTItemRelease();
1 a3 Z/ _8 p0 |- @1 K& U6 ^ }0 G/ }; a; i' X \* j
}
) t8 ?; a% l" Z
$ |( ?% B/ @, E5 U } ~$ u; ]6 R8 h' n
}
' p8 v2 z& c6 A I0 K
p. Z, h3 Q0 W2 b: k3 m2 } static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored) ^4 w% i9 a" U s
{& e1 i2 \: V l3 h. i! \* z/ F* b9 p
if (aLength >= 8)8 h0 V3 A: D9 M, b6 I4 ?3 ?
{
, ?* D$ ~1 X2 s" e: R8 y DWORD dwItemId = 0;
# j3 r3 m* V5 z { memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));/ t* e% m, y* }) n* A
if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE
) v! s! ?1 ~8 Z$ L8 n && _PKTItemAction == ITEM_ACTION_FROM_STORAGE9 L8 H. Q h/ g3 }6 [; S9 i
&& _PKTPKTType == PACKET_ITEMACTION
0 i3 M r1 y& s )
o9 b: h& \. ^1 K. {3 E {
) B% r& T( r! x8 V# g if (dwItemId == 0 && _PKTItemTick)8 X$ G. T6 p; ~) }
{% c& ?/ S/ _6 s" W' N8 ? Y
PKTItemRelease();
/ w `: \/ _+ x' ? }
, J5 L5 @) n0 X8 Q! ~ else if (dwItemId == _PKTItemID && _PKTItemTick)1 b* ]) I7 o- Y! w- |( \) r
{- g4 l7 d" n; Z8 C) D T
PKTItemRelease();
V/ ~1 H$ o9 B" ] }
$ f+ p( Y% @4 w8 L1 _5 v }# V9 D5 ?( ]: }
' E. j6 Q p. \( a" s* C2 K. G }
2 r v; X, w. H# D5 E1 R }: z' [' p6 E+ u3 l) B9 y- Y
% \; Q# j! ^$ t static void PKTItemGameLoop()
3 X' U" N3 k& Y6 r/ q" y {
9 ~' Z& N( u2 D, v n if (_PKTItemTick > 0)
7 v5 C1 N0 [0 A8 q4 L) m0 o _PKTItemTick--;" y( L- I6 _! f9 N( y# _
else if (_PKTItemTick == 0)1 X9 ]* G5 ]; g; m! G" Z- K X
PKTItemRelease();) L/ M2 `2 Y( {
}
/ p/ T1 D1 y3 W# |: _# Y& ?2 e1 f4 T6 [ x6 p' e- M# g
static BOOL PKTItemCando() 2 E. G g$ _# }! k }6 C: q3 z
{
4 b6 F9 g( d7 i1 z! _ if (_PKTItemTick == 0)return TRUE;$ P- q6 n9 v: F7 l! t# m
return FALSE;
8 T6 k2 `1 [# _; R. I& e: P- G4 k }, G4 E1 {) U7 ]# b! w+ V9 l
$ S3 k# E' }$ e3 e9 {( p static BOOL BuyItem(DWORD ItemID, DWORD npcid): k) Y; y8 v! o( x1 B2 E
{
; a7 N3 x0 q" V k/ f PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
# d3 }5 ~; r4 }0 B3 V. w3 E* Y BYTE aPacket[17] = { 0 };: r3 F4 y' G* G2 |, Y# D! ~: M
aPacket[0] = 0x32;
9 M4 s. Y$ e# v4 k- d) G ::memcpy(&aPacket[1], &npcid, 4);
; g( k1 R+ N1 {" P5 A ::memcpy(&aPacket[5], &ItemID, 4);( S) _) h5 T; Q. ]$ L
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
8 j0 n! v1 G! p$ l" V1 o& ] D2Net::D2SendToServer(17, 0, aPacket);" }- O h* _! w* c
return TRUE;# x4 Z+ E) s. p: P
}- x5 }+ h( y* F( e
3 A& Q3 y# e# Q) s# P- t1 s. M static BOOL SellItem(DWORD ItemID, DWORD npcid)" y" z* A) c2 V( A5 d- u, R- P) m
{2 X' G' s3 S& ^6 v( D
PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);3 Z: \ E+ @7 ]/ [# D
BYTE aPacket[17] = { 0 };
4 T2 }. ~. v8 i aPacket[0] = 0x33;" J3 z( R" @0 P+ b
::memcpy(&aPacket[1], &npcid, 4);
4 h# S7 Z+ N0 T% @& w; K ::memcpy(&aPacket[5], &ItemID, 4);
) d8 K9 q/ \9 h( M$ {, B //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);; V$ Y) ~, w, d6 @
D2Net::D2SendToServer(17, 0, aPacket);) b) |9 P# [9 U+ U# O3 c
return TRUE;' H9 ~ L( t& Z9 ^$ W2 C
}
$ G, K$ Y% r" \$ k: p6 n8 v& u3 w; W F
static BOOL Interact(DWORD nUnitId, DWORD nUnitType);
0 |7 Z: | O% P0 k* w
0 s1 Z0 j5 G6 I2 u" n static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);; G( N2 {9 f7 [( V6 `; M
* e3 b# m3 r- _- g" z: z( P static BOOL OpenCube()7 i0 N c Z: u3 b
{
# R- k4 U8 M3 T( Z7 N" \ if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;
0 {$ e. v" k) B3 A: P# @8 Y& M/ A3 i( E* `7 x( D
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
5 P6 `8 l6 H4 ]/ N5 M9 v o) b( y: S if (!pCube). d4 g ~3 J( U# e0 @$ e" K
{+ }; T& P! A5 j; \
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);5 v* m2 c3 ~. ]0 H! S; x
if (!pCube)
* @4 F" t, f0 G' k& p# u$ W- m return FALSE;7 {- H# D) u0 E. c+ p
}
# F: W2 J9 B0 s7 `% J5 f" M# K PKTItemTellW8(PacketItemMaxTick);3 K) R' e) N9 p# T
, U: j8 U3 O4 {2 A- O D2CoordStrc mypst = { NULL };
6 ^9 }5 t( u$ v$ g/ e7 ~- ` g- Z D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
0 `$ C8 E8 O' P* C: N% ~1 ?* U7 W
8 x1 B1 @4 b' [2 a2 Z2 b BYTE aPacket[13] = { 0x20,0 };, n* \+ B$ o* W% ^* q$ R
::memcpy(aPacket + 1, &pCube->nItemNum, 4);$ ]: s3 m: J( K+ I" ?0 P
::memcpy(aPacket + 5, &(mypst.nX), 4);" i" r8 g2 T3 W. `3 G# t
::memcpy(aPacket + 9, &(mypst.nY), 4);
+ i* k; i _- h. }0 O D2Net::D2SendToServer(13, 0, aPacket);
) r% Y; l) u+ I/ t& ?' x return TRUE;
* ^- S7 p3 h$ x+ Q6 m( T& g( @% ^# N }* A& D0 |/ t* k: J& B' w% F# Z
9 |" @2 [3 b6 u- P static BOOL ToInvxy(DWORD x, DWORD y)4 M$ `/ D$ j' M! C U
{
+ g4 Q6 N. b6 E: L UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
, i' k# p: U% x% ^* G f6 G, r2 ~1 T
if (phand == NULL)/ Y; E$ ]' \. [6 z& K8 Y" i3 h
return FALSE;* l5 f3 @/ n2 E0 C+ D* K
- c+ N# D; q% R: s( U }
PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
3 p( y3 \- n* I4 w' Q$ _5 q9 k* G+ x* }6 J% q! Y
BYTE aPacket[17] = { 0x18,0 };
* n/ K' p/ n- j0 I3 }* N9 U ::memcpy(aPacket + 1, &phand->nItemNum, 4);4 g5 b* Q" \3 u
::memcpy(aPacket + 5, &x, 4);
* j& v- c3 W% U, B ::memcpy(aPacket + 9, &y, 4);
* Q) L* n" u. C' J D2Net::D2SendToServer(17, 0, aPacket);
7 f; E, t) F. K: v return TRUE;9 l4 W4 k7 z6 h
}
& Y. I' C5 p1 [- @$ ]4 Q7 c
& F! |" o4 q6 m& v! \, d* P0 c static BOOL ToInvRandom(BOOL bBagFix = FALSE)
$ J! w( l. }9 ]9 j+ P; H { t% X5 ?* v- C+ T- q& G5 \: M
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);* y4 E' u4 j9 q* [3 |' }
if (!phand)
) N) U! h5 n$ Z R8 Z* i return FALSE;1 M$ ~( b& o& D% U" o
int desx = 0;7 G$ f: a" A! `. h3 J8 v
int desy = 0;/ f9 L, @6 R: {5 N
if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))
* B) E9 k8 J3 T3 y. u# ~9 y4 |2 R" t {' P) R1 N6 ~' C8 q* B
ToInvxy(desx, desy);' W9 B4 C& t) l
return TRUE;2 H9 q0 K1 \* O) Q4 i5 ^
}
- L% n% O& M1 l1 B( L$ q' U2 \8 g return FALSE;1 ?2 B& I( C4 y* ?5 j; D4 y
}9 S* E$ T. b4 `1 L5 k+ b
- p7 W, l6 ?# K# j( r% n static BOOL ToCube()
% M0 h2 [; s }1 d6 y% [- l# p {+ P% J: l2 Z, N" \! P; N7 @
if (!(*D2Client::ptPlayerClient))return FALSE;; r" h0 J" b7 c( H9 N
$ |# h) G8 L* P( c UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);. s- q& n' t& T1 M4 R2 m
if (!phand)return FALSE;
" H+ p( t, R1 M
6 i. z. p5 u/ r! f5 Y0 f3 T UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块: |- c) E- l: x$ B# ~' D
if (!pCube)
% J9 T! K, ~4 X {' m/ ]9 y4 h( A4 ]9 p% o" D% d" X! N
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块
9 y- t1 o1 ?- f4 W6 o if (!pCube || !pCube->nItemNum)
; a' G) B/ M# z& g: D: S return FALSE;" `( n# f5 D0 h2 a4 Z( N
}; N) a# [' C' f0 A( S
, Y, s0 A& L% Z9 [ if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))
4 h; V1 y0 D6 i J return FALSE;, j9 A" R1 P" x- H
" `& z, {/ W V; m$ j4 T PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
. K5 p) [8 G" V6 w' r# N% e* Z9 v+ Q. Z1 \ h& ]: M' \
BYTE aPacket[9] = { 0x2A,0 };' I3 f+ G5 U8 c7 E
::memcpy(aPacket + 1, &phand->nItemNum, 4);
0 R8 h" o( E+ S1 @* x( j ::memcpy(aPacket + 5, &pCube->nItemNum, 4);
: b4 b1 a& r: ^1 V% T ~ D2Net::D2SendToServer(9, 0, aPacket);
# M' q3 C: F; v3 W return TRUE;
4 o% u6 `/ P9 v: U1 ?4 A! W0 f6 S) Z; |/ D6 n2 p+ }
}; L7 e, s8 ~$ V2 {' x
8 w% w# Y, E( ?8 Q4 D static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);5 k1 N% I, S! o; }# x) i8 {9 W
9 `3 i+ i* e6 v/ B9 F! J static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存 g) b6 [3 |( Z+ D _
{
7 A" w4 J2 C, ^- F E D2CoordStrc mypst = { NULL };6 |1 P: `" [& s! F# X
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
X- Z" T+ w, Q9 W9 e, ]) ~" k
' M! x: ?, v( O; Y) N; e4 W8 q if (!mypst.nX)return FALSE;
2 _ Y/ v' y; h& Q0 ]
. E# I, w" O' w8 r, {6 [ PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
( w; B, z2 t: l5 I; }. a! { n
. C; p5 T! u( r6 B BYTE aPacket[13] = { 0x20,0 };
5 D. Y8 U4 v$ {4 e; ]6 _( T ::memcpy(aPacket + 1, &dwItemID, 4);( J; f* {3 o: v( b; {
::memcpy(aPacket + 5, &mypst.nX, 4);
4 K/ g/ u% c0 B9 V+ `7 V ::memcpy(aPacket + 9, &mypst.nY, 4);$ T( Y" p; S: ^9 F5 T$ c
//return D2Net::D2NetSendPacketToServer(0, aPacket, 13);& F! ?" y* P- X% S- P3 e! A( B
D2Net::D2SendToServer(13, 0, aPacket);
/ m+ C6 P4 a+ P. ]& Z return TRUE;
5 U+ n$ b) S$ K* p4 m, H }$ B# H' t" h% u' s6 W3 C1 R$ p
/ k. n1 J- e6 X
static BOOL DropCursorItemToGround()# O$ W: }; H; l+ u+ a" u# [: k
{; S4 X: w% w r% s, j
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);" ]4 s# {3 F2 H/ i; T
if (!phand)
' H& `% @9 X0 H0 D# _! Y return FALSE;
9 \6 z: o! X) J" h
0 X* j' B6 N# x% i) T9 U2 ? PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);
# a+ I3 l2 v2 T+ M
, S8 H* q# x5 G BYTE aPacket[5] = { 0x17 };
2 i" H- y$ ^" m% {7 _' }- i2 P2 Y ::memcpy(aPacket + 1, &phand->nItemNum, 4);
v. Z* h* @. Y: `8 ^9 F/ b* N" b; ?% | D2Net::D2SendToServer(5, 0, aPacket);9 U; c0 Q. |) {+ d5 Y3 E8 G
return TRUE;* R1 q& I$ y1 E. Y2 ]" b: J+ {
" B) g3 w0 W0 B( n$ x* F
}
5 q+ x3 |2 |$ E) z! f( S: q M) \) j/ {% \% Z7 K2 S! t
static BOOL PickStorageItemToCursor(DWORD dwItemID)
" f" Z/ H, Z6 C {$ L4 |: M0 q! U
PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);+ z! e2 ^5 j4 T& I0 [8 ~& O6 B/ Q, H/ V
" A* X+ ] ^, p
BYTE aPacket[5] = { 0 };! u; c$ E( A, \: H! x/ i$ `: |
aPacket[0] = 0x19;
2 Y# L' k! U0 P9 c+ X! V3 N ::memcpy(aPacket + 1, &dwItemID, 4);
* I/ R8 Z* \; g2 r3 o' f //return D2Net::D2NetSendPacketToServer(0, aPacket, 5);+ ?/ R9 y" M; Y: e* o1 V
D2Net::D2SendToServer(5, 0, aPacket);
: L1 E, {! {! [ return TRUE;
6 ?0 `7 G( G! ]- o }
' R8 |: N3 D0 L, {# U6 J$ {* Q4 {
8 k6 a" K2 r) F6 l/ T static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)$ \" y8 \6 Q F6 F% N% _
{
& `$ f: c, T4 ^7 b, i+ K' c4 j& ^3 J5 | PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);, e& ~, ^. M* c! N1 |
BYTE aPacket[17] = { 0x1f,0 };
3 ]; a$ ~7 I1 n ::memcpy(aPacket + 1, &ItemID1, 4);) B% [2 L9 c; q& D
::memcpy(aPacket + 5, &ItemID2, 4);! n# O: c. \3 V5 ]
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);9 h& F5 `* a( s( q4 L
D2Net::D2SendToServer(17, 0, aPacket);3 B: D6 {% a6 d+ Z$ E- W
return TRUE;
9 g1 v- t% r% a7 K }/ C Z! t Z0 D
% k( B' h# Q8 f/ A9 f
static BOOL Transmute()
- ?! U/ F0 ?) X. Y* Y7 ] {
! b" g3 r' M1 h1 F0 C# X if (!(*D2Client::ptPlayerClient))return FALSE;* d0 w! @$ @) n# |) z
( Q4 q T) q y2 ~
if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))
' J8 Q( @" R$ y# r( P9 O0 W return FALSE;
2 P/ s# F6 E8 k. b
1 u2 I) H/ z" E: g* f PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
1 Q: _4 f7 T/ | BYTE aPacket[7] = { 0 };
9 y3 |% s9 ~) Z1 W/ N2 ? aPacket[0] = 0x4f;
5 Y) d9 u% P( U0 u; `7 G aPacket[1] = 0x18;+ K9 g7 _7 a W
D2Net::D2SendToServer(7, 0, aPacket);
8 H: A- i, f% \, s0 a return TRUE;8 H, L A) l( K+ q# x
}
2 _/ x J7 c) d4 E& w" a/ u" |( \};3 o8 x0 _ y, L4 y8 {1 ]2 j* \
4 q) ?& l( N& t& `7 g' _
|
|