|
转载
3 G# p; n; w, s( ~& m* t自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:$ c, }1 i' H) y! K$ ]) V
D2Client:
9 b6 ]) d) Q; u% o( |- H/ ]$ N/ W6FB20AE1为拦截输入框(用于获得命令)
4 f0 }' `6 u/ ?' l9 ]4 P9 L6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发1 U1 t& {, p9 C' I. Q# ]! `
6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发; W9 |6 q+ q5 K( T/ u1 b
6FAF4230为hackmap的loop点 我用的hackmap导出位置
! m6 I! x" z2 m7 F+ R6 Y* _& D" z6 S3 y
, X4 J5 H+ X1 ]1 a发包函数:
- D: p, T9 y, ^% P, A+ z; q& Uclass D2PKT_ITEM& O4 H3 A6 i+ E+ G$ z" k% Y
{
; F5 @: p+ v0 V/ q& e#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上4 S% e/ k8 g$ p! k1 [
#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多
7 _( O% u) B, j7 V' K#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上
4 l- F% |3 R7 V- @$ \9 h* z: T4 y#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上
6 k. m4 s) c9 Q! q- S: E0 h#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH
) a: X. ^) z# e# \. b4 ]& a#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上
# K& r. y Q, b1 K' h" Q#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏
1 Y* Y- v% a$ ], j* O7 y% D#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上
, X. y6 [8 b3 }; q' F#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -$ F9 U: O3 _! j2 S' e& q7 u) ]2 P% ]4 f
#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店
- }; n8 } f# t' _7 Q( z! o#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV
" N) g0 V0 d) |$ K4 `1 s#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道
4 N1 Z7 ?$ ^& S9 p1 `/ t#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带
$ O& o! Q8 ^) Q' G6 m#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上) y S a! d1 n2 ^
#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -9 |' }' D; ~4 h- O1 i: H T; b
#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上( _4 s2 N2 h$ }& H; S
#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -; s; {( W6 A# f
' f1 P% L, ?* i" ^1 ]! [2 E! \
#define PacketItemMaxTick 150" b7 T) q6 f9 B+ ?' i7 X5 _# D3 z7 K
#define PacketItemPickUpTick 20
8 f! \, x* P% n/ m; [8 L5 u/ [$ `. B; N j( V6 i
private:
- z! ]; A1 Z, A# y9 O static DWORD _PKTItemTick;$ \$ k* j0 a& N
static DWORD _PKTItemAction;+ }9 \3 f) V7 X- W
static DWORD _PKTItemID;
3 I6 G& I& U; G static BYTE _PKTPKTType;9 {/ U& f/ p4 {& k# c7 J
public:5 M" W4 m/ a9 ^2 Y9 `
static DWORD PKTItemGetTick() { return _PKTItemTick; }. e# B6 i; L) ~6 E
8 d* _; [, W1 C& {( D0 _- s, T static void PKTItemRelease()
2 G2 Y% ^; v0 h/ g {
; }6 \5 h- h# U6 l) k8 @ _PKTItemTick = 0;3 i/ @6 u! T5 b. {0 {
_PKTItemAction = 0;8 ]8 P8 _) Z5 e
_PKTItemID = 0;6 B# b' z' s8 Z0 f; c0 S% ]9 K6 A
_PKTPKTType = 0;1 Y5 C+ `" @7 k6 v/ A
}
! ^: P+ Y. g x8 D, I
& L# Q5 _! l2 m, C static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick) ' E% f6 M6 X: C5 l& p% g3 b+ O
{. p0 O; U3 U# ^. i- Z3 V+ g9 I
_PKTPKTType = aPacket0;
2 D+ A5 j( f$ y3 ^6 S8 X* a _PKTItemTick = tick;
( E" m3 Y' w' W+ ^/ a6 [ _PKTItemAction = ItemAction;5 A$ t `; E( r1 q
_PKTItemID = dwItemID;+ i8 t) g6 e0 x7 B
}
, @8 P$ e& U& ^% C' K
. ^0 C) X! r+ G: e# H$ I3 o* p static void PKTItemTellW8(DWORD tick)
& R) M8 T& |3 R$ W. x, m {
% g9 k1 \9 p$ ~& l _PKTItemTick = tick;4 V% C- I+ H4 x3 P6 n
}% r0 v# i7 w7 X* {% i
1 \2 G* [) U, @% i# v static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor
- ?! C, k5 l* v" O: i* o {" ^' y& p. C: L6 l/ T5 y+ m
if (aLength >= 8)
% X' C' c" N; \: C8 C {8 @0 Y" ~% A8 y: a* B
DWORD dwItemId = 0; ^, j% {8 D7 i5 b3 W! z) X! {
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));3 m0 B- {7 {4 d% G' ?% I: U- k
if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE
9 A! ~2 G/ `, J( M && _PKTItemAction == ITEM_ACTION_TO_STORAGE- V# }$ K6 s1 c1 P
&& _PKTPKTType == PACKET_NEWITEM
1 v4 l1 e$ r* o& e, G )
2 l; ^ q# X) u6 a {
+ |$ \7 S8 R$ Y7 u" }0 j9 B if (_PKTItemID == 0 && _PKTItemTick)# [, b" @5 i3 j3 [3 G: e, h X; I* r
{
% L% A. O% p5 R& ^ PKTItemRelease();
, h. a$ L. ^! W; w! V% M }
1 F# B8 r5 I8 o2 D* q% Y else if(_PKTItemID== dwItemId&& _PKTItemTick)3 V! q+ b. Y7 l" _0 [4 ]
{1 a5 b( M; Z# L3 h
PKTItemRelease();
& u4 Z8 z8 }% {7 ^ }
' ]( H! F8 Q# X2 Z9 [ }
|9 b: M+ E) ~
" d- P1 U8 v# S4 u) _ }) x6 \3 F1 l" p F
}- k% K2 j6 _* V0 f7 t1 g7 M; r
: T9 r, s+ h" E* ^& t0 Q; n static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored8 U [+ C: L. r% p6 ]" z2 ?/ A
{$ v8 K, r5 K6 Y, u' [" t% {
if (aLength >= 8)! M% A. Y6 J* Y4 s2 z9 s1 r
{1 @$ T" H( A7 _ f1 {: L% f
DWORD dwItemId = 0;
# z0 R, L h- s+ r& h memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
; p8 r( ~7 w7 v8 s Z/ | if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE
0 p1 h. |& E) n+ G5 ?+ k && _PKTItemAction == ITEM_ACTION_FROM_STORAGE5 F* f* _# J" n
&& _PKTPKTType == PACKET_ITEMACTION9 o; t8 e& _: Q: u% d
)2 F$ n# U! B. y( d; R7 W8 d
{
- b. M2 `- t' k) r' z$ r$ T if (dwItemId == 0 && _PKTItemTick)
$ }8 u" v2 T: l4 y" k5 d8 Q {
v. C. R( ~3 m! a' ^8 |* l) {& i% c PKTItemRelease();9 t% E% p% K0 } d! s' g
}7 i6 V. ~1 n6 J3 ?# F0 j' X7 }
else if (dwItemId == _PKTItemID && _PKTItemTick)" A3 N" Q# i7 |. i
{+ C- j6 a, _4 K( F) \, A8 s# O
PKTItemRelease();
) ?# `5 o) h4 a }
; P! e4 f# k; L3 R& l, L }
! i; j3 Q$ {4 y: R2 g5 @
8 t" x4 o1 l. d }1 z9 y }. u/ @8 Y3 y. I" c
}
, T% ~! z8 Q8 v
% N4 l) N/ ]# z" O% P1 v4 \- E. [ static void PKTItemGameLoop()! Q+ D; O! Q) P! x6 y! U
{
: R2 H* U( L! E3 ~# e# J if (_PKTItemTick > 0); S6 _# z3 T, l/ Z
_PKTItemTick--;) C; A" e+ O N2 @* r8 `! J
else if (_PKTItemTick == 0)
6 Z& o$ e& p/ V& T; Z$ j! `9 J( W7 @ PKTItemRelease();8 j- d# F) t+ u$ K5 n5 @9 j
}
# ~2 E5 [6 ~& I. e" I& M2 w
3 B/ i/ {8 i. H5 I static BOOL PKTItemCando() 0 d l- H5 L _% V! u) p5 @
{/ O& U. N5 ~$ b* t/ q
if (_PKTItemTick == 0)return TRUE;0 s! [' }" v' L* m
return FALSE;% \% P8 S) f9 c0 i" t6 x# B, D7 t C
}
+ F2 v# U, Y9 A0 T9 O" g$ `& x, ^
static BOOL BuyItem(DWORD ItemID, DWORD npcid) U( y& o6 W/ B n+ S' e
{$ |' }* b+ H' i3 M7 h
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);. H) k" X. b! M4 f
BYTE aPacket[17] = { 0 };
& Q' Z6 n9 ^$ Z( c7 Z% B aPacket[0] = 0x32;
8 A) \' i& P5 B ::memcpy(&aPacket[1], &npcid, 4);
& N6 O1 M, Y5 ?& h' Q f ::memcpy(&aPacket[5], &ItemID, 4);$ a/ ~; s. L' d3 U
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);4 t/ a' G! V9 A' M
D2Net::D2SendToServer(17, 0, aPacket);
, q2 ]+ V2 ]* l8 c return TRUE;9 e! r& M$ s$ H' ?' j1 {5 [, z
}
3 F6 m" j: v5 T8 H& i; P1 Y9 T6 z$ F5 b; z/ [# b
static BOOL SellItem(DWORD ItemID, DWORD npcid)
9 R+ s: _) B7 Z2 @& N { l) f8 z5 U: |, {' ^! x8 C
PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
$ I* z; }# R" M+ [ BYTE aPacket[17] = { 0 };
, r) Z: [0 Y% i aPacket[0] = 0x33;
8 o$ Q* m/ r/ P- S- U/ N ::memcpy(&aPacket[1], &npcid, 4);2 i; i! P4 ~$ K0 E: V/ p" o/ g
::memcpy(&aPacket[5], &ItemID, 4);% S( Q% W( y: P, g
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
# s; O$ L) e) D% e* T& M' E7 } D2Net::D2SendToServer(17, 0, aPacket);' E4 Z# a" v& z) }4 N" n! q
return TRUE;+ T, b7 k2 N y* e0 A
}; W1 }2 u1 d% @
% P! l) t" y2 d! _% C v6 H! n
static BOOL Interact(DWORD nUnitId, DWORD nUnitType);8 n" j( K! ~. n, C7 a% C
# ?" m/ w/ y1 I static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);
& W# T/ {+ U/ }
; I# n6 H8 D0 o% q& H! B2 q static BOOL OpenCube()
8 n# O/ `* z! Q5 v( k3 p2 q {
& [4 l3 b2 i- v& q8 i) G6 `3 y$ K if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;0 u: k7 J. ~ v. ^5 `
, d+ f4 Y3 I9 t# @" H- R UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);5 _, ^8 d' f, {9 p; s8 G& P* P; }5 m
if (!pCube)
3 l: u& H3 g& n2 }; j {( m7 k! p% N+ N: q; t; d
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
& M( c3 o6 Y$ X. Q7 Y7 f/ Q if (!pCube)0 n$ n0 W7 m. o; S7 K6 P$ C! z4 }
return FALSE;1 J0 ?6 |) F6 ^2 Q4 r
} B3 Y' u% g- o2 A' k
PKTItemTellW8(PacketItemMaxTick);( f& w) X5 `4 b5 W' [# f: a' i
* Y5 a3 R; ~8 P6 z% ^ D2CoordStrc mypst = { NULL };! l0 D; \6 P# c* O0 G- B8 {
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
9 A9 e$ D8 F. V
, {- a4 z" d6 h& M BYTE aPacket[13] = { 0x20,0 };
2 R3 ~0 j: E, o+ v/ E5 \1 y ::memcpy(aPacket + 1, &pCube->nItemNum, 4);! c, b$ ?3 d, g5 T: g a" L) `( }6 v' N
::memcpy(aPacket + 5, &(mypst.nX), 4);0 E4 m+ H! L! E4 P+ v7 D
::memcpy(aPacket + 9, &(mypst.nY), 4);
! t6 A' | y, R" l9 k& g' d D2Net::D2SendToServer(13, 0, aPacket);
6 D' ]. q7 J8 _/ c& |( q, N return TRUE;
6 X% E0 C& S S4 W( Q9 F }
" C& @; S' o1 J M! K2 S
* ?8 A' t N( g" W- D static BOOL ToInvxy(DWORD x, DWORD y)8 v7 {+ w+ m- q& L, h* p
{
1 r- g1 I" i, v& C$ P UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
0 O0 K! M8 c. @2 k% A
g4 a+ H8 K3 y! ^* }+ |$ G if (phand == NULL)
- M' k* i0 S4 {- h" {% I return FALSE;
2 S+ S7 D6 R( }& V7 i& r& ]. e/ g' K# L6 f, l
PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);+ Y4 l; K+ N2 r- Z( q& r
9 |6 `" o/ F; [8 P
BYTE aPacket[17] = { 0x18,0 };
# {; N0 j" S- g ::memcpy(aPacket + 1, &phand->nItemNum, 4);
+ [3 i# n( O4 w% r& @ ::memcpy(aPacket + 5, &x, 4);7 H# Z* J L% q3 N5 \. z
::memcpy(aPacket + 9, &y, 4);) M. y& |! r! T9 M: x
D2Net::D2SendToServer(17, 0, aPacket);% }3 k4 K, _/ S5 T" Q4 q
return TRUE;
% K3 J: D. F# j( n }- [% n9 d3 T& _% m- _
3 {! I6 h, ^# |( G2 L3 w static BOOL ToInvRandom(BOOL bBagFix = FALSE) {3 }. V) [ o! z- N7 @( w
{7 M. i$ _! M6 d9 e+ X
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
% c" B4 L- h/ G9 k if (!phand)2 Y, H" |$ A' X7 N) T& J
return FALSE;2 Q2 I4 _5 Z- b0 ~
int desx = 0; E$ l. A* c" c+ ~2 L
int desy = 0;
" ^$ |) G4 k {! e. U! E if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))5 U; q6 d! R s- U
{
- Y! y3 S1 {( `2 n' V+ r ToInvxy(desx, desy);( N" n5 v! r, f$ b# c$ n5 d: m% `
return TRUE;8 N* ~2 e/ K/ k- Y( r
}
7 F P; @2 x9 {7 q! {" U return FALSE;
# E- A( W6 S, L9 D }* W. m) c0 R5 \% v& v& E0 j8 b4 k1 _2 U: L
m; F+ s% D$ e# p' C8 G static BOOL ToCube()
. W9 \9 o1 `3 ? W1 i! e4 o {" s3 G( T7 o8 z8 B5 Q' ]! f
if (!(*D2Client::ptPlayerClient))return FALSE;6 \0 w( \; K4 E3 t* P
+ ] m& W9 m* U UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
7 t) N) Z8 ~, k9 J! }3 L if (!phand)return FALSE;$ w* d7 ~9 _' q: z7 C4 o1 {+ N5 O
" v+ S9 n. |$ W8 [" N! f! _
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块
1 _ w" k0 V5 L. T/ p! M if (!pCube)0 ^# ]% u) W! V& @
{( X" k5 W, P& s2 S2 D; H; w0 Y
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块) D' F) G# e) k4 O x5 c$ E
if (!pCube || !pCube->nItemNum)
; ~4 Y$ v$ v& S& M return FALSE;
7 @, u* J* _0 n2 ^6 g9 z) \' I }/ `+ l9 D( L7 Z) t3 s4 q
8 L3 V# t7 ]" i3 P5 x if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))# }& A7 R8 |, k) a, |' d
return FALSE;6 C! i& Z7 g- o2 \
/ n+ k* X* E3 |/ E) _' k
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
2 G& P! h( z* p* c; U) w. p# X {* e$ K1 p
BYTE aPacket[9] = { 0x2A,0 };
. t% D5 m! \) G T ::memcpy(aPacket + 1, &phand->nItemNum, 4);) N$ `" R2 D' o
::memcpy(aPacket + 5, &pCube->nItemNum, 4);5 U" i' W/ {+ q! L
D2Net::D2SendToServer(9, 0, aPacket);
3 Z+ [2 W0 }0 w& W; u return TRUE;; p5 u, Z8 M$ Y3 _3 V
0 s5 K' C: l4 _! \+ O
}
* q& |0 K5 k0 R% f/ H; @7 j* s' D
/ t! b0 b- |$ s/ O! w static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);
: y8 Y+ P* q' _6 c/ M# m8 `2 G2 `: F6 ~% E9 f: m
static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存
0 N1 g& I+ I7 k& x {5 R5 o" f1 } U7 A, B5 F$ E
D2CoordStrc mypst = { NULL };
7 r5 p/ ?' U- _ D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
. _9 u$ h' s$ x# M- }. D/ w- j( ?6 C% |: j/ X& o
if (!mypst.nX)return FALSE;. ]1 O4 B& Z: H; {8 R$ Q. g) W% @
2 p$ y$ r* e. Y4 ]/ x1 [ PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);5 }4 Q l! W) B5 K* D9 T# V6 Y5 @5 m" H
1 x. a# I1 C, L/ d! T
BYTE aPacket[13] = { 0x20,0 };
/ g1 |) G$ d8 m8 N# S3 d1 B ::memcpy(aPacket + 1, &dwItemID, 4);
4 J* w$ d; U" W; T! G ::memcpy(aPacket + 5, &mypst.nX, 4);
' d2 B) F5 |/ A ::memcpy(aPacket + 9, &mypst.nY, 4);
, e) A( y4 T X" @ //return D2Net::D2NetSendPacketToServer(0, aPacket, 13);' F# z5 N! D$ N5 f, E1 g" U" ?
D2Net::D2SendToServer(13, 0, aPacket);2 ~- n: M3 ?& J8 J
return TRUE;
: ~5 y1 ?" }6 ~) P) ]4 ?8 ~! w }4 `2 m2 S3 d" X/ g8 l
2 Q. ^: Q0 M; E+ j; f- Y
static BOOL DropCursorItemToGround()
: z( d/ E+ Z! D3 e7 w {
. L/ w( D2 p/ i- d UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);8 j* B' o6 Y0 H; O, A3 S7 r
if (!phand)
5 f5 p# D) ]) z& p9 D4 k. o return FALSE;
B* c( Y& {8 }6 Y: N) Q/ N( K* V0 k2 ?) W
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);/ Z; N: y( _- U7 i$ k6 M3 W
, A: r/ `; g9 K4 p- i! O BYTE aPacket[5] = { 0x17 };
* n6 j! U' ]# Q0 X9 w' a% ?* W9 X ::memcpy(aPacket + 1, &phand->nItemNum, 4);
% \! q5 k4 Z) N& K3 W D2Net::D2SendToServer(5, 0, aPacket);: v- h* \6 g/ W
return TRUE;
r* L; J2 O/ ]$ s) M& y3 O
( C W% m# ]+ d$ n3 T5 p }
4 w. n6 h) g5 Y& q: D; X* N% J
. u1 {; K! K. {( c static BOOL PickStorageItemToCursor(DWORD dwItemID), I! t" N0 _7 G: E& N" U5 N! ^
{6 y+ K" I5 {: W& _# v. _/ G0 A% G
PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);2 C" b+ S* h, S. y
d- _, y( ]2 ], G6 l
BYTE aPacket[5] = { 0 };
; C+ Y4 e% h% q r' L6 Y aPacket[0] = 0x19;4 I6 u- y/ x" j/ Y9 e
::memcpy(aPacket + 1, &dwItemID, 4);# D2 t. T% }0 ~1 g* G- q
//return D2Net::D2NetSendPacketToServer(0, aPacket, 5);4 U8 l8 k0 s& F+ s4 _
D2Net::D2SendToServer(5, 0, aPacket);4 {$ W, P. [. w o- S1 R- o
return TRUE;
, Z7 ?8 T V9 |3 J2 Q6 Q }
' Z6 u `& Q: n% I- \0 J/ k4 E- m4 b- o3 R+ S
static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)8 C4 S0 G6 f7 {! a7 p1 d
{9 W7 {+ b. s; K% d8 `1 U
PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
% A# T7 r" y ^& V! O BYTE aPacket[17] = { 0x1f,0 };
! \( g8 p( o4 L/ W2 j ::memcpy(aPacket + 1, &ItemID1, 4);8 h* c4 t6 l5 Y2 @
::memcpy(aPacket + 5, &ItemID2, 4);! W% F, L* M' H; `
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
4 q6 N3 [* |, Q3 N+ `3 M' i4 V D2Net::D2SendToServer(17, 0, aPacket);
. ]+ c8 S5 i: ~) `4 L return TRUE;
: R0 b$ k0 O9 ] }
1 o3 m* U0 M3 g$ q" w- h1 ^# J( X2 ?7 v& C: t) T3 l j0 b
static BOOL Transmute()& n- g; }5 Q: t) B
{1 Q& q! t) v* ?0 b) Y! Z
if (!(*D2Client::ptPlayerClient))return FALSE;" j2 X) n7 h" z: e& Z" C5 W
- B4 ^$ Z) W# h7 M5 s4 Z if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))' ]* o1 A9 A1 H. c9 n/ x1 x
return FALSE;6 Z1 l; j" C' M* j" D# J
7 k5 o, s+ i9 `; J3 a8 r! q( J1 B2 L6 r PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
6 y/ _& ?4 V/ w" R BYTE aPacket[7] = { 0 };* G2 q, w" R% c; V/ X. k% Q( J
aPacket[0] = 0x4f;9 {. w5 S3 m7 D$ g: a) B+ D
aPacket[1] = 0x18;9 Q) q. Y9 n3 N; N3 }4 F" J
D2Net::D2SendToServer(7, 0, aPacket);
3 Y5 n1 C6 G8 [& e/ X/ B; M return TRUE; _ Z) t7 P, j8 t1 e7 R+ y6 |% I4 i+ W
}
) V/ }- `) a( x" M l, i) q" {3 p};
2 N8 p% A* V. ?8 R5 R% J! ] T' W5 L8 L4 Q
|
|