|
|
转载
# ^/ ~) ~1 P: x. X {自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:
d# M: Z" V, A/ j' k3 mD2Client:
7 G3 s0 p4 o+ r1 W/ ]( L# g6FB20AE1为拦截输入框(用于获得命令)9 m b; R( ?3 d' ]
6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发3 ?. Q1 [/ \# o) W2 J3 Z
6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发
4 z, |5 @% F3 ~5 J6FAF4230为hackmap的loop点 我用的hackmap导出位置0 b6 h: ~! l- U$ `" ?5 f% S
" L" F2 T) c: I0 \" U
! Q8 {5 I/ I- e+ a5 W% A6 \7 u发包函数:
- ?7 H" O/ w8 l7 ~4 `class D2PKT_ITEM; C0 f2 U/ x' c( @- A) q! e; B: W+ j
{
- C1 `' U8 L( X5 L' G, O* Y8 G% l#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上
/ @4 L k& k1 `! ?3 a#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多+ O9 a( ^ E% W8 P8 o
#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上
; O U0 }" z' s& |; d: r#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上2 z5 A: l0 E! |+ d* E
#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH
" I" E, N% X* A, D9 F#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上
+ P& i/ @/ l2 a4 z j7 N; X w#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏
9 s- F0 ^: a2 M Q+ \#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上; R! \/ M; r* o6 E$ g: e
#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -2 K5 D7 X# z! K: a
#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店
/ F; \1 C5 y2 M8 @/ M. `) F% [4 |#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV
( R u0 G# h. z, Q( ] Q#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道 ) i, `! V# a% R) q, w
#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带
$ a4 n) n7 u2 J& D#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上+ ^2 {- h& O9 o9 `
#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -
( g2 M2 W, |; a+ y1 v6 [; [& P#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上* f, s% w0 {" x9 U1 Q3 g
#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -' b5 E5 \! J/ E1 T0 S; `6 ~
0 k+ F6 u# d$ G#define PacketItemMaxTick 150
1 K# M8 G, U0 A. V9 p% ]6 {#define PacketItemPickUpTick 200 o0 e2 O, U! q9 ?$ L
+ \9 x4 I5 S% h; `9 C0 Iprivate:& L" w% I& t2 e. L2 k9 ?
static DWORD _PKTItemTick;
3 z# M3 J+ N( M& O. T1 x static DWORD _PKTItemAction;
. ~1 s" ^! l3 F- i8 h static DWORD _PKTItemID;
6 i: G% D7 l! Y' N! I7 l: i. X5 v static BYTE _PKTPKTType;
' w: X, T/ ?6 x: N: M1 l0 \public:
0 W3 _" o1 U6 P t3 q- F static DWORD PKTItemGetTick() { return _PKTItemTick; }+ o0 o, ]; V/ y( |) r
! e t `( T' N% S }8 |) i static void PKTItemRelease() 9 H# F" ^. ^% A- E. |/ O9 Q
{
7 H4 u* a, ~+ O7 N. p1 E( T: s _PKTItemTick = 0;/ n$ y+ U0 B) C
_PKTItemAction = 0;& q- V6 ^: r) }4 k
_PKTItemID = 0;6 h/ W, A! B3 s6 F$ t
_PKTPKTType = 0;
h8 _1 ~( B, l- t. _& a4 y8 D" O" B }( d1 o3 R! }# J2 W& i( A
1 I" z- g8 u) i) K, Z static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick)
9 M! D7 j) s& ] \% W2 W {
- i1 a! l; b- L" r9 _* E. {; A7 @ _PKTPKTType = aPacket0;
% j+ W/ V: D4 U2 t( G- _+ p7 Z. s _PKTItemTick = tick;% S: E5 Q5 Q# M3 @) O$ M
_PKTItemAction = ItemAction;9 ]) e9 E, x) V! G) F. j! A
_PKTItemID = dwItemID;" \2 w2 Z' G2 I
}
" r3 c! u2 F0 w3 v; q+ A5 S6 T+ Z, d7 L3 z0 X4 H1 G
static void PKTItemTellW8(DWORD tick)' B0 Z( t1 B) u3 j% O
{
7 M7 M! p0 |$ e d8 D _PKTItemTick = tick;
( r/ ?: v- l/ r }
% Y" w2 ?; Z! U- R$ p0 t( ^) s# v2 h. I; P6 @; \
static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor s6 i9 {$ X& J: v* A7 S) G" o
{, W' p5 d6 O: G" T; K. i X8 @
if (aLength >= 8)9 m( r; P! I' {: P; x
{
' z; z! Z9 ^+ L$ O DWORD dwItemId = 0;
: ^ L! {2 z& Y$ {8 l memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
! x" y4 g+ n8 a ^- S' i4 F if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE. O$ U3 j0 l7 A
&& _PKTItemAction == ITEM_ACTION_TO_STORAGE
0 H% n4 \0 e: o4 A2 Y && _PKTPKTType == PACKET_NEWITEM
$ z2 l) J1 M3 [# z7 P )) X1 P& h% U& O
{" _( N' D9 u8 c( }. S9 q; P
if (_PKTItemID == 0 && _PKTItemTick) w) K2 h) }0 m9 m: I3 z- H
{. ~6 u; j/ A4 Q1 L6 _2 `
PKTItemRelease();& K8 m2 @0 H1 W0 V+ g
}
5 m* _6 e0 d: r/ p9 I! u7 I else if(_PKTItemID== dwItemId&& _PKTItemTick)
! i4 ~. n/ x& H1 M {
7 N, C c2 |6 b c5 F1 B, Y( c PKTItemRelease();
8 I+ d9 s, X4 {( o. z/ y/ P. { }; ~9 o6 _! H- D- z
}
5 O' ~4 y9 A- N
6 f) \" k; J3 f }. H& L/ q1 m* R
}8 U2 w, O" K, [ |! G2 |4 e
8 U3 g5 h3 i2 A2 r: v0 ^5 \4 N* X9 p/ m static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored6 ?3 ]1 j% I! J3 F: C7 b4 J
{. y0 ?% Q9 J2 e3 Y' e7 d- L3 O
if (aLength >= 8)
5 {. q" F, G, y& s$ s. {- |! @" m {6 Q$ o2 E5 S- u
DWORD dwItemId = 0;
3 e! I) r% H7 v" z memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));1 W$ V: e/ N& H ?/ t0 [! ?
if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE0 n0 `3 g2 G& D- D" r) w9 ]7 t
&& _PKTItemAction == ITEM_ACTION_FROM_STORAGE
( [- m! g* m, M. b && _PKTPKTType == PACKET_ITEMACTION& o' W& H5 f" t
)+ k8 C* Q. M% K4 V' ?; i: C
{& X# M# X+ X+ D! j3 c
if (dwItemId == 0 && _PKTItemTick)$ ^, X" \7 c, Q6 b
{$ j, o. D* B4 a9 v
PKTItemRelease(); z; J h6 _0 y' @
}
/ \- }2 I z" ?; Q: H& L else if (dwItemId == _PKTItemID && _PKTItemTick)5 k$ r6 x7 A* M1 O
{9 U- W b3 ?1 Z$ h
PKTItemRelease();; ~: A, V& o* m( _8 t2 I$ C* i
}
# _+ J: t4 ?, K6 G1 s+ G }
7 i+ C+ }+ g7 f3 P i l+ L6 B ' t% B4 K1 G9 ~# O
}
) F, d1 m: o+ }5 r1 q, f6 ?- R }
- p% h4 A$ ^. B7 r0 T# r' d% C, l" @, Y( R
static void PKTItemGameLoop() ]- O% {0 ~1 o2 E; {; D) A+ Q
{$ M3 ]" i. }+ V+ K" P+ l
if (_PKTItemTick > 0)
% R4 F5 W k3 k; i _PKTItemTick--;
: I7 f* ?' k/ b0 A: E else if (_PKTItemTick == 0)
4 \+ r$ a$ t1 F5 l PKTItemRelease();8 ^- M4 Z( ~- C _
}
6 j; o2 a# X0 W. j) @
! X( |/ v$ \3 L static BOOL PKTItemCando()
+ K. @$ b2 b4 u9 I9 ?2 x { o, s' u' C8 [
if (_PKTItemTick == 0)return TRUE;+ S; v' L9 S( z) H; h' n/ ~ ^
return FALSE;- Q% w8 Z/ g5 \( G% t9 ~# J4 T) o0 Y
}$ F1 J+ e7 z0 ~& B/ E5 N0 x
( w/ m3 A G. P( K
static BOOL BuyItem(DWORD ItemID, DWORD npcid)$ J! {2 h3 l" J$ X4 C3 i
{
7 f. Y4 S) Y; d! |1 N8 B PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
0 b2 ~5 x" x% V7 m BYTE aPacket[17] = { 0 };
. n- k& \5 V: ^( h' L aPacket[0] = 0x32;/ Q$ J1 z& q1 X/ u+ O# h
::memcpy(&aPacket[1], &npcid, 4);
& A( p/ e. Q) J2 p: Y ::memcpy(&aPacket[5], &ItemID, 4);
$ t7 F9 B* m8 q1 M9 Z" m( `- a* @$ R //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
" l% I& E- ]- [. s! K. m( @ D2Net::D2SendToServer(17, 0, aPacket);
% I) {0 j* c7 P {/ u" F6 R) y return TRUE;
% m6 p, a& E5 ?1 v) x H }
; r1 A; x% k" `4 _; d! a a. e7 b/ n
static BOOL SellItem(DWORD ItemID, DWORD npcid)8 N& a+ R/ Q6 C. u% q- T
{
' H% R; Y1 L) k) |9 @, c; S PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);4 H/ p' G- H. P1 b8 u2 |
BYTE aPacket[17] = { 0 };
+ [+ {1 y! @- l: Z8 G$ a$ ]* T aPacket[0] = 0x33;
" z$ w7 i& {6 x* Q ::memcpy(&aPacket[1], &npcid, 4);+ j# m% p0 m7 d! I9 c1 j6 c
::memcpy(&aPacket[5], &ItemID, 4);
: B( Z# `# R n+ @0 z //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
) _5 }% r7 f+ c; l D2Net::D2SendToServer(17, 0, aPacket);3 }3 }3 R' d) ]0 R V1 t% ?) ]
return TRUE;
9 L- D8 W& x. S) c }% E) I6 x% |$ u+ }' e+ m
& z2 z& a6 E! Q+ q
static BOOL Interact(DWORD nUnitId, DWORD nUnitType);
' O4 j) q% C* ~8 [, Z. z$ Y
9 c3 N2 y5 H+ V5 \; S q static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);
2 Q* n. I5 O( ]" i& C6 N4 \- T
static BOOL OpenCube()9 F6 `5 {- w7 z- {3 q/ T
{" F2 s( S3 N9 q1 z2 Z& J
if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;
7 A2 P8 ` S3 Y/ n/ i9 I0 x5 N! k# G3 x
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
/ D9 B; x+ A* g; u if (!pCube)
1 ?( M- Y$ T$ r) K& L$ t { v) }2 w. v( B* p9 g3 r* E
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);; S. E+ U" J, h
if (!pCube)* k, y( K3 O* S- ]8 O
return FALSE;' B2 m5 p. j: W. u; j
}8 X. b/ E8 p0 o& O" h7 R* X, H
PKTItemTellW8(PacketItemMaxTick);* d! z- \5 O3 Y; [2 `% i+ J
9 r/ |# a" Z, u D2CoordStrc mypst = { NULL };
/ T2 A- {. F5 K4 _# v4 } D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);4 N+ i! W& @% @2 d8 M
. r+ d R' t" `& ]% @ BYTE aPacket[13] = { 0x20,0 };/ j- n9 U- A& ^/ E% Z P
::memcpy(aPacket + 1, &pCube->nItemNum, 4);
* ^1 [, g; j) ?: H ::memcpy(aPacket + 5, &(mypst.nX), 4);
, Q7 h* d+ q0 Y8 Q, x6 F% I ::memcpy(aPacket + 9, &(mypst.nY), 4);; z' F7 P5 h* ?$ Z) J" E
D2Net::D2SendToServer(13, 0, aPacket);* L4 C0 ]6 s8 Z5 h7 `/ i$ z; q: B1 I
return TRUE;
1 U8 i }, r8 y5 J }4 [5 k) w9 l. l7 P% j+ I
+ s# n- ~% t3 q( b7 N0 i, | static BOOL ToInvxy(DWORD x, DWORD y)4 O) \4 K" L# u9 N* H) |! f6 V
{
9 E* i8 ~+ ]! X, g1 T6 r3 ?- l6 B& i UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
; n4 F, T+ [; k# W; l; J
6 C! ^% w7 P# |: w. y l n if (phand == NULL)
3 Y7 ~9 q6 Z5 R# m3 W. ] return FALSE;' e/ `9 V; g" r* @
& U" \1 k) h9 ~" u* j. ~* a
PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
: |) L; _( K3 S4 W& a
( s1 l0 w& ^2 A% ] BYTE aPacket[17] = { 0x18,0 };" s1 ]1 w9 H6 W/ F
::memcpy(aPacket + 1, &phand->nItemNum, 4);
|+ `9 m3 Z, \ ::memcpy(aPacket + 5, &x, 4);
: R. t" u# Z* T# g% Q! { ::memcpy(aPacket + 9, &y, 4);
% X( L0 x+ K5 t& e5 b; V D2Net::D2SendToServer(17, 0, aPacket);! \3 E2 ?) S2 K" W* ?& R8 \
return TRUE;
& `% P; A+ ]: ~6 S3 `( B! E }
) ?4 Y9 }" T+ w- y
' R2 \# a" @3 u& W8 { static BOOL ToInvRandom(BOOL bBagFix = FALSE)
* E+ X* y5 }/ \! p# V {& e9 }9 `7 ~7 z( h- |$ N. @
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
. P' O) x E1 j- o+ n if (!phand)3 C3 [4 Y# \( G6 n! V$ {
return FALSE;5 ~2 a) c: z/ A3 S. d/ P1 w
int desx = 0;5 R2 z7 N, Y- j& v0 _6 R' j R; p" |
int desy = 0;
+ @$ I) P- |3 u+ q6 | if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))
& h' S8 |" U2 P7 \. ~. `: [: n4 i {! ]% ^, S. L9 s1 P5 u# z1 U
ToInvxy(desx, desy);/ L+ A, n3 f- i4 {
return TRUE;
( h0 ]" J; c0 O) ~( a }- d6 ?& ? l1 f5 S" N: L$ n$ |* c! `5 B
return FALSE;/ a- J2 A7 D& `& q0 ~, l! x
}$ L M% L9 i! j; V
: b0 ^( r/ w+ s; T# j" w
static BOOL ToCube()
6 X. w* q: {+ {1 n {7 N! x3 u! W2 x( n" f
if (!(*D2Client::ptPlayerClient))return FALSE;3 W0 Q1 E% F1 c0 l- u
+ F# S2 H5 q6 O$ O/ R
UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);8 o4 k* R. q5 @2 ~
if (!phand)return FALSE;$ m$ s) X$ ?' o2 s( K, g
5 Q" M, a' j6 G9 z/ g UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块+ \0 b. [4 n4 ^# k: w( C
if (!pCube)
) i) B' z N; _5 P- i {: C1 J9 x& P0 x* k& [5 U
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块) ?" @4 h% }7 Y# {# Y; W
if (!pCube || !pCube->nItemNum)
9 `- k$ D% I0 U% } return FALSE;
# e2 W8 E: }6 g2 Z6 K8 [- _/ R }
: ^+ D1 {0 z( g) |! w5 s
9 U9 N% f' \& f5 c. Y8 s if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))3 f, Z+ g) f/ p& C0 h7 W, ?
return FALSE;
6 T1 {' ]6 @$ e5 J' V
- w5 ~3 S, Y8 V' R PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
: q# I" D6 ]- v" c- i! E
# ]$ [: ~7 R5 b8 t BYTE aPacket[9] = { 0x2A,0 };( C' f4 J- L* G
::memcpy(aPacket + 1, &phand->nItemNum, 4);
6 e2 q# X W3 C) j$ t8 @ I- y( A ::memcpy(aPacket + 5, &pCube->nItemNum, 4);
* b% \. ~7 i' F1 ?! l D2Net::D2SendToServer(9, 0, aPacket);
$ b* y9 V" l( E* @3 g+ [: A return TRUE;
- O1 T0 N2 ~" L( V1 `. N2 @9 G# x# [& d! t; G- o( I: f
}" ]+ n& q+ f7 y/ v! F B
' v3 X% L0 z( c) K static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);2 @+ o' f; e o6 ?; L! a$ S
: `: o; k% i( A% n" v! p1 d1 q3 Q static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存5 ?7 k2 N+ q" a7 U5 l- @9 J" y
{
6 W# o, n: P( T* Y S8 G D2CoordStrc mypst = { NULL };
7 u# E6 }5 Q, S) z$ o4 ?9 u D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);. N6 Q1 S2 b- w+ N) t0 Q0 H5 l3 U
/ x z' F. ~' C7 r; F2 x
if (!mypst.nX)return FALSE; K# @; s4 }" T* n3 B
% }# G1 l! T; T- e
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);" m- C! l K0 p1 M
9 {" @/ V$ r. p l9 c m BYTE aPacket[13] = { 0x20,0 };5 J0 P _+ f- b+ F3 m5 G- E
::memcpy(aPacket + 1, &dwItemID, 4);5 x! v2 \8 L) p3 \
::memcpy(aPacket + 5, &mypst.nX, 4);3 W) s2 h3 i0 u% u k0 x
::memcpy(aPacket + 9, &mypst.nY, 4);, K# n" z' N$ v+ w. }" O m
//return D2Net::D2NetSendPacketToServer(0, aPacket, 13);4 b o1 r: q0 |# |. \
D2Net::D2SendToServer(13, 0, aPacket);# V* x w5 O4 ^" r
return TRUE;
: h4 ]* M2 W5 k* r- @ }) S5 k: l! s* G
1 b( q, D) @ V# `% B6 e
static BOOL DropCursorItemToGround()5 r; p& c8 k# k) k- ~* W6 u& ^
{
% a2 X9 r0 d3 d UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
7 m! D7 j4 G; V' {- R$ H if (!phand)
; j1 S: D c- M$ c return FALSE; v% ~/ F3 U/ b
) J2 N- b9 p0 {* x" ? PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);5 u$ d$ V0 Z- v: i+ J2 n0 ^
2 l6 n. C3 j# d) N5 j; W
BYTE aPacket[5] = { 0x17 };8 b! t& P; V z1 t2 X6 W: m* i
::memcpy(aPacket + 1, &phand->nItemNum, 4);" i' e( a, F1 P! a) \. I- ]
D2Net::D2SendToServer(5, 0, aPacket);
. I* V( P: Y2 f) ?' y return TRUE;
5 \3 E \1 a" _, y# h! A! }) S f0 i
}
# S+ z) {$ |6 Z7 r% `4 y9 d7 [- E( F$ ? v
static BOOL PickStorageItemToCursor(DWORD dwItemID)* e8 |' N. q& y9 Y6 O+ @& w
{9 c8 W: h9 B% }* j$ [' B. X
PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
2 f5 ]% @1 ~5 s' }+ q0 I5 `) n
$ q% W. p+ K" p0 J4 I BYTE aPacket[5] = { 0 };
. d6 J- L, M9 V0 I+ Y& s5 q! B aPacket[0] = 0x19;6 S, I2 ]& P& Y( C+ o/ i7 l
::memcpy(aPacket + 1, &dwItemID, 4);1 s7 ], K# b4 L3 Q+ m# F& p
//return D2Net::D2NetSendPacketToServer(0, aPacket, 5);6 N5 D. S, P2 C" P4 J+ Q
D2Net::D2SendToServer(5, 0, aPacket);; q Z2 O$ b1 g0 u
return TRUE;& R" q% A* s9 j4 ]$ p* c! X
}0 r# P7 p4 G9 U( |/ m. m
) o% y& F- w* b+ j, p! Y8 K3 V static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)+ \. z- e& J4 b b: i6 h- }
{
, E9 B) m* }! h+ C/ _ PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);9 s, [- M, M, `5 a9 l
BYTE aPacket[17] = { 0x1f,0 };. T8 f$ [0 O" J( E9 F* Q
::memcpy(aPacket + 1, &ItemID1, 4);
6 g3 ]! a/ |5 Y1 s ::memcpy(aPacket + 5, &ItemID2, 4); [6 P9 m4 ~# i; z
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);" i* b" J6 }3 f1 {
D2Net::D2SendToServer(17, 0, aPacket);9 U6 H4 }6 `: w5 @9 l+ z
return TRUE;. z7 R+ R" h6 ~: Y9 F4 G& P' l
}
( [7 _4 u- S I1 S/ z* s! e
S* |* q) l. |* ? static BOOL Transmute()4 O& t$ Y1 m- z( [1 \1 W1 l. `
{5 w) L3 o2 [, @9 D9 S( [
if (!(*D2Client::ptPlayerClient))return FALSE;
+ ?# O. X4 ?4 K; l% G8 P; l6 t( I
4 O3 u% a& Y& Q4 J7 t if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))9 J/ w. u- z# { }7 Y- M
return FALSE;
; R( U0 z) N% n5 p$ y
. o! H/ A5 s9 ?2 @! m PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
1 g1 @ z Q3 g- X BYTE aPacket[7] = { 0 };
; V; a" _) k3 ^9 G- x( t aPacket[0] = 0x4f;' y/ M9 g2 j9 s. w7 m
aPacket[1] = 0x18;
+ E5 a2 O# b& S+ r2 Q! b6 A D2Net::D2SendToServer(7, 0, aPacket);. f1 F% V) F* K% d
return TRUE;3 J# ] B, t4 t
}4 y/ a, c+ E) e6 W8 L/ a9 }7 ?8 |
};2 L% p- S2 T0 x, C# d
2 e8 {7 L' o" n! A( _
|
|