|
|
转载* o. D4 J3 ]4 i( {6 o
自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:
* O8 C- m+ ?/ dD2Client:
! Y0 r' j! L- W* o% L6FB20AE1为拦截输入框(用于获得命令)5 d* L; W- c* E( m' V/ t
6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发4 {6 {$ _3 L8 {6 C
6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发+ t2 [ m% n, P6 b4 C* B; ~8 M
6FAF4230为hackmap的loop点 我用的hackmap导出位置
+ v& J& Z _+ z+ X! a- B8 B, y9 u7 z+ ?, o6 o+ n
, d# D. D. F1 l0 E. Y5 I- G/ s# b5 `
发包函数:+ z9 f( D, {$ h+ \) ]! p# e1 k+ p
class D2PKT_ITEM* X6 {; @$ V: @
{
: z6 Y, L- W1 t" Z#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上; A$ u+ Q8 ^8 C; J/ f2 j% J1 Z
#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多
2 N: X U8 V# C$ K4 T2 w$ o% p#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上 C K% Q# @$ k
#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上# \9 f1 d" p6 z l1 b0 p
#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH" q' s8 K) q+ P' |9 h( P
#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上
( x |9 J! _9 \- e; O1 e- }$ t#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏
5 ^" D6 z. x$ y$ O#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上: a3 s; @7 _. D& m O# t3 h. c
#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -: j3 z. u1 I& q
#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店
5 i8 e1 R6 z/ d4 Y: d. c#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV
7 l& W6 U5 N; @+ C6 U: v* v#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道
! q L! Z; {. r+ D#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带1 H' Q, p* l5 ]
#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上 v) f0 G2 d' h( T4 M$ I
#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -
U+ m! |( a( o- y6 D0 H#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上+ B+ [. Z: w! Q2 e) E8 z) M
#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -- ^, e( A$ N5 z/ A) h+ u2 o5 v
" ?; ] y: V; h8 {#define PacketItemMaxTick 150
5 D2 x; U+ a/ q5 F" z2 l2 c#define PacketItemPickUpTick 20! G7 ]. l: Z+ ^' V: x4 f$ ?
) j; N6 n; @1 b& L
private:
- B5 J& k3 g# L5 a static DWORD _PKTItemTick;3 h$ T' e3 y2 C2 z) d% t
static DWORD _PKTItemAction;( j- y. n' c: T( B! B% O0 m% s
static DWORD _PKTItemID;# R) f! {. {! A5 x! P' p2 @' C3 U
static BYTE _PKTPKTType;$ h! _1 t* \/ e) c B- g; i ?* h
public:
% L1 c; _9 N2 y+ q; A static DWORD PKTItemGetTick() { return _PKTItemTick; }& _) o4 c/ |: r6 V& n8 W- Q5 p3 Y
- j9 K5 ~5 M2 ?9 l# @" X1 [9 x) A
static void PKTItemRelease() , I D: l, D/ o: Q4 `8 N
{
8 g6 a; F2 T5 h* ~ _PKTItemTick = 0;
" g \8 e8 n' r# |+ v: A ? _PKTItemAction = 0;' ~* D# b5 J9 g% Q5 r4 z; O! ~
_PKTItemID = 0; q, ]+ K( F0 \6 r: [+ ^! f# `
_PKTPKTType = 0;3 P( G5 f4 A5 L4 u# p5 t. d
}" z) L$ T$ O7 i, ]( c+ I
7 ~. t2 ?7 u2 Q/ f; ? static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick)
$ h& Y8 {; H& y9 I/ |8 {0 ^ {: N( f1 l) I3 ?$ T7 K
_PKTPKTType = aPacket0;3 p2 F f1 \8 L2 r# _" K
_PKTItemTick = tick;
. @. q7 m& O7 e7 H+ w! J _PKTItemAction = ItemAction;
+ G( G/ {6 c3 u5 Z8 w9 \ _PKTItemID = dwItemID;
% i% S7 N( |# Q) u }+ `+ x* \; H8 X+ N K5 |
; |! z' z- `7 ~# |. ]
static void PKTItemTellW8(DWORD tick)7 a- Z: a$ p$ R! D# G
{
) |& V2 q- L+ ]$ V _PKTItemTick = tick;
! \1 O5 }, k7 g' H5 L/ q- D }
6 O, n! `$ x% |3 S! `7 t1 E0 d; }. c$ N
static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor$ d$ r0 c7 K' V4 r
{; {$ g/ e0 X$ |) b4 \# i
if (aLength >= 8)) T. [/ n- Y- O2 E' _
{
! V" Q% E Y" M. q7 m* ^3 `& R! S/ g DWORD dwItemId = 0;3 P2 a3 P' h6 v$ T% h+ Y! a
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));* {- G- N5 D9 |( H1 r5 T8 V
if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE, ?: a9 H2 S: d& k0 A
&& _PKTItemAction == ITEM_ACTION_TO_STORAGE
" d: r+ l( y; b, D% U/ ~' ^ && _PKTPKTType == PACKET_NEWITEM
. |3 R/ U1 I3 M1 f/ a8 o' @9 w )
, o6 T% ^! J* q2 Y0 K {' n/ C3 f9 o1 _' D9 e& G
if (_PKTItemID == 0 && _PKTItemTick)
2 L8 C9 s4 p4 y [ {
/ U. ` r4 M1 ]9 ]2 T PKTItemRelease();1 z) N f) e, Y- v) e
}, Y$ y0 D4 c, Z
else if(_PKTItemID== dwItemId&& _PKTItemTick)3 B! a; |7 f7 W/ u% A$ _
{
9 _/ f5 j9 T- y PKTItemRelease();% H6 _, |: a# Z9 p) z9 O) ?
}
# R) c7 z. ?0 K+ F! A }
% o2 Q. C5 |& }* A8 N " u; @6 e* C0 f. y$ e7 p; P+ ~: A
}# ~9 r% H4 U9 y
}
5 N7 d$ I* {3 T. p! I
, f* y8 [) [; z& }; A' X+ C; A0 X0 R static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored* i, Q4 C; C5 i
{" F1 j; d. S3 {1 t5 ]/ J
if (aLength >= 8)
. y3 u! J, ]$ _8 g# ?4 x y* a {2 p: x/ P" Z. C9 p3 t. r8 a
DWORD dwItemId = 0;# n6 }$ g) ?" {
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));9 M0 V }" x x# S3 p# y# q* P
if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE* N- |: s" s, F; v" L, r
&& _PKTItemAction == ITEM_ACTION_FROM_STORAGE5 f5 ^* s- r8 C$ y- ^% d' |" U6 w
&& _PKTPKTType == PACKET_ITEMACTION1 t$ T! z: {: [! G' \
)) Y, |& ]7 u% l8 L4 d
{3 S. g+ V: h9 H) n0 j/ h
if (dwItemId == 0 && _PKTItemTick)# S. W8 F6 N" ?; u7 U* Z' ^1 k
{
. ?' M7 z4 Z! S' m t/ d) h PKTItemRelease();* t1 U) j4 h$ A" P
}
$ N/ h& c5 w ]+ Q else if (dwItemId == _PKTItemID && _PKTItemTick)5 V0 X* v& T/ N+ ?) h) @% x1 X
{8 q: _& _9 Y0 W' D2 o8 e# y2 M
PKTItemRelease();
( L/ |: M8 ~, b6 L5 ~) e2 w! Q8 O }/ s4 j; X) g) ]4 I& j
}' _8 E1 |% e) _$ e& G7 A+ t% P6 z
9 o; f {! G7 B& m: ?# M }* C H6 ~8 Q9 K& ?7 ?
}/ B. d2 k: W8 g' E
- L3 @2 _$ ^7 H* A& F' E" M static void PKTItemGameLoop()/ K( | ^; x6 H, y
{; ~% }% _, r3 w+ C# b: k5 C4 h
if (_PKTItemTick > 0)
# _: \7 z" I5 c6 J; J _PKTItemTick--;
% U( D" {, W3 P* y; M$ [ else if (_PKTItemTick == 0)
& C# S, p0 N! a+ d7 V5 ? PKTItemRelease();
$ n" l4 P7 s! c. k% k, U Z }
% h- m- D: K0 ?1 x% X
/ [1 \' z1 H+ D$ V( i+ B static BOOL PKTItemCando()
4 E0 ~! R* d0 Q [4 ]( r& D+ | {. S( G7 `% D7 T
if (_PKTItemTick == 0)return TRUE;
+ X! Y) Q# l- O( ~* \ return FALSE;' V' j ?# s$ g- _' }
}& T$ h6 O3 r/ r: V
" N- V2 C" E- m
static BOOL BuyItem(DWORD ItemID, DWORD npcid)
1 j6 y/ W; }1 h9 ]) C% m {
: S& r4 N H. q2 N6 m4 ` G j PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
. X1 q+ j/ {2 i- p& x1 ~' ^+ R BYTE aPacket[17] = { 0 };% w3 L2 E$ N7 \% E& o+ Y
aPacket[0] = 0x32;
2 o7 ~0 Y! d+ Q ::memcpy(&aPacket[1], &npcid, 4);4 z9 P: o' q; [' h6 X& _) b
::memcpy(&aPacket[5], &ItemID, 4);$ x5 Z" _1 s& l: A1 p D
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
' d9 x" ?3 H) u2 U( C) T" q D2Net::D2SendToServer(17, 0, aPacket);9 T9 i2 G( W0 S* v0 c. {
return TRUE;% a% _( K. C( t
}6 H4 U9 p0 c, \7 y. s
# h. E; X! Z, t/ `, C$ K, i" O* M
static BOOL SellItem(DWORD ItemID, DWORD npcid)
, B) j# {0 `& P$ Z {
/ c) j) J7 l1 M3 ~2 F PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);$ a! p/ T8 B; `# |" o, s% s/ S
BYTE aPacket[17] = { 0 };
& G4 ~ n4 \4 R% b8 `2 h4 ? aPacket[0] = 0x33;
4 L! P5 ~6 W6 U4 \; h0 L ::memcpy(&aPacket[1], &npcid, 4);; N8 A) `- E7 y0 H1 H
::memcpy(&aPacket[5], &ItemID, 4);: L3 ^& S8 ?( n: v; ?
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);, M J. G9 ?1 }/ B
D2Net::D2SendToServer(17, 0, aPacket);
+ X4 `# b& s/ P! ] return TRUE;2 f# H D) |3 H
}5 {5 K$ p- E0 J
5 G4 o4 e3 K }! o" O5 r( L static BOOL Interact(DWORD nUnitId, DWORD nUnitType);1 Q+ G2 {0 i+ j, R4 M
% q4 R1 W" a# A% C k) e/ x
static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);
3 N. M5 L: o8 d& O" g
- ^( g+ R5 h6 w& v6 } static BOOL OpenCube()- [: q, `% x& W* p3 Q! p
{8 T: J* w; I( R) e
if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;
7 P! Q# X: ]$ k# H. H/ e5 M+ |$ r7 r# v" V" ~* P, v" k
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
) j# r" A9 C7 _* @! }) R if (!pCube)8 Z/ g& }# w+ d* t+ o
{
5 f9 w. d) `! Y2 X+ A. a pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);' B* N8 h3 ~" J: s: g& S' d" j
if (!pCube)
/ W9 n' L3 {- X9 P- D( ~ return FALSE;6 L6 k, }/ z# J1 u7 K3 E
}9 k8 @! q' J, w3 C: t- J- d* X
PKTItemTellW8(PacketItemMaxTick);- [2 h' a2 E; O$ b5 v* A
6 ?, |& A3 x# D6 p% ~$ l" J* o! o1 @
D2CoordStrc mypst = { NULL };# E$ e C$ V+ i( ^- `) ~& `% M
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
: n v: g. O `( [ A3 v6 ?3 R2 r/ r% L
BYTE aPacket[13] = { 0x20,0 };
) F* l" g( ^$ F$ @, l* M ::memcpy(aPacket + 1, &pCube->nItemNum, 4);
: N: u4 f5 p) H0 J ::memcpy(aPacket + 5, &(mypst.nX), 4);! N! U) P" u6 g0 t3 r' I
::memcpy(aPacket + 9, &(mypst.nY), 4);7 [% z) G8 U2 p6 t6 y
D2Net::D2SendToServer(13, 0, aPacket);' V7 S. x) h" L3 Y3 N( J
return TRUE;
+ l5 u$ ]% D% g% m }9 ?8 s" `. _8 K2 _- G/ n3 P) w7 q
: y+ b& O" p8 N" T7 u6 H9 W
static BOOL ToInvxy(DWORD x, DWORD y)- |) q! {, B+ n. W- m5 z; D; i
{
! o* D& R! x( E2 R UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
2 h; i: ~- b5 j* Q/ x6 L/ f3 b6 ~7 X9 u+ k# ^1 H5 z
if (phand == NULL)
$ F' R V' I+ r w9 x% G5 | return FALSE;. y' P) d: P, h& t8 q
; g( i/ t( \/ L, G0 B* k( a PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
2 b/ X: Y* u7 |' I3 `- p/ |1 ~; @4 I4 H! x! D/ ^; E
BYTE aPacket[17] = { 0x18,0 };
4 a9 e' y; Y& ?# P0 ~ ::memcpy(aPacket + 1, &phand->nItemNum, 4);3 t" [0 r: i. w# [5 q! w& |# {3 V
::memcpy(aPacket + 5, &x, 4);
- u3 B; e8 s) u) L; z Z ::memcpy(aPacket + 9, &y, 4);
! ^& t" j/ b* V& i O8 i D2Net::D2SendToServer(17, 0, aPacket);( {! k# q8 @) A4 M' X# N
return TRUE;
+ x1 u8 o, @5 D/ s4 j. A& F( ^0 f }) t; y! d% p3 Z' T
, m) l( k! I( g! n% F( E9 V
static BOOL ToInvRandom(BOOL bBagFix = FALSE) t* J& O. K5 u# { C2 ?& X
{2 p( {% p, f# O; g9 m; y8 F! H0 C, I
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);5 s" B( y( L, W0 x/ q: M$ A
if (!phand)
: N x* n; I' W; Y% o ? return FALSE;
* k# Y4 p0 _3 J! S int desx = 0;4 T8 \/ T$ k8 n4 z% g
int desy = 0;1 ]. @7 {( ^0 {) F6 N/ ]8 k
if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))
C* r, S5 Q5 @. z {
- t- i/ M. ?# k" @% J( f! v ToInvxy(desx, desy);+ {$ u. O) i$ r. D$ C1 n* c
return TRUE;
3 S/ z1 Z- e, w. N" a }
9 i' N# [* ] K8 c# I3 R return FALSE;
) e( A9 N& Z+ c4 p8 i% `: M }/ h1 X- k8 U; A" |4 A& b6 J
: E) r$ ?' ^ X7 ?: c static BOOL ToCube()& u& _( v8 j, |! Y9 C* z0 ^0 O1 v
{1 q3 Z1 q j2 M! s0 d z
if (!(*D2Client::ptPlayerClient))return FALSE;* z- ~. k+ M/ P# D" o
* t; T( F3 ?# \8 ~4 h2 ` UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
3 X0 Z, @4 F u+ r if (!phand)return FALSE;
" ^$ z4 T" _9 ^ z% C9 J6 W7 l0 ?1 j' M2 ?. ^2 H' x6 ]7 `9 K
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块9 N. [7 L0 O' W: E
if (!pCube)
- i/ f! Z% u4 o: F+ x4 d3 [ {
3 \/ A$ `' [/ A pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块
8 u1 U/ e4 j6 U) i/ |3 o' X0 ?8 u, [ if (!pCube || !pCube->nItemNum)3 Z: a& R d( S" @) g
return FALSE;! P/ W' `7 c5 U! b2 G7 z; n) z
}
0 f( F8 x& Y* A& m8 B2 e! u6 k7 F. G5 Z* C6 b7 z
if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))
- f2 D- H; i5 D8 G: A5 T- o return FALSE;
M' R7 t) G1 u; v, F
- ~# S3 f8 k" d# M PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);: [5 m( h2 Q) }! }& A m7 d
: L7 [2 {! ^1 l9 q* T) o BYTE aPacket[9] = { 0x2A,0 };
+ r: z; O3 i1 i, p6 k( l7 m ::memcpy(aPacket + 1, &phand->nItemNum, 4);
6 G8 D6 S6 q, l$ d7 [8 Y ::memcpy(aPacket + 5, &pCube->nItemNum, 4);% q9 p+ e' @7 \- k) P
D2Net::D2SendToServer(9, 0, aPacket);
! O) M/ M- H; K5 @5 y* D2 g return TRUE;
6 x4 s% q6 l% f3 f4 t7 F( Y9 b0 t, ?2 ?7 x6 t5 v, o) x& Y6 {: B
}
2 F* A, n5 M8 |8 D$ i
. l( j: i* Q8 v4 o$ Z6 l' ` static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);' E2 r$ M3 p9 F! Q. F1 S! Y1 m# h8 f
& r' s! B1 l$ b. h( K+ h
static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存 |/ J Z/ V/ T& \& |! L
{
. M' t% _* d* v& d: z$ K# j D2CoordStrc mypst = { NULL };
3 t1 D; ~" h3 ^/ `- E/ f D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
8 S; K4 ~$ G0 Z! l& H2 F* s$ r! R, X2 B5 w% C* ^
if (!mypst.nX)return FALSE;
: \/ l% U4 T$ [7 L
; F0 p ^ B3 B! K1 @, n PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);- o* M" q' b v3 X- a* j, G) C
F8 X" _6 @! r
BYTE aPacket[13] = { 0x20,0 };/ Y7 ]# i" u% g7 y# i! }' w
::memcpy(aPacket + 1, &dwItemID, 4);" `# g2 V# v5 P o, s. Q+ `* }
::memcpy(aPacket + 5, &mypst.nX, 4);
1 h/ G) q2 w" | ::memcpy(aPacket + 9, &mypst.nY, 4);
/ E1 J0 C' x+ @ //return D2Net::D2NetSendPacketToServer(0, aPacket, 13);' e- @: N3 }1 i$ n2 x+ ~
D2Net::D2SendToServer(13, 0, aPacket);! N6 g4 Z2 D; J( b7 H+ Z2 X$ ^
return TRUE;9 `1 c# q5 ?. `3 A) i( `( g
}/ a# Z' I* @9 W. y+ G
8 d6 Z* c9 r5 A! {- k5 X
static BOOL DropCursorItemToGround()' a* H4 o+ n- G6 W! f
{
# r% [. @$ B/ N- @ UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);( E5 g% h5 F4 y( x( y5 S
if (!phand)
* `9 o+ \6 j% g9 U6 D* t1 U9 z return FALSE;
7 K' d- v9 ~. U5 a" S" B
, k$ j6 f8 C6 I3 r PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);
/ O( F4 b2 U7 h0 C0 T+ ~
( k+ [% ~/ j8 t s3 x8 N# e BYTE aPacket[5] = { 0x17 };
R7 D/ |# v% Q* t4 v0 n ::memcpy(aPacket + 1, &phand->nItemNum, 4);5 J! _: g6 c8 _' _+ ^
D2Net::D2SendToServer(5, 0, aPacket);/ I1 Y1 E( w" R# v( y
return TRUE;; R' `. ` {3 A% g
5 {7 T& _" U2 U! _+ | }
! p% R# N- R2 `3 Q5 p# [( @4 U9 c- q& F* n( y
static BOOL PickStorageItemToCursor(DWORD dwItemID)
0 s6 P' _# p ~% M {4 {( E0 a% [& V7 x o: v
PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);) i* i3 y: @, o8 C; u7 a q
7 X% N8 z7 x! b1 Z6 [5 k4 W BYTE aPacket[5] = { 0 };1 }( K, f4 n( Z7 x
aPacket[0] = 0x19;
' r. t1 `" X& w5 }) F" j1 P8 W ::memcpy(aPacket + 1, &dwItemID, 4);
+ H- B5 ~; N3 }+ s- w //return D2Net::D2NetSendPacketToServer(0, aPacket, 5);
; e1 I/ U |6 v3 a- N D2Net::D2SendToServer(5, 0, aPacket);
3 o- G7 E% d3 j' S, T1 t& | return TRUE;
& V* o4 \7 g/ m% ^7 J }3 p. d' G- v. j/ D" T* O9 L/ V
! V3 Q' E8 ]) @; ~3 S; V6 i
static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)
* Q. }( a) V1 c% M$ N {# S# ]2 f. e. ?2 D& A
PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
' A/ L1 I$ S$ u9 A4 P BYTE aPacket[17] = { 0x1f,0 };" h& C! w2 a" i7 ~1 a
::memcpy(aPacket + 1, &ItemID1, 4);7 K, k f. P0 q H
::memcpy(aPacket + 5, &ItemID2, 4);
& @8 Q8 e" B. a# W: i- `9 h //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);/ u' b. y6 ]2 B# L
D2Net::D2SendToServer(17, 0, aPacket);
' k! {/ u5 k4 p* q u7 F, Y return TRUE;
1 t" X, w( ?' H% l. s3 v }3 x" Z, ?; |% G$ z7 h; {
- o( V$ Q6 l" p B( `
static BOOL Transmute()0 b9 g6 ~/ Q: F: Q8 b) ^
{" _* a$ A* n; p" z& r9 j+ c
if (!(*D2Client::ptPlayerClient))return FALSE;
( s) G V% H9 A# J, L; i! ^+ B/ K2 N! v5 c J: m3 J# t8 W: K
if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))# E+ ?' m0 h. c8 ^
return FALSE;
1 `; N, g( ^ {8 Y) |5 d! p; Z5 J
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);# r9 `2 C: u R/ B2 Q0 }
BYTE aPacket[7] = { 0 };
) O" S* a/ W; M! _ aPacket[0] = 0x4f;) `3 G6 @: i! F6 n5 i3 y3 a
aPacket[1] = 0x18;
2 A( B8 T. ~8 N* Z) v D2Net::D2SendToServer(7, 0, aPacket);- d4 w0 K8 _' B" F
return TRUE;
' \3 u) ?, K" t b0 Q" ~ }; p6 F7 |& V2 ]3 s; I4 J9 N8 x! @+ O
};
5 d; p( k* Y7 `" e1 w6 e' o
& a3 b2 w! t6 p |
|