|
|
转载
" G$ {' v5 }" g: z/ D, G自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:
# c3 Q: Z8 i. G# I4 KD2Client:
1 h6 U X+ j$ ~ l# \8 L3 p# y6FB20AE1为拦截输入框(用于获得命令) T2 S5 P+ e7 ]" ~$ X% A
6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发
( ` H# |( L1 y6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发
2 @$ \( I0 M& R0 M8 r; w; H6FAF4230为hackmap的loop点 我用的hackmap导出位置
. Y$ s( X1 Y, T& U8 H K4 o- B0 P2 K+ J: g) f
# \2 l- C0 p6 A+ |+ b8 R4 w
发包函数:
C4 D* n H* B4 Oclass D2PKT_ITEM/ e# a/ u) f# R% Q, l, r
{4 n" ~+ u7 J, v+ b) G: ~6 |* T# D
#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上4 M! U5 P* n+ U* o1 x
#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多
; D! s7 u: N$ O2 ~$ s3 p& I6 T+ L#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上6 Z+ V! Y5 u' j/ Z( R6 ^
#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上
9 E2 n2 A* n: a: f#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH
. _( s8 N* l) w; S#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上+ E1 A: m8 w9 I( e
#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏1 ]3 K" J" l W' x" E7 P0 ~
#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上! Q# g {" M ]
#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -
% c7 }, H9 P7 B: f+ c#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店( y0 S6 |8 R) |2 d; k) V1 ?
#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV% ?: o1 [" |" l+ [. ?2 m# e+ u
#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道
, x! s/ f8 Y9 T' h9 z L#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带: k/ s4 Y# Y7 o; i$ k, [
#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上
2 y& l8 L3 B9 `* I2 G! A% h#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -/ L% e C1 [& f! e! F: n) D2 J
#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上
4 ~) d6 C; y) y5 {& Z9 Y* ]#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -
) @! N, |3 |3 i( R& s, i
$ a0 ]+ ]6 F0 _+ d# @#define PacketItemMaxTick 150) k; M! `6 P4 u
#define PacketItemPickUpTick 20
5 V0 N; O5 Q% _+ o; R8 ?3 Z$ _& z& t% q6 O0 X. Q
private:
( |- p1 z; P3 E$ E; | static DWORD _PKTItemTick;
F& h) y/ W& z3 J1 d static DWORD _PKTItemAction;
( t& [1 \( E' n static DWORD _PKTItemID;$ M4 c$ }9 E. |, J: e, E& Y
static BYTE _PKTPKTType;
; x% L% F& B) apublic:
2 O: n6 d j" t/ A' f static DWORD PKTItemGetTick() { return _PKTItemTick; }. E7 K7 w$ K0 `" H
& h- K7 v) H) U' @$ m( R static void PKTItemRelease()
8 I2 T0 X' x* s+ l: n9 r: q" h# L {
% K) h! X- e8 q- @ _PKTItemTick = 0;
1 x7 A! a9 y% x/ `, V& k _PKTItemAction = 0;( ~4 N) o) x1 q! @0 l8 G% i
_PKTItemID = 0;6 I& [* i& ~7 f, l3 @
_PKTPKTType = 0;) K! O' \9 Q( O4 i
}
- i- i0 V1 O9 l8 v) }( I8 I% F
/ g- n9 t8 U0 W& ]' n n- Q# _3 b static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick) / b" S* V9 {% t/ J* H
{
7 o5 w' n! U* ~6 K/ c _PKTPKTType = aPacket0;
( }8 z4 t& [, ^; [ d+ W _PKTItemTick = tick;
8 J) f& L3 K+ U& l+ P3 D _PKTItemAction = ItemAction;
2 F5 A& ]- ^1 G5 u9 N _PKTItemID = dwItemID;
' G' A2 n! W# o! R7 y }
/ C9 l! X8 P" E& t- p* [! g! r& y$ u4 F: U5 H+ C
static void PKTItemTellW8(DWORD tick)& W0 V% Z2 i, `3 T: ~* T6 y
{: h) x# _# v% t1 c$ `2 z
_PKTItemTick = tick;! Q! g- u. D/ w, [5 y/ I
}5 ?! d6 p4 y' c
, L5 s; O% Y' [ K3 S( A6 _8 G7 w7 s static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor0 J' D% ?+ Q! X( q4 Y
{
- S2 b8 x& @8 {# A& I2 G if (aLength >= 8)" o4 y+ R" w2 E% G7 s. |2 F
{
3 x* J5 k% t9 b/ h! A! x DWORD dwItemId = 0;" a) h) [! u" s) l M9 B7 k7 h- Y
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
) h# C! r8 l6 \, ^ if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE# E6 a+ \5 |* M* D; h
&& _PKTItemAction == ITEM_ACTION_TO_STORAGE, F. ~% f& b1 ?3 l6 e: p' l! [
&& _PKTPKTType == PACKET_NEWITEM7 S* e/ _% U* f% G' [
)2 U+ F5 C% J5 ^- B
{
/ A7 G6 O' h! b if (_PKTItemID == 0 && _PKTItemTick). `% y" r# W: F9 U. o; v6 P
{9 r5 t! |5 w+ [
PKTItemRelease();: T6 i9 W: i9 Y6 W t
}$ l9 E" r$ E! `3 i
else if(_PKTItemID== dwItemId&& _PKTItemTick)
/ k# R8 X0 P0 m/ z* q* G# c {8 K9 ?# A5 M/ f5 J
PKTItemRelease();) V; M3 D( x. i3 R
}, C. l# `4 c$ Q4 [$ C. u& s0 t9 Z
}
( E2 s, f8 f+ d4 o + n) w# N; R# d. `" m; ]! Q, _9 G8 _; B
}
' T* |. Q) `0 r* q: d' X }
# o- Y3 T( i7 [; X+ n
! ?! n$ m6 J$ S# s% ? `" c5 @ static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored8 ]9 Y. l) N7 G; v/ `/ Z
{
2 }- r9 i; v- K if (aLength >= 8)
4 y) D v& ]/ A9 i0 N {& }7 x5 T( n+ |! k
DWORD dwItemId = 0;
( q( c. M4 u# M) d/ V9 L6 c8 s memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));* |/ X2 J8 h+ Q z" l5 a
if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE) ], P) L' f6 T% q) n, }$ d
&& _PKTItemAction == ITEM_ACTION_FROM_STORAGE& T1 s7 s& b* i4 d; k- p
&& _PKTPKTType == PACKET_ITEMACTION. c. v6 B- v5 w/ {0 _2 x l% s
)* A: G; p! J& p; U: y1 w$ `
{
* e2 Z8 s8 {. N+ i& ?0 p( r# r if (dwItemId == 0 && _PKTItemTick)8 O* O6 `3 ^( Y; S7 j
{% L e2 o5 G0 L5 ]( z
PKTItemRelease();
, J7 b7 m" b. s+ [) L. c' r/ X }' X1 |& ^+ a; e3 a j9 a9 Q
else if (dwItemId == _PKTItemID && _PKTItemTick)
7 P- J1 J6 w3 K1 O6 ~ {3 h. Q$ U8 z/ {) o* j
PKTItemRelease();( W& Y5 V8 l& i# T2 j
}
7 \+ `$ { W/ d" K2 A; K" k }- n, r2 X+ N) l1 q& |. N; j( r
- X9 ~1 Z2 C0 w2 K* ^& p8 a
}
7 a1 H1 K1 H' s: p7 B }
5 \; m4 _/ u3 `7 o" R
% d) i. r1 i- D+ B7 x; n1 Q8 U+ w static void PKTItemGameLoop()9 @( U& E1 R* d/ @( \! E* |- x
{% C' F* d5 d) ?/ a
if (_PKTItemTick > 0)
2 n0 R" T, d$ Q8 e. F8 J7 g _PKTItemTick--;! B3 ^- \' |# u M
else if (_PKTItemTick == 0)
! F! V$ _- \1 [0 z7 {( f9 ^ a' l PKTItemRelease();
, v) F' F N6 n; P: R* G- ~4 U }. @+ X; U3 Q$ b0 k; O
0 h" y. r' |1 X; m9 m
static BOOL PKTItemCando()
* R. C4 u3 S: N# A; U/ V; X {4 R4 |. K" I5 F5 v. Q" W+ |! n
if (_PKTItemTick == 0)return TRUE;
4 f u2 {$ ^# b8 r/ J( l/ @ return FALSE;* I! B6 Y+ d. n9 ~: ?2 m. q7 o
}0 }+ t1 c9 \% B( m7 e! X
. g/ c6 T. I8 B static BOOL BuyItem(DWORD ItemID, DWORD npcid)
- s9 y' ]# |% B! \. Z3 u& M1 G {
* C5 g+ A' p$ d, [5 ~; ?1 ` PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
9 w+ _7 Q6 y- @2 H BYTE aPacket[17] = { 0 };* n) O" B; [) j/ b
aPacket[0] = 0x32;/ i6 [9 w' e' u5 G5 [! f
::memcpy(&aPacket[1], &npcid, 4);
1 F4 m0 h3 y8 Q0 A ::memcpy(&aPacket[5], &ItemID, 4);5 [7 A& |5 \6 T- m! h0 }
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);" e9 x& K: G4 Y
D2Net::D2SendToServer(17, 0, aPacket);
* q* l6 P2 N' S$ c" W return TRUE;8 r' h, G' |4 D; M& ?( w6 L! s/ z
}
6 f# h! S7 D- \
5 ?. i; r1 U4 u, \% p) R- F static BOOL SellItem(DWORD ItemID, DWORD npcid)3 W& L. ^& B7 J6 b. A3 ]9 U
{9 z1 {$ `& G/ E+ F" T, l
PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);7 K2 I0 h0 W9 M |2 G7 E* k* U
BYTE aPacket[17] = { 0 };! l1 g! u1 j8 Y1 {! _! u
aPacket[0] = 0x33;- k3 J3 K1 ?$ J$ J
::memcpy(&aPacket[1], &npcid, 4);9 b/ M8 }5 I( e6 h; A
::memcpy(&aPacket[5], &ItemID, 4);
2 ~+ _* a. ~! s/ u+ y. t: k //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
6 p+ w$ N4 l; [3 W9 k+ z2 B3 O2 k, h' c D2Net::D2SendToServer(17, 0, aPacket);
% a7 H9 H8 S5 }+ x2 S return TRUE;7 @( Z9 O% N( A t; |8 F
}, ?, B) D/ \4 d5 l) m; w% Z7 L- I/ m3 q
* v5 d( E7 m& @" F( T8 X
static BOOL Interact(DWORD nUnitId, DWORD nUnitType);
. x" G7 S# K' G. A% l) B' I4 M( Z
static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);
9 N$ S( c' M( E7 E2 f; T! X3 F5 W) J W! S
static BOOL OpenCube()7 v2 Z1 b$ G4 k# \4 b- D. |) z
{5 f2 e: t3 U3 T/ j9 P
if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;. p' s0 a! D0 S
" n0 h% T/ Q/ z: d! p8 ~/ A0 Q1 z
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
! d1 z+ e$ G8 t; o if (!pCube). _1 o+ b" x! J; }1 ]& t/ y
{
* }( R: R! F' T) G2 ` pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
( H& B+ _8 e1 Q' p0 n( k. ?* ~9 i! a: Y+ W if (!pCube). H3 i7 u: [7 P" b1 Q
return FALSE;- }( |5 j% }" K6 N# X; S( z; Z/ I
}
& \, Y% G- l- G& o0 W* A2 j4 H+ O a PKTItemTellW8(PacketItemMaxTick);
& Y3 W+ Y; \. i6 l2 {% V8 }& ^+ C& D2 I3 n0 _
D2CoordStrc mypst = { NULL };
$ K! C; w& D# S8 \% V8 { D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);. L+ e. S7 ^# j/ ?
* R) _2 }. F+ s; g
BYTE aPacket[13] = { 0x20,0 };' Z# a2 g( e; A y
::memcpy(aPacket + 1, &pCube->nItemNum, 4);
7 `. R+ F+ G6 Q( V4 r, }: K ::memcpy(aPacket + 5, &(mypst.nX), 4);0 ~: ] \- V, q$ h; U8 E" t
::memcpy(aPacket + 9, &(mypst.nY), 4);- O K4 K9 g$ L* B) C: \- ^" S4 @
D2Net::D2SendToServer(13, 0, aPacket);6 z2 h$ h7 a2 z' O( b+ Z4 X
return TRUE;6 K4 m2 k+ W. W' c! ?
}
, r, j& I( _* u# s C9 _6 h; ?# l; X% W
static BOOL ToInvxy(DWORD x, DWORD y)
' `8 [4 d8 m: @ ~: Y" V$ w c {
& E: h8 ~$ d' k9 e1 ~1 U$ i UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
) c3 k: p' g: @. }1 B0 t
( c2 _- r: D2 H* x, @ if (phand == NULL)
, l5 e* c- j) }; e return FALSE;* o, Z6 v9 i6 P4 ~* b
: K& i" M5 N7 q# i" r: V( A d( B PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
5 ]" _7 K! J$ m0 X# D# q4 K4 M; q9 ?; i
BYTE aPacket[17] = { 0x18,0 };0 F$ w* X& j: k" _
::memcpy(aPacket + 1, &phand->nItemNum, 4);) [; T8 q7 G) h- y' `
::memcpy(aPacket + 5, &x, 4);
: M# Q3 |: L. o ::memcpy(aPacket + 9, &y, 4);
/ J7 g: l, J1 t& L8 W9 c) M) ]0 H D2Net::D2SendToServer(17, 0, aPacket);* F# a& ~/ j3 ~3 [3 ~8 v
return TRUE;: G7 w! a2 D+ o$ K- x" }' H2 ^
}' t# Z5 B: I% w0 N
: @0 `! W. {( R0 S# B" F3 V7 S static BOOL ToInvRandom(BOOL bBagFix = FALSE)
3 j& s' `% H0 J( A: M& r2 g0 `- p0 U {
2 R; ~2 F1 l @% c5 ? UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
* E9 A! Z3 P$ t- q1 j if (!phand)7 Y2 c) s! N5 T+ u: F' i2 B+ |
return FALSE;
. ]) y- v _: ~+ Z6 p( U int desx = 0;+ e# X! O$ G+ K- O8 u8 g+ C. ^
int desy = 0;
0 G7 h9 [' Y" v' x if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))( D+ N2 `0 L$ x. _
{/ y" L. n4 j2 {$ R! f0 s
ToInvxy(desx, desy);& s* X- c& e( D1 |/ [9 W% g
return TRUE;
( {' L' z' ` x" | P7 z5 ~' Q! T }& \! S1 d9 K2 m. j
return FALSE;
5 l9 t3 @$ \/ e& q }5 o b$ N. C( {8 R. e) F% w/ r# ~# S
c- f& X* J& k4 e, Q
static BOOL ToCube()3 C# ]- A5 H- Y6 S) b
{) @! A) n1 H3 Z3 [
if (!(*D2Client::ptPlayerClient))return FALSE;' ~) z/ |$ h4 ~! d4 p
% i ~8 F# c& F. R
UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
& m- D1 W5 T: t! R8 M" m if (!phand)return FALSE;- P4 h! Q' m2 I$ m7 K2 Z. I4 w
4 E. _0 @, Y, }- k( b
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块2 _5 ]* i9 X- @6 s
if (!pCube)" @' C9 y) W" u
{: C" r9 L# s0 v- x8 @( p" x/ \
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块
# G7 a5 E0 x3 k if (!pCube || !pCube->nItemNum)
0 i3 s% e4 m0 H0 I7 i return FALSE;* l+ C: J3 ^; T& G+ U a
} K Q8 |2 X* C3 G5 G2 C0 }' G8 z
/ `- {- F0 T j* g; B if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))
* v8 p7 B) v0 l, l4 h& ~ return FALSE;
6 y5 ~2 t6 y6 f/ y5 l' T6 m+ J+ D- `/ I; h H5 o
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);+ B; G2 M1 n8 o, N
. q9 J7 \9 l6 w1 @: [
BYTE aPacket[9] = { 0x2A,0 };
# J8 ?. {& f( i& L. P# l ::memcpy(aPacket + 1, &phand->nItemNum, 4);& X$ R. Y$ A ^
::memcpy(aPacket + 5, &pCube->nItemNum, 4);* R5 e7 Z9 y6 B) s$ ?3 X# r
D2Net::D2SendToServer(9, 0, aPacket);: T1 A( w# _2 h% K. L2 D
return TRUE;1 @5 x# L1 O0 D) h0 i/ c! \
5 q! y. A3 z4 h0 w; v8 J7 N1 O5 S
} n0 ^" G& m3 l! d" b
( f5 @" L0 y) m! q static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);, g- v' v* }- c* f9 u \) Z
5 G" a4 d$ C( q4 q& W static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存 k) f8 g5 e. U3 ?( R( T
{
9 ?" ^7 c. P3 c1 o+ q D2CoordStrc mypst = { NULL };0 L, R* Z+ P0 T2 [) R- Q
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
9 t) N* T. K) w6 H) n- k/ }! l, `- H" L% U
if (!mypst.nX)return FALSE;
6 e/ S+ V9 N2 d% `! k M / T: C. T1 U0 p& }3 x- R, C) E
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);$ D# l9 j3 C: L8 J6 w" g2 C
2 z: [. ]; V/ n
BYTE aPacket[13] = { 0x20,0 };" |' z& ^6 N9 ~3 b6 A6 ]6 w
::memcpy(aPacket + 1, &dwItemID, 4);+ Q9 f8 t, F5 H) L$ L
::memcpy(aPacket + 5, &mypst.nX, 4);
6 G4 K) m9 ^: _, w ::memcpy(aPacket + 9, &mypst.nY, 4);
3 L6 f/ Z5 S# n' p5 |2 ]8 @ //return D2Net::D2NetSendPacketToServer(0, aPacket, 13); T" ~# _# O3 j
D2Net::D2SendToServer(13, 0, aPacket);, H: }! X, {: ~0 P
return TRUE;
3 L: {: M* A) f* ]; p9 P }
' b4 L( @+ U0 F2 Z3 E1 s2 R: P6 a8 |* Q9 ]& x: j# c
static BOOL DropCursorItemToGround()
# n5 e6 k- S) W {
3 Y5 C: |9 z8 [" o- r0 x! \ UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);; p, \3 b+ x2 w4 ]: D0 J
if (!phand)$ |+ N3 d D0 M0 B$ a/ n
return FALSE;
1 g4 H7 ^$ Z# t9 Y' d+ [. d1 D3 Z6 W9 m/ ~, m6 F
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);
6 J) }7 e( ^3 ~2 `9 R
) Q+ v8 w2 W8 S' u BYTE aPacket[5] = { 0x17 };8 T$ Q3 k% |! w, i! F4 A1 e* U1 s
::memcpy(aPacket + 1, &phand->nItemNum, 4);. k2 ]7 d2 s& l5 U
D2Net::D2SendToServer(5, 0, aPacket);
8 T* q1 P* A1 T k" Z6 X$ \' _ return TRUE;& E, y6 Y" o7 z6 i
, c1 i6 M4 j+ f( l1 g, f
}% u4 {6 A2 L' j
, k9 _: `) M' K8 f static BOOL PickStorageItemToCursor(DWORD dwItemID)
& y2 s4 l# c/ B! k {
2 w1 c- R" p9 B. w# ?8 ~ PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);$ S4 p: e/ W% ?' M z
" _# | ~% u- f- D1 q1 L0 { BYTE aPacket[5] = { 0 };; u* i4 a# @7 B$ x4 N
aPacket[0] = 0x19;
1 B- K( U0 r3 g& u8 f; t ::memcpy(aPacket + 1, &dwItemID, 4);, s, J/ z) V k' e1 j
//return D2Net::D2NetSendPacketToServer(0, aPacket, 5);
( M& W7 e1 R. ?3 p7 o D2Net::D2SendToServer(5, 0, aPacket);0 g2 K+ }& J3 e* l$ t
return TRUE;8 }3 }5 v! Q) C0 f; a: U
}
) h" G" {9 D% y0 m( q4 T& c" D# G+ _" Q2 R4 A
static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)
& n0 M, u% x9 e& s3 N {+ I+ b& {9 _- X7 h. K& B/ j4 k0 l
PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);9 t5 ?& N% {5 T6 p
BYTE aPacket[17] = { 0x1f,0 };
0 X- ^5 H. v% g* ~/ V4 F+ n ::memcpy(aPacket + 1, &ItemID1, 4);' e" Q8 n% ?8 k8 \4 r2 \2 Q. ?3 b
::memcpy(aPacket + 5, &ItemID2, 4);* N/ z! V" J1 z+ F, q9 Y& E% \
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);; L6 Q+ J ^* y! }, m$ A
D2Net::D2SendToServer(17, 0, aPacket);2 O2 g- d# m6 S$ X
return TRUE;
; i4 {2 f8 s/ G4 ?0 D }
3 `& ~6 R9 S' Q1 `* x* X
! L; Z: V' m' Y. \3 Q9 u static BOOL Transmute()
3 {# r. l6 A& E! F5 Q6 r {8 i3 [& o( c, B4 M5 S2 k
if (!(*D2Client::ptPlayerClient))return FALSE;3 b! R+ x; U! b$ G0 y# s
j" W+ i) |% X if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))& t( j5 F1 G* J w0 X. H& B L
return FALSE;5 v- P/ @* h! }& p* T: T$ l6 b
, C' l1 v6 s% N4 T1 b. u PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
- B# \: Y& ^9 ^ J BYTE aPacket[7] = { 0 };- ~3 P, w1 I+ N* h6 x9 Q+ u
aPacket[0] = 0x4f;
# ?1 P7 ^) s' W& L" a aPacket[1] = 0x18;
$ Y% a5 X- v9 j2 t+ }& H u D2Net::D2SendToServer(7, 0, aPacket);
9 \2 p- W( X: a! Q l- K return TRUE;, U* a3 ?% D0 \- b
}& B! \& F# g& o& `) I; p
};3 N* ]0 K9 F- U0 D
, [% d, ]7 t$ Z; `
|
|