|
|
转载0 G0 G( Y& N9 ]5 x9 m. O1 o
自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:
7 P! e) f u3 `% x! n. M" g7 JD2Client:/ R& O9 ^/ t; D+ y6 R0 J0 q( E
6FB20AE1为拦截输入框(用于获得命令)2 t$ g* ~# G/ F5 z4 F' V+ D' g2 _
6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发
: |3 P1 r/ ]- ?3 w F& i6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发
: ]& Z1 x a" [ g; _, f6FAF4230为hackmap的loop点 我用的hackmap导出位置! O/ w) s" E6 _1 q7 A! ~
. m) {" t' l5 s3 p8 j- n
* S7 p6 `- t: Y4 G% |7 k$ p* h发包函数:
3 h* C$ t1 d5 b& D+ ~class D2PKT_ITEM8 \6 k+ H/ ?" Y0 o8 |7 ^8 \
{# c8 m: ~+ O- u" d
#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上4 a$ w5 F1 j9 r% W( g& N
#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多
& R8 }% q9 N7 f' [# K, p' q m#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上
, d _' a' _9 k3 P0 w' h$ \0 v#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上
1 y" [/ ?4 b0 h* E" n2 N#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH
0 T! t% `% X5 J6 l( ~/ u8 I9 e: l#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上
( H: Q$ ^+ P$ q7 r#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏
1 ?$ K# A( P1 f& L: k3 X j$ t#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上
7 @# e9 d3 q! m#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -
( j6 e. \$ \. x& p7 M8 Y#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店+ z' I/ Z1 O% R2 `+ b$ R1 W" Y
#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV% g* S- s0 E5 G% `
#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道
) W& |/ c* I L# R' ?1 ~# B/ r#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带3 u. i; R" R7 B" K. A
#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上6 S' V4 ]( c0 `( N& `$ W0 J
#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -
1 n6 ?! |, c8 d: O% J$ O9 ~#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上
2 G- R: y# ]* z% y. n#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -
% m. n2 O+ R2 l* U E' I) l
# B% N: j! H: k2 X# l#define PacketItemMaxTick 150+ m- g& F. {6 u" i" f }0 E9 N
#define PacketItemPickUpTick 20& u# b3 t; `; k1 _
9 \8 H+ R9 v$ S! q* p* W& k# _private:( u$ F" Z+ ~6 B2 {
static DWORD _PKTItemTick;
5 _2 @ w( T( j5 s8 r; v static DWORD _PKTItemAction;9 V+ t4 U' `, d. J8 g
static DWORD _PKTItemID;
9 G9 u$ t- z: U2 u0 \3 X static BYTE _PKTPKTType;
) t- o9 b8 F- r& ?9 Mpublic:! k. A8 q- V3 n! D+ k+ t# S
static DWORD PKTItemGetTick() { return _PKTItemTick; }& j& Y0 _7 F9 O
* F& ` I& r" r, {7 j$ ~* L
static void PKTItemRelease() " u: t- h* l) R0 o( V1 m! ?' h
{% }- q4 J/ l) d2 a& H( r8 T* |
_PKTItemTick = 0;) i- O0 p3 v& l- q+ H6 f& G, z
_PKTItemAction = 0;2 T- m& P5 T m& N! z
_PKTItemID = 0;. F1 ^2 _- N6 d1 F" ^# ^) `
_PKTPKTType = 0;) h; r" g) E7 @/ j+ m- t
}
5 S+ O# S7 Z9 n! n4 B4 ^; i
% D9 j$ v9 e9 B- E0 r static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick)
0 i0 i# |% R6 A {' M& ^- T5 Y6 \2 x
_PKTPKTType = aPacket0;
1 Z5 @ M, k3 e2 G& L! Z8 Y5 Q _PKTItemTick = tick;
4 d7 G; O! q4 |( v, q5 q% K9 O, ` _PKTItemAction = ItemAction;+ b) q- \$ E5 R6 Y, T5 K
_PKTItemID = dwItemID;
0 ?1 f% v# @" d8 C1 e }* s; y2 {9 `) o1 ]0 r- r- f9 l) l
% I) P, D+ h6 @0 Z: X4 {* u static void PKTItemTellW8(DWORD tick)
; q, X: e) h! C# G( d, Q {
3 p' U0 T1 m/ D8 v+ O _PKTItemTick = tick;
+ R( w- v, Z+ J1 i$ y }+ _6 n- e: [/ m& Q2 ?+ z
9 t. T# Q( R& ^& _4 _9 G W. n static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor* V: b5 {/ Z; l6 c$ Q
{5 l3 _3 k/ |) l9 \* i
if (aLength >= 8)
* p) \% X" @! _& u- b4 ~ {, m) m% Z8 ?$ J1 q* u0 w
DWORD dwItemId = 0;# R- _* j* `, C7 K% e
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
" Y7 F: o( `% b; D. n0 n/ N if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE
/ n- m. s3 ^6 m2 p6 H && _PKTItemAction == ITEM_ACTION_TO_STORAGE
, g# y( Y7 U6 ^ R, \: {( } && _PKTPKTType == PACKET_NEWITEM
7 [/ \! ^0 u! O )8 t6 X: b! i# g/ ]
{, I+ W) k" D! ?/ i) i) D
if (_PKTItemID == 0 && _PKTItemTick)
{: s) l7 \8 D7 S9 d {
# ~# r- x5 ^2 k5 f1 z PKTItemRelease();
! K3 ^( \, F; M5 E# w8 M( W }
. X2 d+ |. R; q+ R4 B3 g+ c else if(_PKTItemID== dwItemId&& _PKTItemTick)) r8 f% E$ Q- G$ j
{( M6 ]4 ~' X6 _* N- j
PKTItemRelease();. _1 S0 u% |+ _9 `5 Z" Y
}3 d9 ^7 B/ V; ?7 j
}3 u, { g- V' u
9 k' f4 P1 x' T3 A }2 c. L9 s2 H0 w5 o
}8 Z: C0 ^+ i4 n% p# a
4 |8 J+ c0 m7 F1 O static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored
+ n+ j3 B! _; ^& D5 Y {
7 g% z6 R; i, G3 B- q if (aLength >= 8)
. |- S3 p- V$ o+ n' G0 B {/ x& L6 K+ v3 z1 c
DWORD dwItemId = 0;
/ C7 R& U7 c4 L# d memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
3 M; b% Y. a% z if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE5 r b& y! I1 \4 S5 h# B( K
&& _PKTItemAction == ITEM_ACTION_FROM_STORAGE
- v* w! m3 Z$ h- C# e* v+ } && _PKTPKTType == PACKET_ITEMACTION; c/ T H9 c: P% N! z
)
& q& ? ^0 X& w( C {
: E$ Q9 u+ w. g: L! f$ n if (dwItemId == 0 && _PKTItemTick)
" \5 t$ m$ G5 w. z- c- _( Q# r! d {8 J4 m" Y! w# K" j4 i5 R q! Q
PKTItemRelease();
- u0 c8 }% b- s+ S6 [ }
! L3 p) x7 _8 l. }- a1 J; [9 @ else if (dwItemId == _PKTItemID && _PKTItemTick)/ L' P9 z8 X0 b Z
{
* [& p2 M4 d3 b' ~) d2 C8 j+ w! h5 h PKTItemRelease();
* `. N) ^# E) a }! P0 Y }
8 T, G( i3 J: r4 E" k }: R" j- X2 B" j+ H; \
! j/ u3 F# P6 I. `3 Y7 g2 j' R
}
( b. g8 e0 M# k1 z( T7 C* X; k }) u' K5 L/ E( c" \
. h0 B$ r" h' Q. {- W- \ static void PKTItemGameLoop()4 w- D) f" Q m% b1 {
{
* A: o4 ^% m+ H9 y- S/ J if (_PKTItemTick > 0)* |- W# P; s% {( c" t+ ~% S+ h6 s
_PKTItemTick--;
3 r6 ?0 r4 Y5 R* m/ @8 `* v9 Y else if (_PKTItemTick == 0)! b N2 u8 D* Z# H
PKTItemRelease();
1 Y+ B1 j( h* O' [' X: E }
6 d' | Y, U. o1 \; t+ N1 R7 e% X/ j, Z1 E0 S
static BOOL PKTItemCando()
) L5 _2 P/ }! U6 e {
# M' n' S \% T: T if (_PKTItemTick == 0)return TRUE;
. Z! i. v1 z$ c$ R* b return FALSE;
% k9 }+ L' Q. W8 e) J$ W3 F }& ?0 Y" k* d5 G, k8 @
+ C; F; y7 |$ z | static BOOL BuyItem(DWORD ItemID, DWORD npcid)
+ Y5 U& P8 B; Y8 I% _ {7 K5 q7 }* E1 W( F; @1 \, i
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
" C5 s# e( T5 ]6 K5 X BYTE aPacket[17] = { 0 };- I9 d2 E" H- a
aPacket[0] = 0x32;+ _3 @" u k7 @1 D
::memcpy(&aPacket[1], &npcid, 4);
$ \0 E. d) G! {$ ^' T1 d" i3 } ::memcpy(&aPacket[5], &ItemID, 4); R: N7 e; ~ b7 v6 N+ K
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);7 V8 \+ v0 H' S6 d4 I
D2Net::D2SendToServer(17, 0, aPacket);' Q) G# N! J V( M! t6 r
return TRUE;8 B) B9 z( ?& W8 j' J3 [; H! ~- Q1 W
}4 ]6 m% Q) q* R7 r) ?
) s7 R: Z3 V) X& t2 f
static BOOL SellItem(DWORD ItemID, DWORD npcid)2 Q0 Z5 E/ C5 H5 n
{; l, J" O& A2 N8 o: e- m) B
PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick); E' r* f P( S* E3 P; ]# @ E' g
BYTE aPacket[17] = { 0 };) A! m! f. L1 T; }3 B/ Z
aPacket[0] = 0x33;4 N4 X( y4 z3 G9 G9 a! v4 ]
::memcpy(&aPacket[1], &npcid, 4);
: H R" z5 E9 d& { ::memcpy(&aPacket[5], &ItemID, 4);4 M- o) {, |( l3 y, E7 i
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);4 U! k. @! c. M4 r F9 ?# T4 T
D2Net::D2SendToServer(17, 0, aPacket);
9 X: h7 p7 y X# Z1 ? return TRUE;
! `/ P0 b+ Z; x2 b5 q( d }4 ?& z( C' {" y
- b# ]7 u# a7 h0 x% K) ~ static BOOL Interact(DWORD nUnitId, DWORD nUnitType);
' C7 h5 B7 l( f+ L1 y0 f O, N9 l) U* X }$ R1 R+ y
static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);3 e2 C$ i5 Q7 d; H3 I" j. ~& Q
/ }6 s2 {, k7 _7 N. b3 E static BOOL OpenCube()
, u. }4 Y$ m& l' ^1 p' |: I! K; c0 | { }1 t# f! Q6 `7 A4 q; U( V; ?
if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;
. q0 F4 |( @ K$ e" t# i, Y4 U3 u3 R# @# D
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
. I: k5 C! {9 F if (!pCube)' j. U. B) j7 j E8 ~; f
{& P& C$ Q# V6 Q7 g2 c' Y- A: c3 Z
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);- g9 W0 r* N6 c: w, o( Y `7 N
if (!pCube)
2 |# B4 H2 M2 v2 r( ] return FALSE;
. Y5 k% C! g" U3 d2 R; p% p. Q }
" }/ f2 ?- S$ K/ h+ V3 i, ? PKTItemTellW8(PacketItemMaxTick);: O4 q$ E. M$ W2 u0 r9 A8 r
; J2 o7 R* V4 M" f D2CoordStrc mypst = { NULL }; s, ~( }3 z& y6 d! r5 c( U3 }
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);6 |1 M1 F; o; w- H$ b
; A; p" q D" x BYTE aPacket[13] = { 0x20,0 };! y4 m# ]9 v: {$ t0 p7 X
::memcpy(aPacket + 1, &pCube->nItemNum, 4);1 s1 t0 C3 c8 }- g8 C r6 ?( c
::memcpy(aPacket + 5, &(mypst.nX), 4);( G h8 I' D) W
::memcpy(aPacket + 9, &(mypst.nY), 4);
o" `; k1 m9 S5 O6 h! |' I D2Net::D2SendToServer(13, 0, aPacket);
! F8 ?& N* R+ A. Q2 T return TRUE; C5 O6 e4 H2 j0 d4 `% G
}
6 e: m" v3 v7 J8 r. i4 S
B* ?/ R' o5 g" [: ^) j* M' b7 m static BOOL ToInvxy(DWORD x, DWORD y)
! `9 W! V% Z$ j {
" N/ `! ~" w0 Z. r8 O5 z UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
/ ]2 u3 ~8 R4 w8 }" j0 E
2 ^9 l9 n H, h2 m5 S if (phand == NULL) b/ S' S' j2 ?9 ]% \. n
return FALSE;
: l0 Q8 G! B" i/ v1 J
! h% J, z% k3 e' E PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
% ]% n: H& ~% y( ]# w6 O
$ ?/ D1 I" G5 ^+ D8 U) w7 a6 E BYTE aPacket[17] = { 0x18,0 };
+ m, i }8 C s% ?" q. D' U4 s/ s ::memcpy(aPacket + 1, &phand->nItemNum, 4);- O! ^3 A( \/ x$ B i
::memcpy(aPacket + 5, &x, 4);
0 }5 D1 o5 X0 i2 w ::memcpy(aPacket + 9, &y, 4);
% P7 ?( `) d& \' U) V$ L4 a D2Net::D2SendToServer(17, 0, aPacket);8 z7 c# h3 ?$ x; M. p* c/ S0 }
return TRUE;5 V) H* O8 P& [% Z; B% `* K
}0 |$ [5 }2 v/ b3 K' |* s4 w
. }, o, a" E, I$ S* u
static BOOL ToInvRandom(BOOL bBagFix = FALSE)
% _& y* [1 f3 o& F) B {% m# s( @2 G# l I% p* S
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);# }2 Q1 i4 d _. _, \
if (!phand)" _: i2 v/ b% T: m, U4 a: V9 V
return FALSE;
" J/ |, q# m0 w, n. z int desx = 0;5 d- i1 k+ \8 _. @- F
int desy = 0;
6 B4 \; c3 Q! g if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))
- H+ a+ L, H6 K$ ]+ X3 B3 X2 V5 A, x {
0 E$ B5 y! @" [5 i; R7 | ToInvxy(desx, desy);
b# d( }, M% r" `5 h return TRUE;
" d3 B2 z7 o6 i" a! z }$ M, R, q" p% S B% w/ Y4 m
return FALSE;
' J. W, g( _# _1 {5 t' Q/ A }9 ~6 x. k! Z L H3 B8 C) N0 q
3 }8 a+ }$ T& J6 }7 ~5 S& H# Z3 H. J
static BOOL ToCube()) B2 N& B! r0 j6 L( j1 T
{
1 y. n( \' x w$ x: ~( s if (!(*D2Client::ptPlayerClient))return FALSE;
0 r a. t; F" V
# W7 |8 [% w/ A6 R, i7 f UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
/ {( `. P1 V( n if (!phand)return FALSE;. D* K5 b: @% {3 ^7 J2 R N2 O6 Q0 j
9 k5 D+ Q: |, y2 ]) ]( e5 i* ~ UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块% N: ]; w* T* a/ M3 u
if (!pCube)
4 H2 l7 _% H+ `8 b7 u& D/ } M {: `6 U0 |4 f) J9 ` k
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块
. N# [( T$ j* h' K D' W0 h if (!pCube || !pCube->nItemNum)8 \# C: o% b; Z3 u0 M
return FALSE;
8 q6 A! W- u! V }
2 Z- `) D& B" X L' F7 i% H8 D7 n
: B1 J h( ?- B* {2 v& q, x, r if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))
( c' s$ c8 c, b return FALSE;4 J1 |/ ^2 _. i
# o( ~# _" U" H# W: I- J PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
, L' C' S" t- U1 C, n- p0 \$ f% ^( o( t
BYTE aPacket[9] = { 0x2A,0 };
. G. ]& W; W! Y5 r/ a ::memcpy(aPacket + 1, &phand->nItemNum, 4);& B; z, v4 l& o
::memcpy(aPacket + 5, &pCube->nItemNum, 4); z B: {, ?( _+ `8 Q+ w6 T
D2Net::D2SendToServer(9, 0, aPacket);% S- f' G- S; K
return TRUE;
0 X% }$ g9 t; I" d- b* [1 I9 R; M6 x8 G. s* q' }. c
}
$ |( n! G7 {% U/ P6 e' f* z6 K3 a$ T! s" p
static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);. m, \1 k' L2 q ^
( _* H9 Z* |2 p static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存
$ X2 x& E1 ~+ r& @# E p* `/ W {
' R! z; }1 S- Q- L7 q D2CoordStrc mypst = { NULL };
( i" r# @3 g! e" n% x/ s8 o$ ? D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);: V( E- B! }* \8 @
& v3 K! c1 D8 B8 G' m d
if (!mypst.nX)return FALSE;! Z) [# E+ m+ v: i5 r9 g0 f
# B& h8 I0 l& H0 J PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);; l* W( }. f* n! W" u
1 o7 g$ {8 x8 }+ ]/ z8 f2 J$ Q# w' j5 Y BYTE aPacket[13] = { 0x20,0 };! {. ^# `6 C! |7 D6 f6 O" p
::memcpy(aPacket + 1, &dwItemID, 4);
7 C4 n9 O3 Y0 l% ^ ::memcpy(aPacket + 5, &mypst.nX, 4);1 p7 B+ ?5 s! r/ D
::memcpy(aPacket + 9, &mypst.nY, 4);2 {" I- L' \( t Q3 d
//return D2Net::D2NetSendPacketToServer(0, aPacket, 13);
+ g2 k$ Y. t! M% \% W# ^9 q D2Net::D2SendToServer(13, 0, aPacket);
, S+ L0 Q- b6 m6 i2 ?( K return TRUE;6 C q2 f/ W4 W8 ?& S! C
}
# N0 N" @: a+ ?+ x6 Y. N( N
+ ]" G6 s; \& g/ u! D static BOOL DropCursorItemToGround()
2 c& c% b8 |& _1 h {# }( ^+ F9 ^' L: j
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory); @: Y* U& n ?6 ~5 z* I' K2 L
if (!phand)
# x; G1 ~. A) r return FALSE;
H5 O) b4 _$ D, I0 i) e2 \
8 P0 W$ z) y- [! H' L$ o F PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);
& G" {; V1 g ~
: G2 i! r+ d. i3 Q# L3 g BYTE aPacket[5] = { 0x17 };; |* t" v& t1 z- t, R& U, d
::memcpy(aPacket + 1, &phand->nItemNum, 4);- u8 t3 _2 t3 \: T( ^1 |9 F- V% i" n
D2Net::D2SendToServer(5, 0, aPacket);8 _5 w. r% _6 W
return TRUE;
% S1 E; i1 Q/ j
; c t! s8 i7 M. b: d" L }
; }0 E. u: a3 T5 `# q6 w+ ?
. ~( N/ d$ F. s7 {* A7 y. F1 m static BOOL PickStorageItemToCursor(DWORD dwItemID)
" S8 a/ B8 \) l5 g7 y {
8 I! k% ?. @+ j& \ PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
( _0 C- ~( q$ ]$ i' e' P
( ~3 b/ A5 v+ d& P$ y' c BYTE aPacket[5] = { 0 };7 s/ G% X, v6 _; E
aPacket[0] = 0x19;$ i/ W! T7 Q0 l6 v/ ]8 m
::memcpy(aPacket + 1, &dwItemID, 4);
+ P5 a4 m! U* [! W0 H //return D2Net::D2NetSendPacketToServer(0, aPacket, 5);, C) K- P: {, I' k T
D2Net::D2SendToServer(5, 0, aPacket);; _ _" R/ e$ _- {( F* F- r
return TRUE;
* u. u, w. X3 a# ?- Y% @' G9 S }
# x: M" D# X1 N& E
# _! o& u# z5 h% q' j0 d; g static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)
' }0 F# f3 |5 `: O z {6 E8 y- Y- c1 m4 H
PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
7 p3 |: I/ c$ c7 e% Z BYTE aPacket[17] = { 0x1f,0 };- w: m6 b$ S) a4 o% Z% R! t: _/ E! Q: v
::memcpy(aPacket + 1, &ItemID1, 4);
! v1 l# ^7 F3 @- B ::memcpy(aPacket + 5, &ItemID2, 4);- H5 c- Y, j9 J" Q0 d
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
: ]) i; V, a# ^1 ] D2Net::D2SendToServer(17, 0, aPacket);( d/ e( E5 e; I" B0 P
return TRUE;
- K7 n; S% ^$ [4 z7 A" r' c [ }" F* {' B# \; l
/ `# K7 c. h |, I0 F static BOOL Transmute()) C5 b3 Z1 h2 \3 a
{
0 G; Y, x* a! | if (!(*D2Client::ptPlayerClient))return FALSE;8 ?( e1 G4 J, ?: I. I' N$ {
6 U4 t9 z/ h/ P7 ~ if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))! b8 }4 J% O( h# T( @
return FALSE;3 u) [$ r/ o! B* |& x
7 S% Q+ \' x d2 c9 y8 D/ S
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
/ n* S! o) _) q# l2 k/ k BYTE aPacket[7] = { 0 };- }7 _2 |# a- t2 x) G+ I) j
aPacket[0] = 0x4f;
9 }) F: X9 o+ J. I6 e0 W" r+ q' `* x aPacket[1] = 0x18;, H+ x& [2 D3 i, |$ E: J; q8 C
D2Net::D2SendToServer(7, 0, aPacket);
. B$ ?* L% q% G. b6 q; [- B6 e return TRUE;' M ?" N# v- J# j4 m
}
. O7 Y# Z h+ ~ Q4 s5 s; M};& H" }/ A0 D6 ~( ^
* V$ ~' c# m, e& g) n0 c! j u: w+ t
|
|