|
|
转载
# [& y* d& Y& E% D- H' Q# E自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:3 a* d/ d- o( k4 k, \: `: }' w
D2Client:
$ J- s4 l3 G) |6FB20AE1为拦截输入框(用于获得命令)
- j3 [8 h' R5 S+ h' Q8 H6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发
- [8 v0 o+ g2 V* P7 W+ C6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发
0 k: G% N0 q3 A$ i! n6FAF4230为hackmap的loop点 我用的hackmap导出位置 k Z5 G2 W& i& \' g1 [
( r2 c* ]0 \8 L! \: R( u8 [
8 d' w' j( B* b# l) c5 P发包函数:- i, A6 `/ Y+ g! k# Q3 U4 v5 ?
class D2PKT_ITEM# e4 _3 _' s, R
{
% K5 F# D# ~" a+ N8 S# _- A#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上5 J* u9 P& f' N) g/ i
#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多8 m' f v: {* Z7 p3 R
#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上, c. @) w' `8 z5 S- d
#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上
6 k/ m8 \' C, v1 c7 X#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH' ~3 C& E+ X0 X% n4 L/ p
#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上
8 K; Q7 o8 n: t2 w#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏7 O V+ p4 u6 h- C- P- b
#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上7 D9 q. ?5 ~, r: c
#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -' B- @4 ~. X. V$ @/ u3 Q5 B1 }
#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店' {. H* W J% O
#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV
, ?- X5 Z. g# H. w: e2 t4 ^- ^6 u#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道
0 B" A# Y/ }2 L: M% A#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带7 [8 w* p& `% e t& C1 G2 D" K
#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上
$ v. @( j8 _+ ]& T) E#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -9 G% m( q9 ?- Y" u- o. @
#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上* p% l6 p i2 ?8 S' w) f
#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -
7 o7 O; J" S; c% x) a. d' \; Y3 |7 r7 t/ }6 O
#define PacketItemMaxTick 1502 C8 O" \. h& b1 P2 K0 H
#define PacketItemPickUpTick 20
! v2 ^; i4 V5 _, {# v, \% x( `) ~
/ z9 S6 O# w( j/ J8 s/ \private:8 l1 A& D$ _, P" b' A' ?) A
static DWORD _PKTItemTick; J' y; d2 S& [. ]
static DWORD _PKTItemAction;
3 m% m: t, C: { static DWORD _PKTItemID;
6 e' \9 N8 x G9 i$ J static BYTE _PKTPKTType;' D' a/ X; f2 }1 R/ T- U0 m
public:
! |, ?! O9 b' `6 b static DWORD PKTItemGetTick() { return _PKTItemTick; }& u) H3 }4 ?- f9 O1 S7 o$ F2 E
5 w1 b0 d8 k: O1 D static void PKTItemRelease() ' z2 b; T( b$ L* [: F m: p
{8 N6 f6 P! G: p* w! m. Y# C
_PKTItemTick = 0;
" K- D; h2 [) h; h5 O& Q, t _PKTItemAction = 0;" t- m! `. S2 o" j8 t0 [
_PKTItemID = 0;
9 P$ H9 Q2 H, J9 \$ V+ _ _PKTPKTType = 0;
( J% K+ W' G! M# Q# l }3 z4 O z" z) b/ X5 |
5 S7 Y$ P& n( b2 f1 d
static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick) 5 [5 V9 c- }- f) j! W
{2 [. _' f4 u/ Y6 B1 h6 B1 Y
_PKTPKTType = aPacket0;' v- A* W% }3 f
_PKTItemTick = tick;
% ^7 j; P; U$ k+ Z _PKTItemAction = ItemAction;6 w: d9 s4 G7 J/ b0 u
_PKTItemID = dwItemID;
3 j1 G, G& {4 X1 {' t }3 n2 C: F: |9 M( ?2 c3 F. F0 H/ ^
. }$ v. S! g5 F# i8 b+ h$ u$ L
static void PKTItemTellW8(DWORD tick)3 g9 @/ U) P% [* Y4 l% \
{9 o% B# k0 b& W9 E
_PKTItemTick = tick;1 a$ k9 ^7 x! O# Y S
}
- @( m6 T. |% i1 p" I
7 A/ Q. ~: q4 i static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor1 G- C1 k% m! ^, n5 v. m
{
: ]' `: V" v* x9 c3 F if (aLength >= 8)# n* T; P' z+ J+ ^: H
{
' h: l1 C! _7 W3 e. a$ n5 U DWORD dwItemId = 0;0 j8 G" o: ?1 n3 s" C
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));% C% r q7 h2 H, U
if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE
5 r& k/ L6 G9 Z5 M8 R && _PKTItemAction == ITEM_ACTION_TO_STORAGE- f2 L" w3 i1 D" z |
&& _PKTPKTType == PACKET_NEWITEM
( A$ \& m3 r' e+ G )! \; G* F: e q! l
{; I8 f1 D h) p% W) l
if (_PKTItemID == 0 && _PKTItemTick)
% [& j" A$ ]8 _0 d2 |1 y" h9 A, f {
4 u& _. Z6 c$ m7 R/ R PKTItemRelease();
0 t H% k) w# K; m1 E7 V( j; ~, k* e }
6 @, q1 ~- }- S( a# O* ] else if(_PKTItemID== dwItemId&& _PKTItemTick)
5 c5 O( j1 N# { {
0 X% c( h- j* I v% E PKTItemRelease();
0 a; G3 d" Q, r0 d, S# N* ~1 A }/ `- \$ A5 `; {' s0 y, H% e6 l
}! }7 a5 C1 t& N' a% }
; w! n% g! O& t0 { }
6 {" t6 n6 ]: h! O4 z$ Z }
6 }& n8 ^# d) t) j! @2 t
) S5 F6 }7 p, k: \ static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored
8 I; q, p) H3 S" p: m( Z1 Y# q/ f5 N {! x; x# D+ X, D$ l1 l* y7 A. Q" G
if (aLength >= 8)" j& `6 \" t, g8 j! u6 V
{: f& c$ J$ y, n% I D! p; Y
DWORD dwItemId = 0;. v9 x8 t& [( N; g" j
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
; L. w6 Q4 \' U% ^ if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE- |7 ?, W/ Y5 h& |
&& _PKTItemAction == ITEM_ACTION_FROM_STORAGE
( t5 b" `" P: k5 ` && _PKTPKTType == PACKET_ITEMACTION
# L' e" q5 @: [, J6 S )) b( T9 f/ N4 G+ b, F6 e8 Q
{
3 N. _. m5 [" Y if (dwItemId == 0 && _PKTItemTick)
2 C3 m6 E/ { x2 X {
& V8 O5 \$ ^4 V3 { PKTItemRelease();+ u4 w+ a& f# O. l' {& E
}6 ^2 z" [( [( K! O4 Q; Z0 ^1 C$ G
else if (dwItemId == _PKTItemID && _PKTItemTick): x8 p! G" d. h7 }; q8 O l
{
- u8 p8 o& n" @! V* B PKTItemRelease();
& \/ p) @; @' @) N }7 ~+ I' N( b6 P7 s$ z/ ?, s
}
5 L b' [: \3 j7 w
8 \: \* d# u2 O, h; j7 ` }
* r' i; U7 n" U' G }
, [* k3 ^! h/ Z
8 o3 B0 y0 Z7 V, x6 H- L static void PKTItemGameLoop()4 y5 t; E$ z" T5 `
{
# N- t c6 X! i if (_PKTItemTick > 0)
& E- K2 u! M8 U0 O X- j7 b' ]8 J _PKTItemTick--;# {# m3 L/ i: [7 O
else if (_PKTItemTick == 0), k. F; A9 \4 ]# b9 y7 z
PKTItemRelease();
9 U3 {0 Y) I4 l3 u' J8 n }" p m2 O+ c- {+ R2 R
0 v: U" v& N% o& T% \ static BOOL PKTItemCando()
& ~. [6 }8 V! T {1 z3 m1 ^* g. |/ }
if (_PKTItemTick == 0)return TRUE;* E6 C' Y% X- V& \
return FALSE;
( g3 K* j4 x$ w2 c1 d$ |' P }
3 T+ j& Q; n2 L: c' r0 Z/ o
. m! T2 a+ A r+ E. o static BOOL BuyItem(DWORD ItemID, DWORD npcid)
) w% G% Y# o% `: j0 J2 F( B, E {
% B; G- H | P3 j" r PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
; M; E# e; y$ O( @5 y4 g! H BYTE aPacket[17] = { 0 };
: r7 j8 m$ D z h7 r8 k# h aPacket[0] = 0x32;
$ u# C) T* Q6 O ::memcpy(&aPacket[1], &npcid, 4);1 U" m6 R9 e2 U8 v" [) F
::memcpy(&aPacket[5], &ItemID, 4);
0 z2 e5 ?7 r4 z //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);) y+ w9 `9 f6 e) e& x
D2Net::D2SendToServer(17, 0, aPacket);
' L+ Z3 T: b7 n2 U return TRUE;
) l8 F2 B9 v9 V, L' \ m }
8 ~& g2 H* R* g6 Q1 H3 `8 q
: O; ]1 R) \$ Y' N/ ` static BOOL SellItem(DWORD ItemID, DWORD npcid)
) j$ ~2 T+ J5 M9 A, _$ d3 k {
6 q' U9 w) v- U( ^% a PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);. O' n" Z1 s D
BYTE aPacket[17] = { 0 };0 r% v, \8 F0 L' u( n% F
aPacket[0] = 0x33;
4 `& R1 z0 M1 c ::memcpy(&aPacket[1], &npcid, 4); U7 }+ A6 w8 }
::memcpy(&aPacket[5], &ItemID, 4);
" n/ R/ Q7 Z2 b6 g6 J' U, d2 u9 g //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
; Y5 d7 M0 \/ k- p. i. {9 i5 Y0 j" B D2Net::D2SendToServer(17, 0, aPacket);
$ R O" `+ X5 `! H; z1 l& ]& `" _ return TRUE;9 ^3 g6 ]/ t- y$ h
}
! V. K3 z4 C. R- ?" f+ q/ ^' l2 z8 n# i
static BOOL Interact(DWORD nUnitId, DWORD nUnitType);
7 L& ?' `1 f" F s
$ f6 k, @! ?0 m0 H! Q1 K static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);
2 ?) v4 e2 z+ f9 y% V5 w
" T' F. p% [7 Q) U, Y0 l- o static BOOL OpenCube()
- W% W8 b# ^/ V {
6 W$ T/ x6 X# h; ~7 d if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;
6 S+ p- T; F0 {1 O* ^5 ^5 w' e) e
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);/ i4 a- i$ l5 I. u: F
if (!pCube) g4 k- ^# `0 D9 S$ L- h; `
{
, A% |% y8 S2 X8 X$ j# ]; X' I pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);& o! X, q, H8 A2 H: N. `" K
if (!pCube)
0 t3 f2 I: r W9 I: A2 M return FALSE;
) _* H3 K; _- |5 P }" O3 S7 V1 [& |* Y& q+ e0 b2 C
PKTItemTellW8(PacketItemMaxTick); s9 q7 h' t: e- C9 |
( Z( Y8 E# ^; P a D2CoordStrc mypst = { NULL };; |0 Y; n A5 A5 w& N4 z4 T7 z% O
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);6 o# X4 C/ h/ J3 p R$ K T
- w. A Y1 j$ @+ m4 f/ ^4 k% i7 w BYTE aPacket[13] = { 0x20,0 };
! c4 Q7 _! b. u. a6 n ::memcpy(aPacket + 1, &pCube->nItemNum, 4);
! D# h6 R, D) G5 ~# h/ f ::memcpy(aPacket + 5, &(mypst.nX), 4);7 g3 u* P7 d% ?9 c3 f( k7 v
::memcpy(aPacket + 9, &(mypst.nY), 4);
- a2 i& d+ c* y0 J# w; v; W* y: l D2Net::D2SendToServer(13, 0, aPacket);; F/ n$ L' f3 v o. Y
return TRUE;
! l5 m$ P0 v$ H4 {( ?) w* y& O4 u }
6 {$ y0 i. R, A# ^$ _9 f: E/ o) }0 |; |6 H |
static BOOL ToInvxy(DWORD x, DWORD y)& |" v5 O- Y4 f! h6 [. U
{0 C& x$ T6 I- z5 b9 p& w" v1 d
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
3 [. i& F t( m; S. X5 x6 O# P, h; N4 N* m
if (phand == NULL)
) I8 ?* b0 H2 j. l- T return FALSE;+ m1 g' L# `' @/ ~/ x! i
' I0 p2 M4 U+ @- Y2 ?% t8 C7 L! @
PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);9 B& ]" M2 y; l# n8 `
3 g8 z& {3 U# r Q" U BYTE aPacket[17] = { 0x18,0 };
8 V( o2 l! t4 Z6 I0 i$ E6 ^2 g ::memcpy(aPacket + 1, &phand->nItemNum, 4);: p7 K) n) n0 h2 \) O
::memcpy(aPacket + 5, &x, 4);! T. R- e) x0 f* l0 @2 K. u
::memcpy(aPacket + 9, &y, 4);
+ A" @( l! v& L1 Q5 K6 R D2Net::D2SendToServer(17, 0, aPacket);! |% H/ k( n' M7 O; R
return TRUE; A, J( a/ b p3 v0 K f- b
}2 m8 k V/ {% X6 p& Y- d0 L6 p
1 g5 K' l' o: z; B static BOOL ToInvRandom(BOOL bBagFix = FALSE) # p) U+ c. @* L
{, u& `* C0 M6 u, n* R* n4 a4 R7 E) W- e
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);& I5 n8 L* Q) x( V7 R
if (!phand)$ z; L: \7 c( I3 K
return FALSE;) {$ A i( ]$ U( Z
int desx = 0;- N& m) G: ?0 _2 p9 U4 J+ x
int desy = 0;3 I, j. D7 x; n& A
if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))
3 F0 Y T7 x+ M4 N* y {3 A6 _ p$ ?7 D5 L% H
ToInvxy(desx, desy);
2 G; c" f) h$ E, H( q6 d g' n return TRUE;4 G: j2 ~6 Y2 r
}
7 y8 X& n; [! q) r5 b; i- u$ w2 p return FALSE;+ E) i9 c B: a: w
}1 J \' E- ^# N+ M; ~& D
" z( p5 L+ b4 k6 c& a: e
static BOOL ToCube()' F" _1 c+ Z; @& i. O7 S
{
' a/ F @8 X) T7 F# f- W if (!(*D2Client::ptPlayerClient))return FALSE; N+ M) H# G9 ~3 c- w% A% l
! e! q. ]' J3 p5 N UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
8 C0 D. f- x. I( E% ? if (!phand)return FALSE;4 |, ~# z! g1 \+ m+ U+ H1 A
' d A- A, D* O! E UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块2 Y/ ^( l1 ^! t- W( m$ A: T$ b9 p
if (!pCube)
' r' s8 ]9 e4 G2 F {8 ^7 v+ ^# ]2 e6 ]8 I; J
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块, r# D- W- q0 S: `0 N1 I
if (!pCube || !pCube->nItemNum)! e( t* P/ w5 Q1 Z- R+ ?9 N
return FALSE;
6 s9 c* ^% ~1 G }' H. l; [% _; [
" [5 v/ |/ l" f M% D if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))& S& [% C4 R K
return FALSE;
" F9 o# B2 P' X' }% T, K
6 r7 F% Y! X8 i* I3 g u! k PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);1 |# i5 j' n! F( x
Z) F* k5 E) I- o BYTE aPacket[9] = { 0x2A,0 };
8 I: e' q, W m2 y7 g, S ::memcpy(aPacket + 1, &phand->nItemNum, 4);# f* \+ x* e7 g+ A: G$ x4 L
::memcpy(aPacket + 5, &pCube->nItemNum, 4);' O: c* C T/ p
D2Net::D2SendToServer(9, 0, aPacket);
6 g8 B3 i& E" f3 O2 H) t return TRUE;
! h3 E* C& o3 ~' L1 q0 @3 T1 m$ _- x
}
$ j9 r; Z; `* d: U4 p* J9 |/ J. c' i* ?% U
static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);+ y2 s" Q c$ @* J$ O0 X/ _( C
1 n# G' k2 I+ X2 D+ Q4 Q0 d- L& e
static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存$ P- f* d4 s, b& W3 U
{
) c& W7 a* T: e" L& N7 C' q* d D2CoordStrc mypst = { NULL };& {7 T* b, G+ w3 p5 q5 e" O
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
4 K2 I6 Q. `8 A! P. ~2 C; i
; S- e2 H- u& M4 v+ f) P0 ? if (!mypst.nX)return FALSE;3 T1 q1 S4 K$ V. R
$ H/ g" N7 y6 Q+ w- D8 p PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);* w* O/ i! ?* L
( f+ a! u+ d& ]) h8 A- E
BYTE aPacket[13] = { 0x20,0 };
6 a8 o/ z) ^* ^8 C$ u( C! p ::memcpy(aPacket + 1, &dwItemID, 4);0 b, {' Z, j# Z7 w0 a: A, J
::memcpy(aPacket + 5, &mypst.nX, 4);9 f& k5 o9 p$ T7 @4 ^+ ~1 V
::memcpy(aPacket + 9, &mypst.nY, 4);
) Q; a2 @( b" N4 n; m8 N //return D2Net::D2NetSendPacketToServer(0, aPacket, 13);
7 g! x' K3 I" O0 ?4 | D2Net::D2SendToServer(13, 0, aPacket);
, Q% L$ i! h5 R5 k return TRUE;
2 p$ H: f, |; x" Q4 c }( T3 f+ D# x! h
1 Z& N- ^4 }& t+ n
static BOOL DropCursorItemToGround()! ?; S& y" W( P$ H6 o5 m' m, @
{
# |8 r: `# ~ u4 G/ ` b UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);6 C' R E2 n$ u4 }5 m
if (!phand)
4 T# `+ d v+ |$ } return FALSE;
4 z9 w( t7 O# G+ E! d1 c+ q/ H1 E1 o
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);% d: d7 v2 v; ^7 Q% K
5 N$ w3 j* C. i" A* L
BYTE aPacket[5] = { 0x17 };
9 J/ S% k; b5 `6 e2 _% J B& _ ::memcpy(aPacket + 1, &phand->nItemNum, 4);
: @" |) i* ]8 k3 t$ B D2Net::D2SendToServer(5, 0, aPacket);
+ L5 h$ d: a& |4 }4 Q2 U: o return TRUE;
& B9 {( J1 C5 J
4 @! O8 }" D5 e5 l5 } a) Y }. Q% f% a* {( V
: k0 O4 P- j- z; g- [, ~ static BOOL PickStorageItemToCursor(DWORD dwItemID)
6 u* {$ U; d( l% T9 }, y) @0 D' R {
- t2 Q3 W \% F% A' n6 c/ R PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);& F4 x, V8 @6 a' e3 }
$ s" d( Z( u, X
BYTE aPacket[5] = { 0 };
; [8 B, ]& T4 P3 u5 c l2 ^ aPacket[0] = 0x19;6 E& R% p! r9 w2 Q R& d
::memcpy(aPacket + 1, &dwItemID, 4);
3 c W) L8 M" _8 Q //return D2Net::D2NetSendPacketToServer(0, aPacket, 5);
3 v8 k+ Z" r7 M D2Net::D2SendToServer(5, 0, aPacket);
+ L) L1 X& b9 W* e return TRUE;
/ i9 B+ Z4 t! Q }- E; B. A9 q. ^$ i
) N2 X2 F/ s w
static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)
3 ~. I- N5 k/ e% ] {
( F$ X! n5 v; r: D. f PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);* o/ m. V1 ~/ }
BYTE aPacket[17] = { 0x1f,0 };
1 E" E$ ]/ g5 u: \+ l$ p/ @3 P4 f ::memcpy(aPacket + 1, &ItemID1, 4);5 t3 Y8 w; C% U, v2 j" ~) n
::memcpy(aPacket + 5, &ItemID2, 4); D* N1 k6 p' @3 ~& ^" c
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);8 e( W" o, Q: `: z! w
D2Net::D2SendToServer(17, 0, aPacket);
7 @& O. V4 C5 x6 ] return TRUE;6 ?7 v, N. I3 I' U! M5 Z
}
: Y8 d6 ]8 X" [% e; E& `" y- m) e4 y+ H( {: U" `. z4 t
static BOOL Transmute()
; V$ N2 Z+ j B: B% y5 @ {
% D* S+ |$ A3 d2 j. e) o% n: q if (!(*D2Client::ptPlayerClient))return FALSE;
: f1 B1 ^2 D7 H; z& H, `
8 d, q9 e$ R" `6 t$ n& G if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))
% B. y s V. h+ e0 _ return FALSE;
: [8 y' N( L" ?/ H8 o9 @- f% G# A/ ~" f3 ]
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
3 @' [, N2 y" o2 [7 t4 ` \6 i BYTE aPacket[7] = { 0 };
9 n+ b- P( F+ S1 f% O4 L/ M aPacket[0] = 0x4f;
+ z6 c, V+ ]! Y) {, Y aPacket[1] = 0x18;; k4 m+ l4 M: s
D2Net::D2SendToServer(7, 0, aPacket);. ]) o, [9 g0 [, c; Z2 x+ g
return TRUE;
3 i) A# v8 K3 F4 O$ ~ }; k \: b' [3 v5 Z5 T# T
};0 O1 b: \7 Z; b: f `) c' x
# c0 A A8 @7 J8 P9 m; z |
|