|
|
转载( d- o( o1 w$ n# F) {7 K
自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:' k- Q# j" L& t: a- z1 f1 ]
D2Client:
" K2 r, n1 R' j* ~$ R* q9 X6FB20AE1为拦截输入框(用于获得命令)5 @; J- c! l0 B |, i$ j
6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发
- s2 m n! M/ O4 P/ G2 N' ^6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发
# \' k" G& \7 M) @- {$ A+ r6FAF4230为hackmap的loop点 我用的hackmap导出位置
! r2 l$ B# B( o" w7 N, w. x" _* Z6 ~* r; S
; ]) n; N5 u/ {3 ~8 w
发包函数:3 ?: n" c$ ^; J& S7 O
class D2PKT_ITEM
# |. c/ f. A9 P) g' D# f7 ~{0 ^$ B7 @, K3 B* A/ \( O
#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上
, L7 M5 ~+ L/ k: Y. y. j, [#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多
% H6 P, Y' T* {: g( x#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上
6 H+ o2 B# Y% L% t M#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上
% f9 o2 a( w# d% v- |#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH9 X$ N9 o: M: u6 p: r+ C) s# _0 q o
#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上' |5 u) }) i w+ q0 h
#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏$ q6 d* F6 A0 c/ x# t5 Q
#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上 z% W$ ]# l: u1 g9 t9 C; `2 X d
#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -" B/ @ R7 ]5 W% I- r+ n8 n
#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店' e) \) A/ J! D$ x& y
#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV
9 G3 c0 [: W4 P#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道 # Y4 t$ ^7 }4 H6 M
#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带$ @, ]% O! H) ]/ _3 v; R; d
#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上& c; O! N; S' y
#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -6 d: n) h9 L: I# n$ b |: G4 C
#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上
0 I2 E$ v8 K% s% J#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -: _( ^' W% s8 S( Y1 J
( N0 p1 x S! S& e
#define PacketItemMaxTick 1501 k* y& _; g4 s$ z7 W3 E! T, \. t2 m
#define PacketItemPickUpTick 20# _& l1 P5 l: n; m7 L& \
7 z, e( p# r8 s: E/ D
private:
! y9 U, M& \2 D# g- i static DWORD _PKTItemTick;3 b8 K% T+ n" L5 @8 r. Y
static DWORD _PKTItemAction;5 }7 R: g; Q1 E: P6 M4 A: B- _
static DWORD _PKTItemID;/ s0 S" [2 x" Y5 ]& J) U
static BYTE _PKTPKTType;
5 e- n+ `8 I/ y- }! a X' V+ n( @public:' ?* Z4 y( |! K0 _# _
static DWORD PKTItemGetTick() { return _PKTItemTick; }
+ s4 `9 A2 B- R. @+ Q/ B$ y5 }& D6 l7 X% a$ ^/ \
static void PKTItemRelease() " f) W, u) D, `6 I7 _$ \
{
n5 J0 d4 S& @+ k _PKTItemTick = 0;
! B, a& d# {6 ]7 r: t# h6 ^ _PKTItemAction = 0;; }1 d5 Y0 L9 |! Z
_PKTItemID = 0;
) ?% k2 U+ ~9 J* Y _PKTPKTType = 0;! {$ c9 V4 H+ I
}/ @, S$ E+ E/ n' W B8 I9 W# l
* q7 Q8 X% ~3 F" s static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick) % @0 ]7 A( C& y+ J0 X y
{, e: ?3 q3 a; f( Q# |
_PKTPKTType = aPacket0;
) n5 E F; P. F- N1 S c! E _PKTItemTick = tick;
* N1 w- m% u: J _PKTItemAction = ItemAction;6 F# z$ a" v# c! b' s4 k$ U
_PKTItemID = dwItemID;. | y0 Y& t4 J3 S) W4 O- e
}
& R- m, s# m5 r# a$ i
" p& I* |2 k1 M% F static void PKTItemTellW8(DWORD tick)
% `1 q* H9 J" _ {4 ~# a# n; \9 q# \! j7 q
_PKTItemTick = tick;
( `" g4 A2 K, G3 A1 F- C# i3 T }
3 X1 a( e. L' U( W4 _ k. F- D. k9 H( b1 @; ~; o% T X
static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor; g5 x0 G& @+ m, K
{
- J* {9 o8 Z# s2 K6 U* g s8 l+ ^ if (aLength >= 8)
3 u7 ^( B9 a0 T: P! g [ {
$ m g6 [1 K/ K. v- Q! N' o DWORD dwItemId = 0;' {. Q$ R! E5 g
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));+ c- \; B8 X1 ?2 T% d, t% O% E
if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE; |7 f5 X4 s$ T3 ]4 j% W3 b- b
&& _PKTItemAction == ITEM_ACTION_TO_STORAGE
' M2 w5 X' C7 Q7 F3 o d && _PKTPKTType == PACKET_NEWITEM
. Y5 @" i6 x% u* k3 [ ) a& T, ]3 U H' |. O2 R' d
{
0 m& Z2 _* Y2 Q* z6 k if (_PKTItemID == 0 && _PKTItemTick)
; |3 d. I# c3 i' U* P3 \1 \) w {) H" a6 J. n" |
PKTItemRelease();
! g$ ?: W: G. ?+ @ }
) E @( X4 @% b0 `1 c( C else if(_PKTItemID== dwItemId&& _PKTItemTick)
) o! J4 i+ o+ D {( |! B5 y1 _: [% ]- n; {! _
PKTItemRelease();
9 }6 j$ y1 o$ A$ b& b# V }
: p8 F, U; t; J6 x# h2 H }: ]+ `7 f' X) d7 ~
8 P% G# f! Y% Y }: o8 u, `2 B) v" r$ P# p
}
( _- v3 Z* G' X/ G ]9 P
?# c% @3 ^. l' W* C( m static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored
~0 F) n& C& X {: D* L7 w8 v% x O6 k
if (aLength >= 8)( t/ X( b9 L( x$ t2 u* \. r
{+ n$ {8 ]! |1 E2 y
DWORD dwItemId = 0;- ?" a5 ]) G2 `4 R* S+ u( h
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));, [& h. x# V, T, _0 }' O: ?
if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE
0 H! C, a% T8 q && _PKTItemAction == ITEM_ACTION_FROM_STORAGE8 l5 H" {. a; Q' V0 i# b
&& _PKTPKTType == PACKET_ITEMACTION
' E& i# j. `+ m& N# O* u% K2 \4 X ), K4 [. Q% ?- y7 w2 ~
{
3 r! E* d9 L( x5 j' ~. ?0 M if (dwItemId == 0 && _PKTItemTick)! E" m8 J2 w2 {. e
{
& t/ l8 \ M# J- W4 p2 u; T& F( t% b0 x PKTItemRelease();2 R3 F0 l4 ^8 c* A6 A
}
9 n$ c# U+ {- w# t8 E p else if (dwItemId == _PKTItemID && _PKTItemTick)8 V, ]' W# Z4 j6 [
{- _/ u5 K! ?1 Z+ B/ j1 ^+ z$ D9 _
PKTItemRelease();$ A" m4 }, ?) y+ }
}
, j- i, L# O- c) U: ? }' S8 D& |8 E! H/ k) X: N
8 ?8 L9 C9 o$ P# B% [1 J. H* k7 P
}
; @4 ]( n) K0 h) a) V( [ ^1 v1 t: t } S; \0 _2 A5 B+ A4 `
" ` w( L# E6 X J- E static void PKTItemGameLoop()
# z, R z6 Z+ V2 n$ ?3 N5 f2 Q4 m1 |% j {: J$ |/ a: t5 z G! `8 m5 c/ P1 b
if (_PKTItemTick > 0), D, Q6 S" f. [: V( b% J" u
_PKTItemTick--;: j/ z$ h8 h! p9 m, T" k2 k
else if (_PKTItemTick == 0)
[' ~7 M$ Y; x" n9 t PKTItemRelease();
" u$ M: D" t$ B3 |- Y8 x) D }
4 C# B: m7 l( j: p: p; G4 k3 O8 ~0 a b! ^
static BOOL PKTItemCando() ) k* Z. ]' ^+ o) q! l! O
{) ^' F/ T& X: l- [$ S' n
if (_PKTItemTick == 0)return TRUE;+ Z- ` X- ^; N
return FALSE;( N$ P9 Y- ?5 A$ d' X# j2 G
}
6 ~# Y1 n+ X* {8 z: C/ K
+ F: @ p* y" r9 B9 I static BOOL BuyItem(DWORD ItemID, DWORD npcid)
, ^) l: [7 a3 ^, v o2 h$ U {
; ]* [& N% g6 N' y; ]/ Q, ?2 w PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
8 o) u6 y5 J* c& k# n2 m7 t BYTE aPacket[17] = { 0 };
3 O& Q6 B: Z. S( d( A aPacket[0] = 0x32;
. D3 k$ U1 U+ E$ i ::memcpy(&aPacket[1], &npcid, 4);
6 x# \2 S9 |0 @! ^, s2 P ::memcpy(&aPacket[5], &ItemID, 4);" h+ P- S( U7 p1 P: _. E7 r2 U# c
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
/ z' O$ c, r3 }- ], C% R D2Net::D2SendToServer(17, 0, aPacket);
. L+ c1 `0 w! f8 M/ \/ y+ ` return TRUE;
9 S! V2 V8 u$ G4 O }" H( J6 s3 ~$ o- p( r
7 _/ j! q: { r) C# z7 J9 D
static BOOL SellItem(DWORD ItemID, DWORD npcid)8 L" Z4 `% T! o1 _
{
$ j4 {- M, U% a5 J7 `& V* W PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);; x; C& O3 @) D+ U
BYTE aPacket[17] = { 0 };
! c2 J5 c6 `. b: R# m4 ^1 W# X% N aPacket[0] = 0x33;3 i# V, O( t) k6 K* q5 W# x
::memcpy(&aPacket[1], &npcid, 4);3 d- @8 L2 m3 w- |5 \
::memcpy(&aPacket[5], &ItemID, 4);
' P. s4 S, ]8 V+ G n; `3 d! x //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
6 a/ t+ i6 a$ O9 e5 ? D2Net::D2SendToServer(17, 0, aPacket);
9 j4 c2 D+ w# r! b0 S; H: n return TRUE;' A! S- D) j$ n
}
1 z( o" E- k/ l. v/ _8 z/ O# _! E/ f, R! U6 S
static BOOL Interact(DWORD nUnitId, DWORD nUnitType);
2 L, ?: S7 k, S: C2 y
$ }4 }* L) L. R; N8 @0 X1 t5 A static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);
/ }. L" |. C1 w+ E5 ?' O
, I- `1 ?4 a6 y/ H static BOOL OpenCube()
4 V. G& K) I+ V: v5 k; K { I4 y2 p3 e1 i h+ B" E7 X* K1 C
if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;
: L; w( r+ V0 [( M( E
6 G6 D' o# ~/ s UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);* ?- L( X* X. c, j& J
if (!pCube)
1 k# z- B5 k8 P9 N% q' x+ Q5 j% h {
" }' G$ Q! m8 J, C pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
- b1 o8 p6 ^5 I% D1 g$ w- N4 C' m if (!pCube)
3 h- k' O0 ]1 y( Q" d# n return FALSE;* R3 V) {/ ?1 D4 B4 Y5 e6 l3 r# E
}4 _1 E& [) v" e. o8 p X! T
PKTItemTellW8(PacketItemMaxTick);
( X* n- o/ X+ i. a/ x7 F+ e
/ p: [3 |# k4 d% { i- i6 W" k5 ` D2CoordStrc mypst = { NULL };
6 W# Z4 h4 |2 S7 r. e8 n/ Z1 [ D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
5 H: L& d( w7 I* M- J% R2 L1 O% U d' p0 R$ r, g, y; b
BYTE aPacket[13] = { 0x20,0 };8 s" w: m, n; s
::memcpy(aPacket + 1, &pCube->nItemNum, 4);
' e: p, u9 N5 E) B# k ::memcpy(aPacket + 5, &(mypst.nX), 4);, g7 D8 s7 G7 S1 [
::memcpy(aPacket + 9, &(mypst.nY), 4);; Y: O( q$ n! `8 E0 x) |) k
D2Net::D2SendToServer(13, 0, aPacket);
- d) L! ?' M8 {' W: G" V \ return TRUE; ^$ }0 ]0 W* I" I9 J0 Z2 {/ F- ?+ q
}) R8 _1 Y* X5 Z5 E: X/ s1 N
& z; e0 g. j+ U
static BOOL ToInvxy(DWORD x, DWORD y)! B0 X, w }$ J9 `7 F" s6 ~8 I4 ~
{
* u& V. a& h9 N$ ^3 W. L) q- C UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);# m. X$ d$ V3 h2 @; B4 c! u. b9 @
; `, \# }/ F# w: B% Z3 I# W2 i1 F
if (phand == NULL)
' h& k; Z, l1 \% {/ }7 G/ k return FALSE;$ J' [ j' p5 q
7 w* d$ J; ^9 M) ~7 ]) O: Z
PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
& z- ]$ v8 }6 J0 |$ Y; O- d5 i2 M0 Y6 S9 u# t7 Z( `% p
BYTE aPacket[17] = { 0x18,0 };2 X9 I. Q |. j0 F& v7 O0 d; g9 P3 f4 d
::memcpy(aPacket + 1, &phand->nItemNum, 4);
; P/ {. `, P s ::memcpy(aPacket + 5, &x, 4);+ F Q2 Z7 K" p, g# l
::memcpy(aPacket + 9, &y, 4);
, |$ t8 B* \' a. T) y D2Net::D2SendToServer(17, 0, aPacket);8 y* Y3 ~) R. u
return TRUE;
) E* z. M! ^5 J9 H) R( M }3 `7 k5 Z. [: z# d4 {1 h/ C
) g% ?* y& `6 t; w9 H
static BOOL ToInvRandom(BOOL bBagFix = FALSE) 4 r' ~) P/ V+ }8 `
{
4 X* x3 n) f2 L5 }; D& c3 G7 g( K3 b UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);: h: D2 k1 C* W: H6 g5 p! b3 ]8 e
if (!phand)
" ^3 ]& _2 V# u+ |: \ return FALSE;5 p0 N5 c) z! f& f
int desx = 0;, `" m0 l$ S0 o: z! O ~$ |
int desy = 0;
9 J! L, b; C0 A2 w" M9 Q, }( V if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))% l! C. S' I4 a) V0 Y( K
{
" j6 d8 a4 @/ {) }2 O) W( _% E ToInvxy(desx, desy);
0 u: |" a" \; V return TRUE;4 C; M+ @ ~: ]$ [
}- h+ D2 Q z, P5 p5 u* J
return FALSE;
5 _1 D+ B1 d9 [( | }
. N8 ~& O8 A7 g
% R" p+ y. k2 K4 |% w6 }1 p# ^ static BOOL ToCube()
8 Y" Q( N; @% d- D {5 a" w8 R+ j# @3 h4 T6 L ~
if (!(*D2Client::ptPlayerClient))return FALSE;
# t3 ~" z h' n/ Z$ _$ f
7 @. q7 Z& ^9 {( O UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);# h- d3 C3 n5 \2 J2 D* M( |6 }
if (!phand)return FALSE;5 C0 V; i7 H. G
+ Q! e; I2 Y4 k. K: `! \, y UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块) a S- a* Z- N. Z$ ?
if (!pCube)6 Z- f+ V% T% y# i0 z1 F! c8 i; E g
{
2 m" ~0 f0 Q. c( ]6 m pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块2 M9 a4 } M6 u4 i! _7 u; }
if (!pCube || !pCube->nItemNum)! w9 m+ v4 a4 q& W3 B, U
return FALSE;+ F& V6 r( t {6 J& R' h7 X0 A
}
2 ] A1 C1 V, T- Y* R; J; ^; l, P8 j S1 d1 A! K! Y" U% J- t
if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))
6 E) w( Q5 M7 ~ G- b. x& z$ ]+ S/ I return FALSE;, g" V. J% [- m" t4 z+ t) n5 x
/ y. l7 W8 }. y PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);" b3 ?1 ]$ @, ]' }, d9 H
/ S6 T% t- ]6 P3 T+ N, z BYTE aPacket[9] = { 0x2A,0 };
( g" \5 o$ v7 D4 ] ::memcpy(aPacket + 1, &phand->nItemNum, 4);
" M6 w, y! X# I0 o, O ::memcpy(aPacket + 5, &pCube->nItemNum, 4);
/ c0 i# J; e5 e D2Net::D2SendToServer(9, 0, aPacket);
& u, M7 b7 I" e! H" Z$ R" F6 | return TRUE;8 r- V2 B, v" u: d7 p
. q* ]4 b# e2 H8 v
}
# s, S2 L' @ K) R# x
, M# |: ?* W7 S# z0 @ static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);
0 i6 }+ F4 G2 `0 F5 C) G h* }
. b, ]4 S9 R0 t9 n1 k static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存
+ ]& [8 \/ a, v1 d- t$ G/ [' E {7 ?# }4 D5 l" u0 F
D2CoordStrc mypst = { NULL };
. X/ W: H& U, g% f! f D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);6 `! S' {' b' t3 Q: Y7 x
. _) F! r8 x$ L. k% `# L
if (!mypst.nX)return FALSE;
0 U( J9 B. f, H/ j1 y$ N
% S: I$ O5 I- @0 v4 Q5 ^4 U: w PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
) o' e8 ` j4 [2 J1 R ?& }4 H h$ A+ b$ }7 U9 G/ ^6 U
BYTE aPacket[13] = { 0x20,0 };$ m+ Z1 ^! ?/ }: G
::memcpy(aPacket + 1, &dwItemID, 4);' U1 O" _- u$ G5 I. O
::memcpy(aPacket + 5, &mypst.nX, 4);; q8 b0 ~: p& c. x
::memcpy(aPacket + 9, &mypst.nY, 4);" o' h1 M( L8 z
//return D2Net::D2NetSendPacketToServer(0, aPacket, 13);
1 Y8 ?* l+ W G+ J" o D2Net::D2SendToServer(13, 0, aPacket);8 R( M4 \: E3 f* v6 D& X. e" y
return TRUE;
' \4 x& P- R7 ?. |9 M" V; b }1 |7 y7 g, h: n# [/ j2 q5 M
. f3 `6 V. C5 @7 k( A
static BOOL DropCursorItemToGround()9 N* l+ j% E2 j' C1 s5 W
{, h# z0 b2 O8 M
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);% j4 B1 n0 D3 q! l! Z$ H" l4 ^/ h
if (!phand), L+ t1 T' `# O+ u# O, p4 r9 I0 |
return FALSE;
& U9 v$ j6 k" w% p9 D- ~
+ X) ?1 Z( ?! S: C3 d. G3 Q PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick); c9 I2 P3 U7 ]8 p, F. l2 A
5 ^ D/ e3 a0 W% }: I: y$ w BYTE aPacket[5] = { 0x17 };
( I' h' P; \+ ~& u; ] x P ::memcpy(aPacket + 1, &phand->nItemNum, 4);
3 y7 `9 U5 s! X4 a: ^2 p+ [1 j D2Net::D2SendToServer(5, 0, aPacket);
) z" s# ~7 E7 u return TRUE;
. B: J3 B* a$ M$ x1 {- U- y( X/ `6 h, A' q! q, ]( e. o
}* `* [' K; }- O8 A" k8 R9 _
4 T1 w* @4 R& e; R static BOOL PickStorageItemToCursor(DWORD dwItemID)( n9 |& Q% i# {4 E
{
5 ^7 z, ^; b% x( b PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
0 f( j8 Q0 e( }2 L' R6 x" m! _/ ^, M4 }6 Q& k
BYTE aPacket[5] = { 0 };
* Y C9 g4 F# _4 y- G aPacket[0] = 0x19;
5 a: K$ e1 W; w; E3 \2 } ::memcpy(aPacket + 1, &dwItemID, 4);% K7 m5 t. R/ [7 Y |" a t9 o0 Q
//return D2Net::D2NetSendPacketToServer(0, aPacket, 5);
: E* N8 r2 j, { D2Net::D2SendToServer(5, 0, aPacket);
" _, _, e( X- P& F return TRUE;
5 [* r) L5 w& Z/ F }) k$ Y: ~3 ^0 y. x+ x# J0 A" z5 d
( m6 M- V8 l0 D0 i! k- G' L% S, C9 Y3 E
static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)
5 b1 Z+ w3 J1 K/ k2 r {- w, m4 g3 M( @! i
PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
( q8 V: Q' g- s1 U2 u( I. G- a BYTE aPacket[17] = { 0x1f,0 };. P5 p" R# m9 \- w
::memcpy(aPacket + 1, &ItemID1, 4);
( j& f8 R' N3 k! S5 T+ H- q2 U ::memcpy(aPacket + 5, &ItemID2, 4);
! I9 z8 J* }( k! E' @; G* f( ~# K( { //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
# y, t! v g) y! _: l D2Net::D2SendToServer(17, 0, aPacket);
5 o" e/ Z# J0 Y) |* S; c4 m5 K" i return TRUE;- K6 p7 l \% s3 V: c
}
$ }; A5 J$ h5 b6 b+ n1 o1 N0 F0 v, F7 m
static BOOL Transmute()9 U: |1 e# A- v+ a
{- [: Y/ u- L/ K( S R
if (!(*D2Client::ptPlayerClient))return FALSE;+ g! ^7 B# l, v; b
% e5 r( d2 e' [1 V) t; [8 ]+ m if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))/ l) J9 Q* P/ D6 F
return FALSE;$ ^; s% E! U2 i: y0 n3 j
4 W& T6 A9 Y4 ]# V- F PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);* N0 v+ Q$ Z R3 }
BYTE aPacket[7] = { 0 };
0 K C2 u# C" f, K aPacket[0] = 0x4f;- k# f5 k5 ~$ Z4 Y
aPacket[1] = 0x18;+ m) v4 u# o# b5 x9 E: k
D2Net::D2SendToServer(7, 0, aPacket);' r, d2 x- O8 R7 A* g
return TRUE;4 R8 c- L9 `4 a' T% F& a! h
}
' ^* q7 J) ~' Z4 N C: n};
) E+ }5 s2 Z* u# t0 l7 h0 ]6 ]0 {1 k; M% _ t; H
|
|