|
|
转载- ^8 J3 C$ \, h9 P3 C
自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:' \# D1 a/ h( g2 t. t/ F
D2Client:
) S# N' \# B+ U6FB20AE1为拦截输入框(用于获得命令)
" ], Z- o3 ]! s# M) _; R$ o6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发
; Q l1 _. g3 k. t0 ~ j6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发
. {, j( _' R1 ^9 Z- r6FAF4230为hackmap的loop点 我用的hackmap导出位置1 D* M" w2 i0 C! D4 B
0 I* P& o$ S6 \9 X4 Q" y1 u- G5 j" F. M; X3 r& `
发包函数:, ^! A: C, P& _: k) X4 W: S" h
class D2PKT_ITEM p J) m5 {. s5 Z V1 u+ L
{& V( X6 u2 ~+ B1 [: @: Q
#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上+ Y$ l( Y" D6 E4 k. u
#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多/ Z( R* V; s- w( i2 F$ f
#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上0 y% q0 Q! w& J' D: q" X/ B9 {6 I
#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上. ~* T1 D# x4 g7 }
#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH
3 g; O( B0 E/ l% K$ @1 F' C3 Y2 N& z#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上
, V) i' Q4 n) D% M+ d. o( S+ G#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏. k9 A+ i0 u$ v6 u# Z0 Q
#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上+ m3 [# U& i. g% n
#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -
; C/ n* P) N" v6 R# x; o! Z#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店3 h. G" s/ ^: j* O: s/ B
#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV$ L. H, S( ~+ T" `3 C( V6 @3 a
#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道 ) X: c( P d' X. w. ~; M( N
#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带+ U) _& [ w0 z Z5 H( _
#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上
' c0 S$ x: {, r. ` X2 J) p5 e: {#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -
! K0 V( R+ _7 o8 |#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上
+ c4 |8 c; L' w ]- F0 K; Z#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -
: _/ ~/ Y8 M( U `& u: u- i* }5 C/ p' Z, R' Q0 F
#define PacketItemMaxTick 150; Q0 c# t1 \7 [& t9 Y
#define PacketItemPickUpTick 206 u5 G4 X. `2 F" _+ p/ o
' k' @* v: G9 F+ ~& F: g) W* P% ~private:
4 y! c$ C3 H$ M4 M6 Z; { static DWORD _PKTItemTick;
" H. e k2 x7 ]1 z/ w$ N static DWORD _PKTItemAction;+ C3 |9 \+ _% A0 f- v2 n
static DWORD _PKTItemID;" Z' N; j( U2 t) T
static BYTE _PKTPKTType;4 W7 o9 P3 k& L J
public:# a3 ~3 X% \7 k* `
static DWORD PKTItemGetTick() { return _PKTItemTick; }
* H; h) p8 i/ o8 Q t
7 o* Q( ~4 @$ ~5 L6 h static void PKTItemRelease() 8 J+ g6 p1 E R- Z& Q4 b6 t
{. C* a: T3 A- r3 k) H) [; i5 J
_PKTItemTick = 0;0 I9 h4 K9 w x. a, v% M
_PKTItemAction = 0;7 u% K2 r% Z& Y0 k8 [ |1 r1 j
_PKTItemID = 0;, q+ N7 a$ h3 j$ ^
_PKTPKTType = 0;$ ^1 R+ |% S8 v
}2 o; W+ X% i4 V7 [( x2 O9 ^
g. L4 ~* ?# U$ e1 E% m/ B
static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick)
. f) T- ]' @6 c8 n* q+ {# { {0 n, ?8 U( \: ?& U6 N" M9 ~
_PKTPKTType = aPacket0;
6 m$ H0 ]% Q0 _4 u- J _PKTItemTick = tick;% w+ h2 U( \; g6 ~ k& h% E3 P
_PKTItemAction = ItemAction;" a! {; X3 y/ `6 \6 f$ y0 O" r. m
_PKTItemID = dwItemID;
" p% Q3 s% h* d: T% l }
9 ^2 [: Y4 O& u' `& b
+ L- `% F' C" l1 E static void PKTItemTellW8(DWORD tick). d9 U0 p* d6 T9 |
{
8 N9 H1 F* j" d6 B- E' z( n _PKTItemTick = tick;+ G( B( l& g: U. ]: w7 |
}
# B1 D4 s: i2 _- H# j8 ?! O( p F. V7 W# x8 ?5 g' t
static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor
$ |* l3 X9 U* ^4 u- V9 J3 {, x {( d0 k& L! G; p5 D7 F
if (aLength >= 8)) o3 J" Q/ l( s' [7 B
{
) t7 }) Z! N/ j. e4 e3 V/ l* ? DWORD dwItemId = 0;
( t9 ^1 R# D" s' m4 [; a& }* E2 x2 W memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));3 T! I. u. q5 K4 U- t, X% ~
if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE0 ?, A( @6 J# y
&& _PKTItemAction == ITEM_ACTION_TO_STORAGE l9 h3 |% Q7 ^! G# ]
&& _PKTPKTType == PACKET_NEWITEM! M: |0 q' I% F* a# o( \
)
9 i4 w' ^0 U8 Q4 e- _: o {6 \ z' \0 a; U1 l# R' K ?0 [7 s
if (_PKTItemID == 0 && _PKTItemTick)! F/ p3 X* O1 Q- a8 a
{
. Y; E9 j+ w4 x0 l& N# T' h PKTItemRelease();8 r( O p+ {: x6 f: @* K* W
} Y( w4 h( Z- L% n
else if(_PKTItemID== dwItemId&& _PKTItemTick)* K9 S4 b+ b- K$ Q7 m. |
{( W3 b7 o8 m, F/ o, [
PKTItemRelease();
4 n1 O% I% D/ y* e }
4 K; f. {, j; I7 O, I5 G/ o }: w; t! x( v F" w9 I2 y) F) t
" G9 U4 w& }4 B/ g" c. g( B } S$ m/ B, D8 Q6 d0 d, m( @
}
' F V/ A' I$ r) }4 x2 W# z3 w( A1 m$ y; ?; f2 K) {, i, K
static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored
; u6 P% ^% i) [! R5 ?. A {
; M- F) ]. u8 n8 f if (aLength >= 8)4 X+ k$ K- e& t% Q: [
{8 S- D4 i* z# D3 i' r1 Z( l
DWORD dwItemId = 0;
+ x% ^7 o# H p( L memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
9 j* l8 y/ d7 `; q# V$ \ if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE5 a6 \9 ~" j) B( s
&& _PKTItemAction == ITEM_ACTION_FROM_STORAGE0 h( `9 S' t$ _0 y$ J
&& _PKTPKTType == PACKET_ITEMACTION
8 _/ z- e. `$ ?: l )
) w6 p: _5 z8 j. r' } {- c9 R0 R5 }. e, |: i* W" w9 C2 P
if (dwItemId == 0 && _PKTItemTick)2 T3 [8 G+ o3 s7 v8 X# b" t1 k
{# h6 g5 B/ Q0 G- b o, {; z
PKTItemRelease();' [ k0 _9 h8 d- H; z+ j M. _/ H
}; N4 y c' J8 U/ q) a* l1 i7 i
else if (dwItemId == _PKTItemID && _PKTItemTick)
+ A* U/ h- U+ n0 u" `( Z9 ~- M {
( o' r7 l* C2 \% Z PKTItemRelease();
6 Z. U$ i. k) S( n8 K* [; D' K }
6 b( O* d6 Y2 v4 e" L; K }9 o, Z5 ? s- @( {
0 c1 @5 _) e/ c, u }
& o3 T' M3 m/ A% v) A! m+ D }: }+ [ l0 B$ f/ V
! g- ^7 C; E8 w( b/ t3 L static void PKTItemGameLoop()8 x6 c+ W1 }) j- g
{
# _; |" {0 _4 i: q if (_PKTItemTick > 0)* x! {5 ]& l% A) F8 o# l4 \
_PKTItemTick--;
* S c: x; P# Y; B+ ~8 N else if (_PKTItemTick == 0)
$ j9 o) b5 u2 @ PKTItemRelease();
5 i! H: O e/ |- Q }
( u: _$ g! X$ ^* |3 ?3 d B4 o! f: \/ \2 X5 o" ]. ?( Z
static BOOL PKTItemCando()
7 n$ |: f' I# `6 X, e { \: p9 w# Y* ^! L1 K" n* K8 {9 G
if (_PKTItemTick == 0)return TRUE;
9 r; w d8 \. H return FALSE;9 k5 o0 ]* X- K5 V
}
8 I: X; h; A. f+ J+ \0 T
! B$ m" n2 T; i static BOOL BuyItem(DWORD ItemID, DWORD npcid): Z# h# v8 @" |6 S/ R& e- p
{
. u8 o: l6 C! ` V PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
: O! h b9 C |& E BYTE aPacket[17] = { 0 };/ f; C. C) f4 ]% @" ^+ {8 `
aPacket[0] = 0x32;" a- {1 d" t- A2 J
::memcpy(&aPacket[1], &npcid, 4);
8 e" n! A) B% ^2 n5 T S { ::memcpy(&aPacket[5], &ItemID, 4);
( O' E# b1 ^# v8 P //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);3 F' F8 A. c- |$ n- `
D2Net::D2SendToServer(17, 0, aPacket);8 L9 v" o& A1 X! `% B' o: I
return TRUE;
& @0 a7 ?7 _" [& W0 V }4 Z% R' x+ q7 l$ m* l! t
. P7 N; M4 m8 n. @/ t static BOOL SellItem(DWORD ItemID, DWORD npcid)
5 M8 F5 G, H: z9 e/ l& ^ E {$ [1 u, `+ Q& K f/ P
PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);+ z% ?; j% B7 k! T
BYTE aPacket[17] = { 0 };
& S: S. f1 I' a6 Z$ H. \. p aPacket[0] = 0x33;
" T/ D. j _" h6 |4 P ::memcpy(&aPacket[1], &npcid, 4);! S8 n, L9 N% x9 E% V! w7 V9 ~$ k
::memcpy(&aPacket[5], &ItemID, 4);
9 H. M2 ?- Y* } [! ^6 k //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);1 X0 K( G' r" j' `
D2Net::D2SendToServer(17, 0, aPacket);
8 T6 x% q' |. o9 x$ R return TRUE;* [' z; J9 V! g4 O% J
}
6 z0 s2 ]7 n- U- W3 c( M, D5 ~3 \2 g* ]* |+ B+ f* c4 z6 v
static BOOL Interact(DWORD nUnitId, DWORD nUnitType);- A& P5 A }/ u6 y0 T
5 f h1 w0 f- f6 V- [
static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);
* |- l1 E2 y" P3 f* y2 A- X+ A8 X2 n" \6 x
static BOOL OpenCube()
4 T- X% a& p, }$ |3 x$ V {
, S# U5 L, i2 _! V if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;
4 M, ?* B; }* V$ }& N
/ h; ~( Y {3 h2 z N( m UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
$ s( v/ C. Y' ? if (!pCube)" y# i7 ^- L2 ]$ n/ U6 n8 M
{# L {2 d6 M" X" i$ ^* j5 o$ O
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
6 U9 v) B- e5 {; ` if (!pCube)
# G. n! t. m; }/ l" p+ _6 h7 \) F return FALSE;1 i- D6 j' X. C' @6 D U
}$ c( a" i% q, q/ \6 L
PKTItemTellW8(PacketItemMaxTick);
3 Z: h" [/ }+ w- E' U& H/ S# |% J9 [/ Q, p, A* H
D2CoordStrc mypst = { NULL };) `, v" X/ m, ]
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
3 ~1 j, s2 ~1 h( [4 k2 n
5 _' n0 N' a% r1 p0 s+ s6 r/ c BYTE aPacket[13] = { 0x20,0 };3 c1 t* Y* n# M5 F) _1 o
::memcpy(aPacket + 1, &pCube->nItemNum, 4);! j/ \) ~6 `& U
::memcpy(aPacket + 5, &(mypst.nX), 4);
4 V5 W% K, b# N* o( U( t( ] ::memcpy(aPacket + 9, &(mypst.nY), 4);2 U* h% Y4 X& z4 \- [4 E7 Y" m
D2Net::D2SendToServer(13, 0, aPacket);
6 L: `/ h; ^/ ]" G( G return TRUE;: B6 V1 w! @6 v. k/ }
}
2 M8 |2 f) I$ L/ r7 X( d; u, |% [9 B! }9 F+ Z
static BOOL ToInvxy(DWORD x, DWORD y)
- w% |' j, a6 e5 v5 e {; T* F, @( R+ p6 k4 P6 a: Z* w p% l" Q/ q
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
7 }: q5 t5 N e" N0 u
5 g) e4 P" j# |5 Z. j if (phand == NULL)
1 v8 \+ ~- ~3 W; l' X0 s3 N8 D return FALSE;
0 N: E, A K6 K* H6 U* w& q, `; B7 \, ?& v0 P
PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
3 Q4 a8 r( l* \! m# N! w: y3 T. w
6 y& f$ j# S0 C; B3 N BYTE aPacket[17] = { 0x18,0 };
$ m3 o% v0 o2 u/ N ::memcpy(aPacket + 1, &phand->nItemNum, 4);9 B. _8 @# }+ ]- m/ m" |
::memcpy(aPacket + 5, &x, 4);
$ Y+ V: X- r7 U7 y+ n( p ::memcpy(aPacket + 9, &y, 4);
( c0 O4 h s+ u" e D2Net::D2SendToServer(17, 0, aPacket);! R/ h& O+ j( K, U' w
return TRUE;4 D; _* r, o6 A! }' n' |0 y R3 F7 I
}
. R. W2 i8 w6 J( z- {
& h, }* Q M+ b p: P, U static BOOL ToInvRandom(BOOL bBagFix = FALSE)
2 s( O8 C' F" M L3 l7 J {8 D7 D0 z' w- j) U
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
0 l. }8 J$ v, E if (!phand)7 I* t9 e& I& F; o2 c
return FALSE;
5 V8 |3 j. Q% Q! L- c$ F2 Z int desx = 0;
" _- p0 F6 M5 w$ v% w. X, p% G4 I E int desy = 0;! u( Q6 A, B( C2 y# q& V
if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))3 u# | o C! o2 |6 U; g
{9 n; [; c7 K& v" s0 @8 F5 c, g
ToInvxy(desx, desy); j. M7 r# k6 J9 p9 Y2 P
return TRUE;
* ~7 e. H8 f/ u' L$ I1 d8 l) g0 o }& S0 `3 D/ M3 ~
return FALSE;1 @9 r- ^2 N# J: |) l, ]
}+ t. P [2 w, e. r
' f$ t+ { s0 q+ P# i& ?" H3 t2 s4 \ static BOOL ToCube()- X3 {% J3 U6 U# s7 }
{
" H& q- T1 [. k if (!(*D2Client::ptPlayerClient))return FALSE;
, Y q- G/ a1 e$ _) e; E3 r+ N7 U, S0 N j1 F% ~2 d
UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
+ Q: ^$ d. e5 I) O* \ if (!phand)return FALSE;
- O$ P3 _; T" }6 h$ N9 ?5 W& e x* _3 g5 W
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块
0 V1 ?+ f5 X; q& q/ \+ O4 V! v f, w if (!pCube)6 h* @) }7 v2 L D$ r- ]
{
( w! M+ N5 q/ }2 K6 l& A pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块
1 R5 T4 u" z/ }! M5 @ if (!pCube || !pCube->nItemNum)$ V% u- K4 B! t2 w9 }, T) X
return FALSE;$ g# k4 N% D9 b) V$ _ _ R) N3 M9 b
}
1 t3 W( `3 ]' i# u
) q, H6 o9 u* F! L% g if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))( J2 q( ?' X2 O6 L
return FALSE;
$ S5 I9 p5 R! i! g1 S
$ _ E$ z( b! x+ O3 t: m PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);+ _% z+ [/ p! U5 T* d0 p, N
6 G- l2 {$ o# |( l1 m& u5 V: i+ y
BYTE aPacket[9] = { 0x2A,0 };: Z& G2 N0 J- `$ H1 L$ k
::memcpy(aPacket + 1, &phand->nItemNum, 4);
: \, U: r# j/ M4 C9 C ::memcpy(aPacket + 5, &pCube->nItemNum, 4);
2 L: t- f: |0 h v! `1 H D2Net::D2SendToServer(9, 0, aPacket);) `9 u0 W- l# M& q# E9 c- P k9 l2 @
return TRUE; [: f. E6 a- H3 ]2 a
4 q) Z Z8 r4 e5 o$ x }
% t/ J- u2 q) ~! E" e o' l/ `5 }. o: e5 c* D. j. K
static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);; o/ v Y/ e9 i( ~
- q# r- E7 }( ~) e* P, U static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存
3 n5 N. X0 t6 q% `# `& O {- e1 b" z4 A8 v( N7 z6 J+ o3 a
D2CoordStrc mypst = { NULL };9 B( L$ R, `; h& }
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);; s& s; ]3 V V4 p! h& A
) r' n) f! P! R; y! ~
if (!mypst.nX)return FALSE;
7 b+ U, N; O. t; k7 I( E+ h3 B ; Z0 E; `$ G: H f# U1 z2 O
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
. O( l# d; q4 w& P, z
3 _. D( j9 N5 k! ?7 h BYTE aPacket[13] = { 0x20,0 };$ A/ Y- `( _- A5 ]% ^
::memcpy(aPacket + 1, &dwItemID, 4);
0 {+ U+ U$ I6 }+ G ::memcpy(aPacket + 5, &mypst.nX, 4);4 |& O. e4 {" o: k! }3 h
::memcpy(aPacket + 9, &mypst.nY, 4);$ o ^7 h$ D7 ~0 G/ s" p
//return D2Net::D2NetSendPacketToServer(0, aPacket, 13);
1 V* I- R3 i k8 F6 r D2Net::D2SendToServer(13, 0, aPacket);: y& d( u# p. w. u- g
return TRUE;! K: O5 b8 J; s J; A" w
}
2 E7 ?4 j, R, G0 T. s8 |5 o4 K7 F" n
static BOOL DropCursorItemToGround() M" ?# P, i; `4 v( @/ b$ z6 x
{2 T5 Q) i0 ^0 W, D6 T/ p7 Q
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
8 k l9 l6 _/ Z! L if (!phand)
1 E( M8 F( H) S! ? return FALSE;
) H' r7 a" @7 Z8 g0 Q4 I2 C- D) X7 U, ^* _
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);! A5 |! @: t+ X& B0 f( X, V$ L# @
2 B2 F1 o1 q! _ BYTE aPacket[5] = { 0x17 };- Y& X+ h+ W/ }1 t" V
::memcpy(aPacket + 1, &phand->nItemNum, 4);0 M% L0 q, ^2 |% @9 o$ b
D2Net::D2SendToServer(5, 0, aPacket);
- n+ G$ u( i# k return TRUE;) O* L# Y6 E2 c/ Q& ~ ^ ^) c: _
4 c* U- a/ ]0 h/ l' J: p* O, m
}' K( o9 G* A- u1 ~6 u4 i
' \2 Y: m6 A% R8 ` static BOOL PickStorageItemToCursor(DWORD dwItemID)+ j" g+ b; l$ B# {; H
{( E( I' Z" u2 l& f3 n, F$ {4 C# x
PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
4 ^' v( \2 H& z" ^3 V0 S8 @- D, r( y* X4 z/ j, M; m
BYTE aPacket[5] = { 0 };3 ]+ a0 L! W. i. Y8 m
aPacket[0] = 0x19;( Z# K- ?7 O7 T& `& N- y
::memcpy(aPacket + 1, &dwItemID, 4);
. F( Y8 D. _) q+ B4 J //return D2Net::D2NetSendPacketToServer(0, aPacket, 5);
) ~( h4 b/ @1 X( g; r D2Net::D2SendToServer(5, 0, aPacket);$ H8 h6 p) z+ H7 {, t/ j
return TRUE;( N0 D+ k$ B, M$ e7 d
}
3 J) T$ b& w2 A9 _# e3 I
G3 a! T; O5 R( Q$ ]/ t7 _- N9 x static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2): @3 S' r/ l5 [( E/ o4 @4 c1 S
{0 F: e% M) u# K# {, S% F$ Q: C# ^
PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);. a# U0 n* S, Q9 l+ i
BYTE aPacket[17] = { 0x1f,0 };' n& ?& G8 D) X
::memcpy(aPacket + 1, &ItemID1, 4);2 n2 o8 j" h9 U7 j/ [3 m% j( c" w
::memcpy(aPacket + 5, &ItemID2, 4);9 l2 C- G0 U6 h) Y
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
+ d+ L: `7 D/ z+ y+ K0 O D2Net::D2SendToServer(17, 0, aPacket);6 G3 [! Q% |/ Q( G
return TRUE;3 d1 r$ J, b- O% i5 t
}
' A5 A \% s8 D7 ?5 B
; g( y6 `1 I8 |# _( o1 h& p: I static BOOL Transmute()' t! w4 C3 l' h1 I' w8 }% T2 y& d" _
{
2 H% u( R' M) y$ C5 e8 c4 S0 t$ I if (!(*D2Client::ptPlayerClient))return FALSE;
0 F% ~$ s d: d, `% N. D: H8 s) A G8 X( Z. R2 s
if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))
. ?& i; [4 ] |( j9 T return FALSE;6 [/ }4 Z9 m# w* Y/ C# C$ R/ d# m# M
) z M3 l G; z5 k3 T1 B% Y PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);1 G' ~( _: R! Z1 ~% d B' D J+ K) H& P8 L
BYTE aPacket[7] = { 0 };
$ |- u. u6 E+ F) e: p aPacket[0] = 0x4f;% K9 I8 h- z+ b3 P1 L2 [, l* O2 x- v
aPacket[1] = 0x18;1 u/ t0 V: q8 F1 J/ a! W4 b
D2Net::D2SendToServer(7, 0, aPacket);; L. L4 \8 q$ ]* `$ e, i8 O, G
return TRUE;
. |% f: B1 _: W( p* \% ? }
0 A0 J$ z! a( i$ ?1 ]};4 a' ]7 L* U' o, k# T
+ q* \6 e- P& z2 E1 U$ W) f. M |
|