|
|
转载
1 p* ~6 r, w/ h) u, G$ u自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:; D+ p/ T2 N5 j( M
D2Client:" l5 ?/ r \/ K+ v2 g, A8 x7 B/ n
6FB20AE1为拦截输入框(用于获得命令)
7 U2 i; T. L) Y8 @) ]! V# F/ r6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发
8 m; @. j, s8 z" o0 y6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发, r7 c% F) T/ o
6FAF4230为hackmap的loop点 我用的hackmap导出位置
! h, B, t7 j) `8 f, c- l
+ B. v' d- _. D1 N. s, b) \6 v4 K
发包函数:
; p8 K* t1 B1 a$ Pclass D2PKT_ITEM9 c; ]. Z; F& M! t+ [1 R+ F' i
{6 I6 O4 m, {9 o/ s d* D1 Q( T
#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上
; d9 {# _# D n% Q) b- c#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多$ j1 D) s! j* C3 I$ d
#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上, u& `" y3 l, Q: K
#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上
) \) C- ~* D( e#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH, d# B) f8 r8 A+ g1 s1 I
#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上/ l' b# s2 @4 E
#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏' d9 m- K9 L) b, s6 b
#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上
/ t+ u- L0 ]' G& ^#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -8 k6 l, b/ t/ j9 _5 M3 J e
#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店' x" W( Y! v: ~& F: K
#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV
0 u- p* y4 L- Y9 F% z6 {" R* `#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道 ' \& a6 @3 o. {. p! ?) k* F
#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带
3 R- U& _* s1 L: T; P#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上
3 S: C# ~ {6 A1 k ~) Q#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -
: I! H6 O& ^3 P% O" @. Y" S9 \#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上: h* j7 Z+ G, s2 ~8 D3 i
#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -
3 T" o2 W) s8 c; m/ J( p7 i6 r& z( h7 g% G3 s
#define PacketItemMaxTick 150
/ j% `& F4 ?- u n+ m! g0 u#define PacketItemPickUpTick 20
* j; r8 s1 ^$ X7 y9 b. t8 c; `1 b4 _$ O
private:
2 e* R/ F6 m6 f: z2 u static DWORD _PKTItemTick;) ]3 v! g" ^6 R
static DWORD _PKTItemAction;
4 E1 J" H( }* ~$ y& H p# f; E static DWORD _PKTItemID;/ `8 D5 q+ l% U
static BYTE _PKTPKTType;% W& Y8 f ^; u: F( y* Y
public:" r! p }' J% }* k
static DWORD PKTItemGetTick() { return _PKTItemTick; }
0 F4 S' m% g$ s4 q4 Y+ m1 v6 d8 ~! ]' w+ u6 k% V9 i' H1 W
static void PKTItemRelease() 5 E% w' h9 L' O2 c' A1 {
{* W( d- n( z5 f U
_PKTItemTick = 0;$ R' Q/ k' `6 ^8 U, M* o4 G) J
_PKTItemAction = 0;
" Z5 j) H3 W% v: H# G0 N5 e _PKTItemID = 0;. Q) }/ _$ L5 q' c; c
_PKTPKTType = 0;
i8 L0 c) w) o4 W7 U. O; q9 ] }
2 g) }$ ~+ i9 p; U
& |, O: u& Z" p static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick)
) ]- l+ B# H3 y6 I- _ {! C ]5 a8 d9 i- y, [
_PKTPKTType = aPacket0;
& @- O0 s" U2 s3 N0 C+ I, d _PKTItemTick = tick;
4 m, K( @$ e# E0 A _PKTItemAction = ItemAction;" _) F* z3 G& b5 R
_PKTItemID = dwItemID;
9 ?+ u# k6 ~2 i7 c1 u) v4 Q# E }" j9 S6 D. S% z1 M1 E! H% `$ s' T
0 f) i: T9 h3 h' x) E3 e$ C static void PKTItemTellW8(DWORD tick)
3 i0 R( R8 W) q# V% [, \) t {; D. u5 r( N! A% B( s
_PKTItemTick = tick;
. Y p( \5 _1 {6 G }
6 a2 |7 C1 p( v/ \
5 k% v/ a! V# X7 ?9 Q static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor
2 s$ p* v4 r Z* g; }! L( f% V1 S {9 a; Y7 ?9 K2 K# Z- l! S
if (aLength >= 8)0 O( p% }' ~" @' Q
{+ m! ^( U) X0 ~
DWORD dwItemId = 0;
* ?+ \+ a3 N# L* } d! d memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
0 }& H, W0 j' m- F7 J4 t: j if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE, V5 L( X3 T, T- Y
&& _PKTItemAction == ITEM_ACTION_TO_STORAGE
" ~' u/ t- N) _) }: D5 y && _PKTPKTType == PACKET_NEWITEM
* |9 ]& U/ B6 j3 _ O4 \ ); L* k( X% E4 i, o8 h6 O9 x
{; G, H3 s, o- c; d. v% r
if (_PKTItemID == 0 && _PKTItemTick)
7 `- I: {( g# t# A9 D {
0 X: ~, L) y. Y PKTItemRelease();* T# J: h( ]8 n4 x0 g" j/ M8 i
}
9 T; _5 f% Y) b" W) u3 Q. M" h else if(_PKTItemID== dwItemId&& _PKTItemTick)
2 L9 U2 Y' {- C# Q# f; j/ g {% R5 U- a7 @; W- ?4 q2 ?$ K
PKTItemRelease();9 S' c" Y* a V c+ P
}
8 b3 ~$ N) F: k$ F( e }1 E7 U% K( l0 i) N0 F2 {( U" z; Q
0 `6 q$ p4 `% E2 U' s# h4 k! E }6 Z! q6 U& u# r& c0 J
}) Z- u0 o7 S# e2 v# q/ v
. Z9 B1 E& f+ p6 e! {3 L% Y static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored
: N7 i% ^# U3 T' _" m* ^4 g {
) @# B% m/ p6 \* ]6 n$ A) P4 V if (aLength >= 8)
& _% c/ {9 v: |( H- p% d- B8 r {: \- L, B4 m7 t4 I$ a. O0 o% O" V
DWORD dwItemId = 0;
' @+ ?) P0 z5 |8 I; U1 g7 U memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
. B5 r* f( X) {$ | if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE; n' k4 g8 ^) z
&& _PKTItemAction == ITEM_ACTION_FROM_STORAGE
8 u9 l; m+ K8 S7 } && _PKTPKTType == PACKET_ITEMACTION
% N; x- _8 x! f: ? )
! }6 J, v0 R9 r {
# o/ Q& {1 i1 W* R0 m p% ? if (dwItemId == 0 && _PKTItemTick)/ m7 |/ w( q7 P; q) [* i
{
# y8 _* p9 _, { PKTItemRelease();+ B! x m3 B' E6 \4 T
}6 q0 T( t9 r' _+ n1 |' E
else if (dwItemId == _PKTItemID && _PKTItemTick)' P0 P* a' c% A
{6 ?; A( y% V& E2 n! Y
PKTItemRelease(); E! J/ I6 }& I; }- g/ o1 s
}
4 B' ?3 W8 Q) C( N7 n. D }7 C# ^- i2 d8 v* A
" z, r" i- J+ N- R/ Q* A" d
} u& E9 X4 N4 }1 r9 x+ I$ [
}1 A1 |1 W; _+ J. m5 @
: e' X: ?) q8 I! P static void PKTItemGameLoop()
2 H2 t- [8 h# `% n1 n4 i$ K5 f { \2 W5 @9 O( ~
if (_PKTItemTick > 0)
1 t* F- |* J9 U2 O7 U _PKTItemTick--;4 J: ?% J9 s1 o$ k% P7 ~
else if (_PKTItemTick == 0)6 r5 K- {6 x B7 u
PKTItemRelease();+ B3 o: t& W2 P+ b3 Z/ ]8 p, `
}6 x* m" J7 G6 K
6 j) J9 N3 L- M+ f0 x* e x
static BOOL PKTItemCando()
# J' N9 x& |: l9 L/ u9 q; v {4 a' w+ b* ~, ~
if (_PKTItemTick == 0)return TRUE;
7 K8 ?$ I6 D2 K& |, V! t return FALSE;& n; R. P+ t: v& y, S7 d9 a+ @
}
- L( l; s0 ]# S {$ d- s s3 Z
/ n, W a: a. u: W, x& D9 t static BOOL BuyItem(DWORD ItemID, DWORD npcid)
9 c2 E! l3 q& m0 l% i7 l {+ M3 O- z# x: @) L: |. u
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);0 ^/ r" m2 V: o0 q1 l9 j/ L
BYTE aPacket[17] = { 0 };
! Q/ C# c- I) }: Y$ A) i aPacket[0] = 0x32;- R9 E+ y G/ t/ A
::memcpy(&aPacket[1], &npcid, 4);* w# e5 E4 t8 R6 T3 i
::memcpy(&aPacket[5], &ItemID, 4);
S0 b& D) E( F //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
1 Z8 R% \5 `* S1 @4 P% ` D2Net::D2SendToServer(17, 0, aPacket);: c# ?8 V. _4 s) a- f
return TRUE;' a" t0 b! M# w4 D+ S
}# J0 z1 ~& o! u
: t% N" E. m2 Q6 A6 U
static BOOL SellItem(DWORD ItemID, DWORD npcid)
; k# c8 [7 ^& ^6 e* P {
* U6 N! | w2 r& _1 r8 t! ^; F! { PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);' ^6 p+ M7 {5 h' \" Q) Y x& v h( O
BYTE aPacket[17] = { 0 };/ o6 |9 }: l$ A5 x
aPacket[0] = 0x33;# W2 x; x: a7 ~4 G
::memcpy(&aPacket[1], &npcid, 4);
# B# {! _2 V1 o ::memcpy(&aPacket[5], &ItemID, 4);
1 m7 |) N& H9 Q, i! T6 ~$ Q# j //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
+ @+ T8 U# w* Q1 E D2Net::D2SendToServer(17, 0, aPacket); p0 y1 d. c! ~* W9 q0 \, C& E
return TRUE;) I, @& G4 M9 m5 F0 X M& {: [
}8 v) L. p9 d/ {( _+ Z+ L" q
+ \. S) U. o2 F' ], x9 ]2 ~ static BOOL Interact(DWORD nUnitId, DWORD nUnitType);
2 a3 r8 e- U4 `1 S4 c* d
: V; z3 F1 W4 N. L$ k% [ static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);
) i I7 d: k# V0 o3 ~4 z
' p' ?1 b3 K# }1 I# H static BOOL OpenCube()
1 y$ S/ o; `: c n9 [) {. o {
% D2 {- G2 a, S8 c3 p5 A4 a if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;
- E1 F8 R+ P- M9 j" ^" V2 \, I$ f2 S `) B5 d9 @+ \ B% k
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);% J5 Y I) W7 n& g5 s0 ^3 Y0 G& P
if (!pCube)
( M2 [: Z7 A" ]* N% T {. m9 z r" s+ z2 ^$ A! ?
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);. t$ @' D* f5 @+ I1 l f
if (!pCube)+ W6 _1 M$ \) z
return FALSE;& F% U- t u) ^# ^1 x! e
}
% s5 S; G! }4 `6 r8 N6 B PKTItemTellW8(PacketItemMaxTick);' K0 D7 `. h8 t+ g4 r [( W4 D
- l( Y' Q4 g5 _ D2CoordStrc mypst = { NULL };1 E) L8 A& r9 w! m
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
: }8 Z; I4 |5 u! J* m. A- P |- ]; x+ o: {; z
BYTE aPacket[13] = { 0x20,0 };8 r8 y+ X8 M+ q( j& N4 Q
::memcpy(aPacket + 1, &pCube->nItemNum, 4);
' Z, {, R, b% u# f ::memcpy(aPacket + 5, &(mypst.nX), 4);
9 H* t+ i6 h0 Q" E; \ ::memcpy(aPacket + 9, &(mypst.nY), 4);$ ~% \$ j8 X! n9 o8 T5 g
D2Net::D2SendToServer(13, 0, aPacket);
4 i$ a/ _/ U0 p- F( K2 V return TRUE;/ w& l2 b" k1 p9 y1 t0 s+ |
}
W3 L/ H2 B# U
7 O J8 D4 z% P. D' J3 X3 C static BOOL ToInvxy(DWORD x, DWORD y)( A% J+ ]3 V0 W
{8 h# N5 r- H c- ]" s' L2 \
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
$ a# t( q7 A5 G. ]+ J3 _9 B$ |
3 M( @9 K: N @ if (phand == NULL)9 G6 ]" e9 z- l. a# z% J
return FALSE;
3 T a- ]; i0 E1 N3 U( E. ^
* p6 y- ?* o" n0 |9 z PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
0 ^8 Q. m" Z: m, H1 M5 g ?- O4 z3 [; _% U& [, E3 c3 |
BYTE aPacket[17] = { 0x18,0 };
1 ]2 R: e' v# i0 K' K ::memcpy(aPacket + 1, &phand->nItemNum, 4);
& ?9 G* V* Q$ J* g$ J ::memcpy(aPacket + 5, &x, 4);
1 X# C; d7 l. a3 s ::memcpy(aPacket + 9, &y, 4);
+ |4 V; [5 y. t# i1 _2 L/ C* Z D2Net::D2SendToServer(17, 0, aPacket);# z7 H* {! v V3 f
return TRUE;
* E( b5 y9 }: N }
7 h! ^* x; b9 C. q0 y/ H: _6 O! u
* k/ p/ A3 i+ r& f8 b0 L static BOOL ToInvRandom(BOOL bBagFix = FALSE)
: C$ P2 `' ?1 {4 D: F* \. C$ l {
8 k2 g! l3 o, B }8 b+ \0 b: E UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);8 \8 d1 e8 l7 G3 R6 g; w$ k
if (!phand)( z! J; T6 k, t7 G O# Y# R2 I, L
return FALSE;; p$ C, f) m( E- k+ k1 F% Q; T& ?' \
int desx = 0; B' ~/ r& j3 l+ }& e8 I( b
int desy = 0;# y( f8 I7 S9 O- K
if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))# U' ^5 d( [4 r% P! L% g# g2 g
{
$ D. }4 y, ]7 d4 \6 O ToInvxy(desx, desy);
' j, z8 |& \6 |; e return TRUE;# J: n( l- n9 C7 E5 J# G
}9 x' S. t8 l6 O' c
return FALSE;
) w6 U. c: U# _( r2 u }) R. g% |, y3 }6 B3 k
0 ]+ _$ o' }! w/ X static BOOL ToCube()
2 T: o( i" }/ a* Z; K {
$ l; ]+ L5 H1 B k1 c1 y1 T if (!(*D2Client::ptPlayerClient))return FALSE;3 U7 y3 y0 W1 @. ^
% J6 }# R% u; }' {# W- E6 D
UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);, k) b2 l+ _1 B$ @/ g& G4 N) N; ~6 V
if (!phand)return FALSE;5 @( Q3 E& I6 X
( g! w& C: |! [: {2 i+ `, C# K# O
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块
. L8 I) R0 r9 ?6 u7 B if (!pCube)
: j% ~! w M& I& ]* U- _7 J {
( s5 a+ N/ }9 s) H* Z& C pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块
9 l$ x- z/ U% Z+ d9 ]: s# F if (!pCube || !pCube->nItemNum)3 I4 r; B$ D6 p6 V7 a0 _- R
return FALSE;( z" {0 E: {4 l; i( P+ n5 h
}2 N+ Y) G; }' ?- Z
+ ?8 j5 {1 V' k2 z& e
if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))
7 M/ H! h/ K- R/ i* R: y return FALSE;
6 O" o: g/ A! d ?4 u6 n' Y# _ z9 F# s S
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
( j4 ~2 s, s" `" }4 Z, V
$ H4 X1 d- z' |' Z# ` BYTE aPacket[9] = { 0x2A,0 };& y2 P+ r- C. @+ S' U1 F
::memcpy(aPacket + 1, &phand->nItemNum, 4);1 W+ B- m H9 @5 ~4 Q
::memcpy(aPacket + 5, &pCube->nItemNum, 4);
# `! h: t- i5 n/ I3 P( w D2Net::D2SendToServer(9, 0, aPacket);$ R" b# c l" ~4 C
return TRUE;
( s/ |# `* T( T
9 [& x; i A6 u5 o1 Z( {9 L }; f4 ] g; ]' v% k0 k% e8 b
5 ^7 Q% t( h" k+ B5 y
static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);
! g B7 X: K: D3 m% h( N P& w7 H
6 U- p4 M% w1 Q" `# H# s static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存, p0 z+ Y$ [# D- l
{
, F) Y4 y8 H) U) y7 f D2CoordStrc mypst = { NULL };4 @( j4 u' _3 r3 B& _; G
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
- `% j( u* J! L6 E1 H3 A+ R1 i% w$ X
if (!mypst.nX)return FALSE;
6 I0 s+ ~8 F* J8 L
5 |: W- D/ i3 b PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
( C7 ?7 l7 n: j! \: q! J" P% _4 z# W) \6 j* `
BYTE aPacket[13] = { 0x20,0 };6 P% y& E3 Y- k/ P6 m( E* D! O
::memcpy(aPacket + 1, &dwItemID, 4);
( i, q( D2 @9 R5 Z& Q1 L ::memcpy(aPacket + 5, &mypst.nX, 4);8 h7 d: P& W- P+ V. [* F
::memcpy(aPacket + 9, &mypst.nY, 4);
6 E2 \& g9 `' V; K8 C( o1 V3 W //return D2Net::D2NetSendPacketToServer(0, aPacket, 13);
' u! F4 X* [; u: R/ b, e& Z5 E+ _ D2Net::D2SendToServer(13, 0, aPacket);
+ `7 B) u- L9 {2 t3 x8 T' o% H- S return TRUE;3 ?1 S& w% j% C. x" C' C) K1 o
}
6 b' x& B: F7 W$ c. z Z: _ Z; j7 t% b: l$ F# F5 g0 G
static BOOL DropCursorItemToGround()
7 j% }* R+ x/ ^& a5 D- m {
1 s- h' m) y- E UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
6 w! Y" g& o7 j. I7 G2 Q if (!phand); g; Y7 {5 x( D3 o
return FALSE;/ I- e c7 |' F. ]& y- g2 S# R3 ~
# w4 g) E2 `. J
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);
" M7 M% P: W6 Z. q6 s
* c9 b& C% G+ J0 f9 L6 E0 H BYTE aPacket[5] = { 0x17 };
3 ?) M9 \) s0 o9 B9 l ::memcpy(aPacket + 1, &phand->nItemNum, 4);2 ]) v' B; [0 [5 `1 K1 M( J
D2Net::D2SendToServer(5, 0, aPacket);3 @1 f7 d1 _2 p0 _/ x% i# [9 J
return TRUE;
" s) K+ P6 \0 j2 R T1 c; i
# W' j4 c0 s9 v- Q, o' Y# z, k }- R" z) R Y/ O9 W' z6 {
! i& w P: q! h# e) Y static BOOL PickStorageItemToCursor(DWORD dwItemID)% q" f+ v$ l+ P% @
{
, b' ~$ l0 @8 ?9 Y4 K* @- @) w PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);% `' w* o5 K1 p/ c
Y( `. x8 J: `
BYTE aPacket[5] = { 0 };7 e! j: J B& X- C) A/ L% G8 g
aPacket[0] = 0x19;
( y+ T' M: B+ Z$ |2 y ::memcpy(aPacket + 1, &dwItemID, 4);0 I z4 `; z4 P; u) P& `
//return D2Net::D2NetSendPacketToServer(0, aPacket, 5);
- Y8 N4 t8 U! U4 u1 g D2Net::D2SendToServer(5, 0, aPacket);
3 u0 f _) i" ~% V% [" c: b return TRUE;: I6 R& E" `- ]3 r
}9 C6 a) H- T" O( ?9 E; I% K
- k! r% l9 R# m/ O5 Y6 D0 ]/ L
static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)
3 D; P& F7 }. {7 M# a {
3 X& `5 l( j% s( x7 p% F- [# y+ c) r% N PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
8 g: o% t9 X/ J y% z% T BYTE aPacket[17] = { 0x1f,0 };% D4 p) P3 A8 v1 J6 |5 {
::memcpy(aPacket + 1, &ItemID1, 4);
m5 ?! b! Z5 o ::memcpy(aPacket + 5, &ItemID2, 4);
3 U8 p% J- D e. d, O //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);. O) ?7 ]5 r! D7 T' N
D2Net::D2SendToServer(17, 0, aPacket);
1 N" Q# d9 P4 z( h0 `: |8 E return TRUE;
# k: ]; t4 q$ k4 d. O/ C' |0 G8 D; G }
2 ?$ }9 t) V; \% e. `1 y1 J0 i' j5 x
static BOOL Transmute()$ H! v8 w' {# Z3 o0 V) Q Q& ^
{% U; M4 E5 X; H) Q- S3 f
if (!(*D2Client::ptPlayerClient))return FALSE;
. }5 A; q' `$ F' ?6 t
8 u$ m$ ?! q+ I/ e# [# S; M+ ]! Z5 [ if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))4 _5 }$ J- p* k Q J
return FALSE;( K6 f% j2 l. \3 n9 w- l* f
. ]1 ]/ W/ O3 n6 A* r8 C+ E$ \. h7 p PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
5 n9 a2 k5 t3 z$ b" l9 f BYTE aPacket[7] = { 0 };: J& n2 W9 p* Q
aPacket[0] = 0x4f;
6 y! Q X' `( V3 `5 K8 z aPacket[1] = 0x18;% w; W" z# L# E; W9 b0 K" y
D2Net::D2SendToServer(7, 0, aPacket);" v/ C: Z! F+ u: i
return TRUE;% E1 f {. T) Z% H" e6 }* W) l% ?1 D) j
}
3 ~* K$ F7 Z$ o+ s};
8 \4 V! d; Q0 l S0 A
; ~: X: |3 p: ~% e- C |
|