|
|
转载, \% A# M& [' @& {
自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点: z0 p" M2 C0 c. X' o7 w/ d' @
D2Client:
" F) T: }' q) G6FB20AE1为拦截输入框(用于获得命令)
; n! W) h5 @7 a# d+ J+ t6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发9 D$ z7 E& G7 n; A1 R4 c
6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发
_1 H% T" b& v4 ~7 R1 s6 F- a/ d6FAF4230为hackmap的loop点 我用的hackmap导出位置
# e1 ^, _+ p5 H6 O7 [2 i
0 a7 J. u" R' n! j) X* ^3 S2 M b; h8 H7 F# f; G
发包函数:! ^0 r, j% k* A6 q% s
class D2PKT_ITEM
, F2 v, c' |9 E' z{
7 L! b* p+ N! \. l! M9 g! A3 [#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上" F! E0 C1 ]+ e! \1 g
#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多- H$ e6 F+ J1 Q; `& L# M$ C
#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上
5 c- v9 Y4 d% Y0 |. `#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上0 ?& z4 Y& l& i. g6 @0 e" w" i% d9 `
#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH
6 P' M+ H2 x( _! k( X4 _0 g#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上5 u) G& F8 O* z* D% s9 y- v: R
#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏( K# y( v* v% G S! g
#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上: ^/ e# G! O# ?
#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -5 J; L7 N% l2 S
#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店/ A/ ]4 Q9 v N; m. m. k
#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV
5 B* O- C7 r, y6 E( W- Z7 [2 V) Z#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道 $ i5 P# [* G1 @$ O/ s
#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带
) W2 p; \' s$ b. o( |! ^; a#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上) ^2 v2 b. \/ G( m0 v J4 a- P
#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -
' y0 A' @+ V0 g r1 c5 W#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上
1 q$ M' b. _. d Z# `" w#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -
9 @& M- }% q# g1 ]3 v
/ `& `. B" ~/ r0 ~#define PacketItemMaxTick 150: y6 U7 m. C0 k, @( v* T$ G1 I/ L
#define PacketItemPickUpTick 20; K# e- J. A% c
- F* ^& v v1 X+ {7 U' c ~
private:3 y* `0 c' a/ f! L! F
static DWORD _PKTItemTick;
% M' E7 d3 ]4 P& E3 s% F static DWORD _PKTItemAction;- p- S' x- P! G1 ^! V- E
static DWORD _PKTItemID;0 T- x' ?" ^, E# t8 V
static BYTE _PKTPKTType;
& P; D2 [* f1 E: }) G/ bpublic:8 _; a/ `% \, F) P& S
static DWORD PKTItemGetTick() { return _PKTItemTick; }' C3 F/ S, F9 m
1 Q) v: ~% i9 l% h! Z static void PKTItemRelease() 3 f, G8 N; S/ v |/ _+ @
{2 G( ?6 D# z9 d. o
_PKTItemTick = 0;
% Q4 K! p+ m7 z& H$ o _PKTItemAction = 0;
( d8 B2 P6 f3 r* a, e _PKTItemID = 0;
& Y% _6 Q. `+ w" c" \ H7 a _PKTPKTType = 0;. U7 ^( P; e$ }5 ?
}
+ t4 ~) F" j3 D* F4 Q" m
% o. s( b9 b7 }( Y. y$ ` static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick)
. w+ r$ I0 N" C" m! ` {9 D# E& u4 Y7 x5 {; o5 o
_PKTPKTType = aPacket0;
2 g6 q9 v p7 \2 m7 f# `$ Y _PKTItemTick = tick;% X) p7 u4 e6 Q! H; ~
_PKTItemAction = ItemAction;
% h1 n" t. }, G' r% f% ~8 o) q _PKTItemID = dwItemID;
0 }# W; b [7 P7 Z( o6 O% ~ }8 v* }5 C4 E/ ?0 m
3 ?( b8 p; d+ B8 x0 c
static void PKTItemTellW8(DWORD tick)
' O. ]& i, y/ i {" @' l! [, w, s7 t
_PKTItemTick = tick;6 R& L7 e3 T* r' s
}
) E6 J# C% D7 C2 i; w+ `% n
1 C! X+ V) n( P: |6 K static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor
; |$ |4 I8 Q) r' }# A {) W c6 I/ m' g4 ?
if (aLength >= 8); L; a6 D) b4 _/ n
{( L# q- F3 B3 F
DWORD dwItemId = 0;
; r$ ]) [# R) e. G2 b( T: ^ memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));% X# `! V! W: ^+ q& F9 p
if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE/ Q) t5 l; ~( Q( ]; L- g, |
&& _PKTItemAction == ITEM_ACTION_TO_STORAGE/ n0 f4 y. c" W- s/ ]
&& _PKTPKTType == PACKET_NEWITEM
! H9 Y# X, w4 r- W/ I, i& h )' r6 E* D6 l6 l2 \% ^ Y& Q) X
{
+ J* { b( Y( @0 x9 X# k if (_PKTItemID == 0 && _PKTItemTick)
4 B( g0 u( G) P" B {
8 P; x4 n2 \ Y% M PKTItemRelease();
" r$ _ ~1 C! k. L* H. D0 E }; C% z& g2 q+ U2 d
else if(_PKTItemID== dwItemId&& _PKTItemTick)
" \0 s6 @' k7 H. f: T4 [: L; n1 Z {
) c. p# e3 b: V5 j% K, P% l PKTItemRelease();- _5 Q+ u$ \* Z# D
}
. J/ }; s3 ~6 y) I- a } O( ~6 u9 R: f3 S; t- w, D
' ` J: d. \; C$ ?5 }$ @ }
3 _% n0 b& \ B* z0 K q, W. Q }
+ p; y2 e0 H5 h( y+ M2 p2 D8 D* {5 B) b4 i( T8 a7 J
static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored) {. `% h0 I/ b3 u$ x
{
1 q! R: m/ |$ z4 ^9 e( Q7 A1 H if (aLength >= 8)
h& G; N1 j7 v1 D3 L {6 E: V% T: V! {2 S( P
DWORD dwItemId = 0;' [# G) l( `3 ~
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));, c6 v7 n& Z2 l" c! a1 `/ W" G1 G
if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE% m, j, O5 a/ X7 |" e
&& _PKTItemAction == ITEM_ACTION_FROM_STORAGE8 X* l8 j. }* J, |8 M
&& _PKTPKTType == PACKET_ITEMACTION2 m; H5 [) w: m+ A$ Q3 ~: \7 _; b/ L2 A
)9 E V/ l/ f# M$ `) L
{
9 m6 {1 h N2 x: v8 g1 o if (dwItemId == 0 && _PKTItemTick)- n. R5 _4 y# e3 s6 j7 ^5 P7 W" G2 |
{5 O& K: [& I) A6 F
PKTItemRelease();
" e& E/ z" V6 g* z# A }! i, i* c1 c+ ], X9 F1 ^6 G
else if (dwItemId == _PKTItemID && _PKTItemTick)
Z7 U. l9 @7 d" R6 P! ~, q3 ]- T/ W: r {5 q+ Z4 _0 Q" O+ I$ P
PKTItemRelease();
$ q8 a! ]& n0 x: b }
& z4 C' `0 W- p/ V }
% n& }% {8 P e! i1 v9 ] ! d# B7 I$ `! U, c D. r
}7 s0 W& i; E X; V3 F% R, X
}7 L3 n, G+ w4 j
7 U4 I7 N$ e, u& h; ~+ \# K( [
static void PKTItemGameLoop()
! i0 e3 L" \! B/ [6 M3 N# T3 L {
- l* `. G3 k9 p$ n if (_PKTItemTick > 0)
7 K2 Z6 e. e) f; c; m: Z _PKTItemTick--;, y. n: D/ T1 I! v
else if (_PKTItemTick == 0)/ U! _% q, F; T: y) T4 E8 _
PKTItemRelease();0 B% Y! g, r; d- [5 a1 H+ `+ j
}
7 ^# n: Q: A7 K2 i6 M% ^* k2 {$ I% r6 x' K* q B3 d
static BOOL PKTItemCando()
2 A$ N: y5 \; c6 w3 _ {$ E& t6 m6 f/ \1 Z. s$ b9 ?
if (_PKTItemTick == 0)return TRUE;
' M* B) q( a' A4 `$ x return FALSE;1 q! ^& S; t" U4 s! m$ ]) P
}" X, U: C) @3 Z+ ^( `
6 |' b8 w3 i. K# K static BOOL BuyItem(DWORD ItemID, DWORD npcid)
- D. Y* d- i3 b& c7 D$ R8 {9 ] {
# K' Z1 o6 [+ V9 c* @, [ PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
* x8 A2 e7 K' Y" `" ^# \) o BYTE aPacket[17] = { 0 };
: c/ l1 N: @. u4 u k2 S aPacket[0] = 0x32;
, c6 q* G3 ` c; z ::memcpy(&aPacket[1], &npcid, 4);
" Y; M7 I+ H+ a* x* @( H ::memcpy(&aPacket[5], &ItemID, 4);/ A+ z1 @7 {4 e* C
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
) P. A$ g+ O' _6 U0 w+ a D2Net::D2SendToServer(17, 0, aPacket);) D, w7 r' L8 g) F
return TRUE;
; e5 v' k, I8 Y. i8 H; f }
" Q' ^1 ~* `- ^ G: S) X# o+ d# _4 K
static BOOL SellItem(DWORD ItemID, DWORD npcid)
" `4 j8 f7 g9 k7 I2 k3 ] n9 |8 H9 O {
- ?4 k9 q! W, o) _/ ? PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
- `, H% B5 v, S" \3 y$ o BYTE aPacket[17] = { 0 };
8 ~' d& M5 H. ] aPacket[0] = 0x33;+ m1 b6 j; U' ^0 ^$ R; O& f+ S8 p
::memcpy(&aPacket[1], &npcid, 4);
, E( F! l# C" [5 Y/ N5 X$ g ::memcpy(&aPacket[5], &ItemID, 4);
8 D: r: @* {$ o l$ [% c //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
* \3 A8 b. ^% f D2Net::D2SendToServer(17, 0, aPacket);
& E# E# \$ n* h) E) P B f return TRUE;
$ |6 l6 V' i4 F v" Y6 F+ o; w2 z }" s% z" j; a R' N9 L, F) L
0 {7 G& g& r1 ]7 x4 X9 A" }. w
static BOOL Interact(DWORD nUnitId, DWORD nUnitType);% Z/ Z2 k3 s i4 D* i& F
. A+ d- O( A" h& z) z static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);
T( @; H$ X; Y0 v# Q- @% |* f3 e. ^1 ?2 {7 E) ~0 }) _8 A/ `7 k: Y
static BOOL OpenCube()2 Z4 B0 B8 k" @2 z: D
{; I, Y# }$ X' H0 R: _( y! ~
if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;
: V( F. r9 M* y6 p' D" w
9 P c+ y7 |2 P' A& H- n8 ]; h UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);& g; g' Y7 ?2 ]
if (!pCube)0 y! Y: ^; Y$ `1 x
{' Q1 ]) f u# U/ t/ E( E
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
$ x3 T* U3 a c$ j4 I9 c if (!pCube)
& T" p* ?3 m& ? return FALSE;; z0 k0 N! Y \3 s& [6 @% u
}
6 `& ^2 C5 O# t PKTItemTellW8(PacketItemMaxTick);
7 {4 I' H6 L% r$ P. W3 L3 L: L$ ~- k$ g' Y4 C' e7 G- C2 c$ K
D2CoordStrc mypst = { NULL };. Q1 m/ ]1 {. B9 x0 Y, P4 A
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);5 Q# h2 w7 u6 d; U; u' o# c" g% V
0 _9 T9 k& F- m; p+ C" Y' _1 e+ f BYTE aPacket[13] = { 0x20,0 };% _; Y: E! o: |' k
::memcpy(aPacket + 1, &pCube->nItemNum, 4);
# H1 @* s) r& [1 R3 v ::memcpy(aPacket + 5, &(mypst.nX), 4);5 t6 Y/ ]* }/ ?$ [* \$ a
::memcpy(aPacket + 9, &(mypst.nY), 4);
$ l# G, {0 O9 J; [ D2Net::D2SendToServer(13, 0, aPacket);. B" J( D* O+ C! V) [) r
return TRUE;- w# |6 B; P- u/ x
}# x( j& W& W8 ?- O( k9 [& p7 F
8 F# U& N. M" U* n# k
static BOOL ToInvxy(DWORD x, DWORD y)
6 r* x& t" g1 r1 y {
3 c5 o! ?! }3 l# o5 [5 s UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
/ O$ b/ q# ?+ g! \9 m) Z# }6 {# x
if (phand == NULL)* ? b; m' `4 }+ ?# K: J! }# P
return FALSE;6 r% E& J7 ?# e( N9 K4 j
$ V% p: D( W# _+ d
PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
# f i/ u# L7 z; ?' D
" {7 S- @) ?. [( h& J BYTE aPacket[17] = { 0x18,0 };
' J2 ~) ?& r2 u) h ::memcpy(aPacket + 1, &phand->nItemNum, 4);
3 {) f( e* i. R( } ::memcpy(aPacket + 5, &x, 4);
0 H$ J: W" l. x) f6 w6 O) ? ::memcpy(aPacket + 9, &y, 4);; j l0 n& r1 ]4 s' E9 c! _2 i
D2Net::D2SendToServer(17, 0, aPacket);
, f7 r: d# d: j9 ?+ V5 M return TRUE;
# C. z3 c3 I* v* H* J; ]! |' j }
: \+ J* d- v+ Y# {- O2 W8 @$ M4 K9 d; {& @, k( o2 Y
static BOOL ToInvRandom(BOOL bBagFix = FALSE) 3 F0 d$ ]+ c- V
{- C6 O! ]# ~, D c6 k0 {
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);+ @, \' V U% R/ w1 S
if (!phand)
( i6 D1 c% B5 V( I$ h$ ~, b- _) J return FALSE;
/ Z2 G( n- Y/ w; L, \: r int desx = 0;) n9 l. M, ~' A2 L
int desy = 0;
* G, d6 l# E2 Z, s, p( h if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))
1 b) T- j) X g; a0 x; Q9 v b ~: A {
9 u4 h, x4 p; `/ A5 Y ToInvxy(desx, desy);: U a# F/ s' H5 A* _ f# |
return TRUE; r: c% @- J6 h2 {
}
7 \# j6 W: C% ^; {+ I1 t% a return FALSE;
# }5 V, m& ~" Q+ h% n. }* y }* K+ \$ x3 x- K& t u
) b( x4 X ] n) C* X" k" L
static BOOL ToCube() w8 u. u. h. I8 \5 M
{
2 |: n* l. | J- w+ }& B if (!(*D2Client::ptPlayerClient))return FALSE;
' \! ~) P/ s1 w' k, k/ ]1 p5 u' H6 h
( n, K. n4 [* d UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);2 n' c) N4 ?8 s
if (!phand)return FALSE;3 B1 e0 l: Y! p! a
& I6 E9 U8 o% x, f UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块
" E2 s$ ]# q; j: Z/ _3 Y0 Z if (!pCube)
* o3 D7 @+ E/ V {4 Z0 X% J, ?3 ]. b& m
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块$ W4 [" C1 M; y( Z; O! a/ s
if (!pCube || !pCube->nItemNum)
( }" o+ y$ {) A: P return FALSE;, z! F! I7 S ^' |, i' L- Y5 P+ F
}
3 h- B9 ~& b1 j4 [6 E& w3 H7 b1 ]% M7 ]$ m
if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))
; {* j8 ^) N `7 c w return FALSE;. {0 z8 [5 ~, I3 R, X: k
8 j1 b$ w( u0 }2 j PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);: M7 m% T1 H" M' s W- o9 u) ]
0 L& K0 ?; L9 B$ U7 h BYTE aPacket[9] = { 0x2A,0 };' G$ M( v: Y0 L3 v" l: ^* Y
::memcpy(aPacket + 1, &phand->nItemNum, 4);
3 G, s" {4 B$ L* i/ a ::memcpy(aPacket + 5, &pCube->nItemNum, 4);
7 t: A0 ?+ [; z. J6 D/ } D2Net::D2SendToServer(9, 0, aPacket);# k7 e% i/ X& ]- B" M& `9 k
return TRUE;/ P( E3 Z9 y& g- T: V% `8 I/ I0 H
% x, t2 V& t' f
}
: M6 p0 _; y- [. ?0 J/ s. o; |2 g; `/ S5 ]% `& N3 p
static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);" k5 n5 W5 s! t; q- e2 S
( k& H; Y; @* | static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存' f0 g, @, C! z" S: }1 I8 n
{
. t1 M. ~3 s& U( _: y% G4 { D2CoordStrc mypst = { NULL };2 y; N, b5 t+ ^: O$ V3 a+ O
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
9 |! x8 e& Y: K# R1 C# ^! z# H
8 Q# Z! H$ H4 y% G- C- C' `9 _ if (!mypst.nX)return FALSE;
; B; k- t1 C: L" h9 {* d: z3 b9 x
, x y9 J ^% g, q# p PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
; M& V& l# n+ L2 O7 s0 f% X7 g/ u% k( u( ]/ \
BYTE aPacket[13] = { 0x20,0 };
8 t3 n- [8 m1 c# y( y ::memcpy(aPacket + 1, &dwItemID, 4);
5 H" y" B; f8 q" m ::memcpy(aPacket + 5, &mypst.nX, 4);+ ^6 F8 E9 X- q! E( ^5 p
::memcpy(aPacket + 9, &mypst.nY, 4);
- i$ O! o1 k, T6 U8 V //return D2Net::D2NetSendPacketToServer(0, aPacket, 13);8 Q/ W6 u& F* ^& @6 c8 D
D2Net::D2SendToServer(13, 0, aPacket);2 H: D* \: n Q( {% c: v! H
return TRUE;
8 P; o4 v1 c$ s$ k# A. r7 X/ ` }% v7 w5 \/ f' ~2 J. ]# I0 C
0 r4 w+ D1 H4 v
static BOOL DropCursorItemToGround()
& X% u* o) r4 D6 L( ^ {
9 j/ h% T, o8 ]4 |( _4 _3 w UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
- d( Y$ ~$ {5 g# L7 r if (!phand)
" _4 V# R' } O' R- [ return FALSE;' o- \* T8 n% o5 Q, a0 u* T9 T
1 n, C0 ?4 B4 R7 v/ } PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);
) D1 N: s0 {6 k: c3 u6 M2 ?3 [
! P) a) B7 O( k& O: } BYTE aPacket[5] = { 0x17 };
' G$ x% t- B* H+ V7 h ::memcpy(aPacket + 1, &phand->nItemNum, 4);
% H1 ?: ?8 k% k' m1 T D2Net::D2SendToServer(5, 0, aPacket); c* Z8 R% @, K' V: a4 i. p; v: {
return TRUE;" [4 Q2 \/ f+ W' [9 \( [" t
- u4 j! s8 Q+ s* y }
+ w0 T7 T! L0 `$ f9 Z2 }# I( j
/ Z" E" q, x2 F5 E7 r( n1 T, \& I static BOOL PickStorageItemToCursor(DWORD dwItemID)
1 [( }- B# q$ W" }8 p% Q n {
# N# |* y8 g0 P, I PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
, D' e) R9 P x3 A$ p9 }0 a# ~3 Q( D; A( L* M
BYTE aPacket[5] = { 0 };9 ~5 ?/ `) }. \
aPacket[0] = 0x19;( v( m1 B$ Q6 n: r. X
::memcpy(aPacket + 1, &dwItemID, 4);+ ~7 l/ W# }1 O- H0 c
//return D2Net::D2NetSendPacketToServer(0, aPacket, 5);
# D, c z# B( J; q6 {6 W R D2Net::D2SendToServer(5, 0, aPacket);8 v% [3 s' q! ~: g8 Q# b4 U
return TRUE;
) B) q9 k6 M8 }0 `* } }# g, B) H. ]0 J
$ Z" G% k% `# M' v# T4 G$ `0 \) `
static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)2 E9 D: E0 y6 I! u7 Y
{: l. u5 g. Z( U! s, s n$ x, }* T
PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick); f) U, c8 J1 S" w
BYTE aPacket[17] = { 0x1f,0 };
. l. ]+ q; G* G$ s; _9 p" D1 j! O) w ::memcpy(aPacket + 1, &ItemID1, 4);
1 W9 R6 y, G2 p( l5 T3 R ::memcpy(aPacket + 5, &ItemID2, 4);0 A; c/ b' I5 Y9 }! A: q* Y, U
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);3 W4 d0 j8 p' W# e
D2Net::D2SendToServer(17, 0, aPacket);0 x1 i. M$ V8 k+ ?$ {
return TRUE;% f: ~4 t+ O2 S; \2 X
}* p4 {8 x+ E( J2 P
% l: X& n5 D# z1 c# F% U static BOOL Transmute()( Y; B' ^* Q' g/ Z- q% G3 D
{4 R; \- D! C$ g
if (!(*D2Client::ptPlayerClient))return FALSE;' i% w$ @# t* W; L* x
6 s$ b, [: Y- O6 D3 d0 I
if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))8 _1 b' \+ q4 h/ ~- @. H: g
return FALSE;
8 s% v6 Z, l; l3 Z; {& B9 i( O, m
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
, B8 a3 i) Y& q( I, g7 J5 d' n BYTE aPacket[7] = { 0 };
7 x2 @ w4 A# U8 Y m9 | aPacket[0] = 0x4f;5 o5 t6 U/ R2 T# G ]+ E0 v& F- l8 K
aPacket[1] = 0x18;
. o# Z& p. q# Z D2Net::D2SendToServer(7, 0, aPacket);
" v# I& i/ L) O. O4 f' v9 }& f return TRUE; [: e2 m3 M# O
}; H K0 D. ]# A! e
};
( O9 f- V4 v* f U8 Y: ?8 q9 U2 _2 w8 B% ^4 P, q4 u' u
|
|