|
|
转载
& P) |7 T5 u ^' B+ v4 q' p; Z自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:
% j* ~" O- z9 }3 \ tD2Client:2 v5 o% v5 N) i" x
6FB20AE1为拦截输入框(用于获得命令)* a* D* o: I/ ^5 B) Z
6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发
: V, `3 w+ U& p n6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发
# Z. R8 K3 \- n3 a, j; _6FAF4230为hackmap的loop点 我用的hackmap导出位置
( k( g U, O/ R3 Q, F
/ r6 y4 r( H. o$ m
& n" J8 J' _6 d. N$ x0 {* \发包函数:5 n$ V3 ]3 U" Q" L! F1 M
class D2PKT_ITEM
4 H( N9 k9 q1 M' B- y8 ^0 Y{, O ?) K b1 K/ G0 m' P* c* {
#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上
" X( Y v! r ]) i#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多
( `* x; N- ?7 j. x( |& n0 q$ U#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上; C3 T ^* N3 o
#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上* j8 J# w# n. `5 l K3 `- ?/ p
#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH* w. B) m' ~: F2 \ f( L
#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上- c+ G5 h# r( } a
#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏' o i/ Z4 ^3 g" m" d
#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上+ ]3 i& t, E9 w! y- r+ j
#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -! w) b I. j' f0 X5 J* f8 M
#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店
. q6 u5 E* ]5 ]% M& j#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV
G( V! p2 |" D1 w#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道 9 G/ d3 u/ T" V
#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带
: ?8 _* D x+ N7 i7 }# U" s2 n#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上
1 E8 _$ P6 ]' f- r% w0 b/ v#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -
5 V0 ?3 q, w+ x1 ^* u#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上7 V: c% W5 B- R, f
#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -
1 N; R- J) @7 @9 c O* _
: ~2 ?( U; l( X, f# ^+ y#define PacketItemMaxTick 150
. M' y* ]# b q4 G! z# q! d#define PacketItemPickUpTick 20" {6 M7 K& e2 F/ v/ }
- P: T _5 S4 K, H& `: [
private:/ r% l( N& v X7 B
static DWORD _PKTItemTick;. n$ H" N1 \- s8 V/ M
static DWORD _PKTItemAction;7 B4 b6 m. L4 ]6 `
static DWORD _PKTItemID;7 X1 t0 G/ [. o1 P
static BYTE _PKTPKTType;
1 k" E: i0 c% x3 Y. k& r- Tpublic:- t% ~5 U% \0 Q4 g
static DWORD PKTItemGetTick() { return _PKTItemTick; }8 F+ C$ Z9 S/ u" P) C, D
" I8 s$ B9 H' B
static void PKTItemRelease()
& h8 H% I0 t0 e$ F {: _; v2 u, x4 y& `4 m5 K
_PKTItemTick = 0;! P/ l! q0 m/ \
_PKTItemAction = 0;
- G: l+ Z* f0 K" l( W _PKTItemID = 0;8 o( M- M, u7 w8 \ ^. X1 ^
_PKTPKTType = 0;$ f$ w2 M( M! o
}6 Q( N4 D4 ]8 j+ ?8 {# E3 y) x* Y
! A2 n( m- l' {( g' @
static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick) a9 J3 a- F% S5 Z
{# n; U- ]* O( }5 m. D
_PKTPKTType = aPacket0;. k' h! k) Y% ]5 i+ [
_PKTItemTick = tick;0 c3 E2 A& I' p8 a! P; T0 I c' S3 `. @
_PKTItemAction = ItemAction;
* P1 K. m \1 l+ z/ ] _PKTItemID = dwItemID;/ ?2 P: R/ \( E0 O, C6 F' \' c
}
* t$ a+ n" n E4 ^' E! `% g2 L m$ U: X, O+ p, t2 s6 ]
static void PKTItemTellW8(DWORD tick): L" w* k1 |$ C5 @4 p
{9 W9 G) ?! X* c
_PKTItemTick = tick;7 y7 w: c8 w* x) o. E
}, U% g& X0 z0 h' l
$ X! q6 q: }) }8 s
static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor" A* t9 d. m, S' }, B" l7 x
{: Y& f4 b* s& y; M
if (aLength >= 8)( I8 @/ ]% x" q( T; U
{$ @0 F0 k5 i8 x) Y/ A
DWORD dwItemId = 0;9 @- l; D+ ?$ j
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
# ~- x1 \9 j9 I if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE1 Q; t& K. Y# b: u
&& _PKTItemAction == ITEM_ACTION_TO_STORAGE0 P- q1 \% P9 E% r. B1 n% D
&& _PKTPKTType == PACKET_NEWITEM
+ r7 v" ~* \9 W9 Q6 E )
5 y" }5 V8 D4 E {
+ C$ R5 n: y. V: a if (_PKTItemID == 0 && _PKTItemTick)0 [$ T# V Q0 M5 R' J% i
{
& g+ R2 V1 j( Y" P6 V PKTItemRelease();1 j E7 r& ?6 E# |, D
}% s4 w$ q. Z. N8 Q
else if(_PKTItemID== dwItemId&& _PKTItemTick)- r o3 ^" y7 y0 k, ^
{
2 Q3 A7 J6 H& |3 B PKTItemRelease();
0 r' z5 Y$ A9 {% |- m }& b! m7 @$ C a$ {0 X( V/ k, |
}. _4 L8 M* V! \6 E4 |5 @
2 F l, P! L, t. k! x }
: @# ^1 h" |# e Z, v- s* b ` }
7 g& k) P$ P' o: V
0 y' s/ y; ~% M6 \- { static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored' k8 K& t3 R8 n* s. B0 w
{
8 W2 I1 w5 S. C, L0 }8 | if (aLength >= 8)
% D; \( \) A9 V3 F {1 T# W7 p! V" a/ q; g
DWORD dwItemId = 0; ?. W9 [( d5 p6 L5 t/ E9 ]3 h
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));* d9 Y4 o9 a5 m5 a
if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE
! a7 x" N7 i! h && _PKTItemAction == ITEM_ACTION_FROM_STORAGE& t* \% J1 s3 V: Y4 c3 c4 H
&& _PKTPKTType == PACKET_ITEMACTION8 w7 z, _% n6 L& P1 P7 b
). {- I0 v6 \% b
{5 p- W# F) F( E4 k% t
if (dwItemId == 0 && _PKTItemTick)
% `) q1 Z! Z* H% f {
- B: i6 l1 h9 S8 D& @% ? PKTItemRelease();$ s- o5 |0 Z/ m; N
}
4 D* ~+ ?: }9 | else if (dwItemId == _PKTItemID && _PKTItemTick)1 }6 D& u. Q. N6 \3 T, F
{
2 k. w) ~" y( H5 X0 }" g+ ? PKTItemRelease();
- b# ?& v( K. h }5 ~0 \( w4 `6 d) _: \8 k& s9 z
}3 U! U5 L$ c0 D) o) J, @
3 Z; ?# P/ G" B! q4 n
}
% a$ o; Y/ @) V }4 L; m! c) X0 D, t9 V* H
$ G- d7 B" r7 Q
static void PKTItemGameLoop()
( s' d3 I7 |' m8 \. F" O' `* I3 v {
7 T+ T- d' X( e. e/ J- j# T. O if (_PKTItemTick > 0)
, z" r9 x1 f" h, F7 L/ Q' G3 ^ _PKTItemTick--;
5 i) Z: U3 \( n! j else if (_PKTItemTick == 0)
/ t' T5 L. Y1 z4 y) x1 X PKTItemRelease();
. | y |' S9 F7 n( f* K }
. c' \: F7 o. `- x! Q& }
- d" c5 @7 R( z; ` static BOOL PKTItemCando()
0 L. p. L5 {% |0 @ {! z* I" m* }3 ?4 m8 z1 u) g* ?: b
if (_PKTItemTick == 0)return TRUE;! K+ C' K# Q: l5 c. K, Z0 G) R
return FALSE;1 h" }: r' @+ x! B/ v# A
}
- u: p5 N0 s- y. ~# g
- H& w! E$ c3 [# A- Q static BOOL BuyItem(DWORD ItemID, DWORD npcid)
1 V& G4 T' q( H% ~7 k6 }# f {
1 J7 b+ g8 k* n/ Q$ ]- z PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);9 D! {1 y" ^% I5 [$ h5 E! N8 z
BYTE aPacket[17] = { 0 };
1 x) }8 v+ n1 ^6 B) Y1 p% | P aPacket[0] = 0x32;
5 x1 |# V: _* }' w0 G ::memcpy(&aPacket[1], &npcid, 4);
/ z2 F% O1 c! l# ?1 W7 h. k" U2 I ::memcpy(&aPacket[5], &ItemID, 4);0 O3 L5 U$ [; b" V1 j. z, v) r
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
! Y) Y6 d% u# g! d. z' r3 Y. a. { D2Net::D2SendToServer(17, 0, aPacket);# M0 |- K3 ~, Q' ~3 }/ i0 E* _
return TRUE;
3 S: L( t( t/ a }
4 P; |# Z7 I' Y" ^* e3 E
4 B1 O$ L0 O& B1 H4 L& @ static BOOL SellItem(DWORD ItemID, DWORD npcid)
. N8 ~- y- Y; W& e7 T4 E( D {! {) a6 `* h0 ? e. j; S+ _! Y
PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
# s3 V" o4 Q6 ?2 K7 _; K( y: }/ y BYTE aPacket[17] = { 0 };3 b$ D: u) B0 Y% k" C
aPacket[0] = 0x33;3 _6 J+ x7 v) J' }& C
::memcpy(&aPacket[1], &npcid, 4);, |3 U9 i: `1 u/ j4 i
::memcpy(&aPacket[5], &ItemID, 4);
" @% E' w3 q0 _8 h //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);9 { Y1 A* \, w V5 y7 @3 T, K
D2Net::D2SendToServer(17, 0, aPacket);
* N$ w; _4 ~# p+ X2 k return TRUE;0 x! S4 H/ i2 @( ~4 h& k
}
; `" u$ o' F- [
" |( W+ H. c' X/ C- | static BOOL Interact(DWORD nUnitId, DWORD nUnitType);
+ ~- S: A8 P) ]5 [# N0 r6 \/ h* N* T$ K
static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);2 Y/ h+ N) ^$ B& ]: w7 I4 H# Z
( R# u+ ?: [( ~' A static BOOL OpenCube()
. c" b! e) D7 Z5 l7 ?$ d0 z2 _, f {
5 D) a. k. |% d) ]: } E if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;; h0 z9 E- l, b9 T
) E5 f- \) n: l0 k0 _3 x UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
) Q4 A2 V5 o* Q/ W8 s$ A h if (!pCube)1 v" t* l! Y5 y
{
1 z4 ~7 c1 U5 {# o& J% C pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
3 X) a4 P' z( b" |& B, h; u, S/ c if (!pCube)
! S/ Z% v/ Q/ W5 S return FALSE;+ ]4 l% ~: B! x
}
" M0 v. L! X, V0 G" `* V PKTItemTellW8(PacketItemMaxTick);
' m+ k- P: ]- @# O( d6 F
' l' \ ]9 p' H V, r% T D2CoordStrc mypst = { NULL };
. i; [+ L. X8 j+ e D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
& c% u4 |' {2 R% @8 `
x/ S$ i2 @ c P BYTE aPacket[13] = { 0x20,0 };" R8 h; ~2 `, Y! D* o0 p1 }, E2 k
::memcpy(aPacket + 1, &pCube->nItemNum, 4);8 S5 C8 u! c* |. P. w7 B% U; W
::memcpy(aPacket + 5, &(mypst.nX), 4);
) K5 w7 R% }7 w7 W; { ::memcpy(aPacket + 9, &(mypst.nY), 4);1 f3 O9 H; J( e1 b
D2Net::D2SendToServer(13, 0, aPacket);
% s9 f' M0 n; Y/ g return TRUE;9 W) q, \7 w' a9 _
}
) ^8 A6 ` J* i! ?6 X0 m( G! i- r/ R" f/ N6 O! Q8 F9 w
static BOOL ToInvxy(DWORD x, DWORD y)
" }( I( `+ H$ X O* K: A" J- m' e {
7 W/ y& ~' e6 L' z7 [ UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);0 N: y. z6 o& m7 [' J$ w
4 A$ D. `" u6 H, m+ v if (phand == NULL)
$ d" a& T0 C. y C3 R$ Y0 Q return FALSE;
+ r8 |- _0 `# Z, b( @' Q. l* }* z0 z Z' b( L6 j2 y
PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
; J. u# W& p! Y' C5 T e+ T. N2 j9 r5 R6 L: i8 w7 T, G0 g* T
BYTE aPacket[17] = { 0x18,0 };
& b' z1 o+ ]7 o ::memcpy(aPacket + 1, &phand->nItemNum, 4);, d3 q5 E% e+ ?; r3 ]& f; @4 T
::memcpy(aPacket + 5, &x, 4);
1 e. P6 Z, D! D; b3 J- z ::memcpy(aPacket + 9, &y, 4);
( X" I0 p6 d; Z( g D2Net::D2SendToServer(17, 0, aPacket);
! K5 [8 C+ p* D# ~ return TRUE;
! [1 z) c/ l* U3 D! B* z }
0 C6 K0 u+ q: g; L. \% {/ S6 Q6 o* i: @. m' \/ b
static BOOL ToInvRandom(BOOL bBagFix = FALSE) . n" C5 ~7 Y3 I' G" K
{
7 m# } [4 E' l+ Z& ^# M UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
" l" P W3 V1 c8 I( B o if (!phand)
7 t* v1 Q: S7 f6 x/ c3 ^, r) E return FALSE;$ x: d! B0 N5 g
int desx = 0;7 g, x) l8 m6 d2 _
int desy = 0;
* L, j' \9 g' k! M if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))
" c7 N1 p Z' ^ {
! r j7 K) V7 Z. ^, r/ P: f ToInvxy(desx, desy);
/ ^0 i! A/ |, a2 S$ V return TRUE;6 \/ k+ T5 ^& C3 X
}. D* w8 Y' w$ c. R
return FALSE;, ^4 G7 g6 W7 _8 D/ Q* Y
}' G- ]& f, V. b3 b6 B: e2 Q0 b
; R' v4 {, u5 @ static BOOL ToCube()/ @. V! Z6 f' i
{
6 B7 N7 b( i! h: s if (!(*D2Client::ptPlayerClient))return FALSE;
2 F+ S8 ]/ o+ T1 q" G& R: G. }2 \8 r/ `3 ?* R' q5 k; g
UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
, X6 r1 n4 v. \ if (!phand)return FALSE;
& T% l8 Q' `; ?- m6 j* P; R+ D! Q0 ]0 s! q3 S" p: j
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块6 A7 k0 d: ]$ p% _' w$ L. b" }. D
if (!pCube)5 L& Z2 f1 L/ Z9 S) k( A1 t. T
{/ @7 l1 ~3 w6 d7 w2 f9 i
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块0 ~: F& d6 j! {8 }/ l Z, g, n; K" W2 H
if (!pCube || !pCube->nItemNum)) q6 X+ G c7 }
return FALSE;
& `; U' M/ ?! S2 }4 l }9 ^7 f5 _6 ]$ F
6 n" W0 m! w" P6 p- u5 W
if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))& P& M' H5 u' _- c* S4 I }7 v
return FALSE;
7 @! v! V! F5 w i% Q5 w0 w- C4 Z) D+ @6 [1 G7 K1 E
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
& l" e4 n; u. X- N) I7 m$ y, N1 I% m$ K; ?8 O# {. F
BYTE aPacket[9] = { 0x2A,0 };
! R2 p* T) D" n7 j; g! J2 d( e9 n. j! S ::memcpy(aPacket + 1, &phand->nItemNum, 4);7 {' D8 m4 o0 Z: o% q& n
::memcpy(aPacket + 5, &pCube->nItemNum, 4);- u* F+ ^3 m5 t& y" ^
D2Net::D2SendToServer(9, 0, aPacket);3 K& T7 e+ n" f" ]" m( [, a) u
return TRUE;- S- G! Z- V& O, n2 e
: C$ _) {1 j) k, `: C8 P
}" q c4 \ X/ f& [
# l% q+ V* D9 B" y static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);7 b: Y$ g5 I4 ]4 i6 P* ^3 S
& _2 V2 n& P! t) r' `4 N7 c8 H+ U7 e static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存& @4 ?+ {" ]0 w% P& e: N# D, o7 Z3 L
{, o" y$ a1 L- E$ ~# U1 i, G5 x
D2CoordStrc mypst = { NULL };/ u5 I6 ? _7 O- S# G& |* m
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);! e: a$ E( g' a* \
0 w6 v7 ]3 {5 U5 g) ] if (!mypst.nX)return FALSE;, p( }/ W: O, Z3 G
3 f; s. \8 j2 [3 {& y PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick); b0 _) j: u- J
4 y9 v: F1 q7 v/ A
BYTE aPacket[13] = { 0x20,0 };
* p% I8 h$ q, ` ::memcpy(aPacket + 1, &dwItemID, 4);
: B2 k: L8 o5 X+ \- m) j ::memcpy(aPacket + 5, &mypst.nX, 4);1 X: e8 y7 X" L2 P8 q6 a, S. L
::memcpy(aPacket + 9, &mypst.nY, 4);: u- e* ~) z/ t
//return D2Net::D2NetSendPacketToServer(0, aPacket, 13);
% D/ ^5 `/ X# Q D2Net::D2SendToServer(13, 0, aPacket);
* }3 ?/ R$ \$ A3 O return TRUE;
7 t9 u @, o7 d6 w2 V n }
5 H. N+ e6 `. V& i2 |0 U# n, }
& F9 c# a `6 s& r+ W( h static BOOL DropCursorItemToGround()) J: F |/ X/ _) w6 S
{
6 n1 s( _1 K E8 j UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
! Y/ g0 U) N* \% u if (!phand)
. P4 n$ t6 _. P$ L7 H% e+ G return FALSE;8 P1 j6 }9 g1 \, k+ v g# k
. l& C6 @8 N8 I, Z3 J& e6 s
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);: J. f% ^; T' b7 R( l+ ]% G
W: H( Y+ {& B3 }! F) {& h' R
BYTE aPacket[5] = { 0x17 };; O$ R$ g3 q5 m' ]) d
::memcpy(aPacket + 1, &phand->nItemNum, 4);
' d6 ]2 ^4 g# Z2 A7 K, ^0 g, J D2Net::D2SendToServer(5, 0, aPacket);
- s/ `. `; n, B2 U) B, A return TRUE;7 H, o4 ?/ b5 I# W" M. _8 ~
$ D. C- s0 u; ^( A4 @* |
}1 x; |3 z j- |* e2 Z
4 p+ f) m/ x4 [$ X8 q static BOOL PickStorageItemToCursor(DWORD dwItemID); ^5 [4 R# Y9 t5 Q
{ C7 \9 U( G) p7 f2 u4 t
PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
+ R# H- c0 @1 _5 M1 {/ V* f2 z5 Q0 F4 Y! r% D9 I
BYTE aPacket[5] = { 0 };
$ |5 j/ a' v% z% U aPacket[0] = 0x19;8 T+ q4 d/ R7 Q$ {+ _6 L; @* ]
::memcpy(aPacket + 1, &dwItemID, 4);1 r: V) Y% R% D8 N8 j3 Q
//return D2Net::D2NetSendPacketToServer(0, aPacket, 5);
5 M' Y- U5 f* ?. c5 @: T, U D2Net::D2SendToServer(5, 0, aPacket);5 O& n# n& X$ g! _1 y+ W; X
return TRUE;
' v; r% ~1 n9 p }
' D4 }: G! N/ \' a% m$ ?7 P) X9 h
static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)! ^, P+ D" z3 Y+ f3 ^! l
{
2 X2 R5 q6 {- V5 | PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
3 h4 J: k" g9 _/ z: S5 |% G+ k BYTE aPacket[17] = { 0x1f,0 };
1 w, d' _: k9 A1 d9 S ::memcpy(aPacket + 1, &ItemID1, 4);
7 ?; `- n- g$ Y/ Z. z( r0 T) G ::memcpy(aPacket + 5, &ItemID2, 4);: U L+ P6 ^) l7 l) B9 ]
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);4 [ i% X+ n$ [. \4 j/ M' [
D2Net::D2SendToServer(17, 0, aPacket);- B, o6 e. f( Q8 g- s
return TRUE;
( X( _+ i% s4 y# ]0 d }
' y) V, G! |0 T8 d- e; R
+ A9 I, S7 n% q3 D0 Y static BOOL Transmute()
8 v4 w+ ~( d0 P4 O4 N# {0 h- W {9 `8 G2 f0 G! f! Y' A; Q/ l
if (!(*D2Client::ptPlayerClient))return FALSE;
% B3 {" q S. K$ ?2 ?& c! D# a1 d' _- `. A
if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))3 p" ~- \$ E/ p( t; ~! X
return FALSE;& D+ w* F* j& p8 I0 B/ v
3 p8 R3 [7 E5 v PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);( s% V% y5 H6 K1 q
BYTE aPacket[7] = { 0 };5 {% L, G5 w z' `
aPacket[0] = 0x4f;
o4 @, ?9 q- H3 h; j2 F aPacket[1] = 0x18;: O) T' H, Y" A g t
D2Net::D2SendToServer(7, 0, aPacket);
0 m2 Y2 Q6 x; `' J return TRUE;
+ G, O6 D, R1 F! [& D }" r* q5 `9 k1 R. V$ A+ S
};
+ u& ~0 Y# y- K
" ~4 }: u5 q% h |
|