|
|
转载- g- I7 i+ N1 `8 m8 U
自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:+ F- L7 g0 T2 |2 U# X9 k/ u- G# }* k
D2Client:
& R4 d' R4 [6 o' d5 t6FB20AE1为拦截输入框(用于获得命令)# z6 J! G8 P' K8 f
6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发* o/ y% @* E2 o# f+ y9 J& W3 ^
6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发
9 l5 }7 {) \0 b3 l: q6FAF4230为hackmap的loop点 我用的hackmap导出位置1 n& Z! H# I1 Y; c8 P
# j9 D/ M' _8 o
x- Y0 Y3 w6 x发包函数:1 \/ k' j' T$ G
class D2PKT_ITEM
4 K* q' b0 `5 f" ] ^! Q{
" ^* u1 c9 Q# t1 f#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上- a2 J% a _" {9 k9 f
#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多& o# Z, h s9 r2 `4 N5 r# M
#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上
. [+ P, j7 T) k7 N" X0 f$ S1 R0 q#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上; a1 c G# c u! j5 D. e
#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH( ^8 A1 g7 v: y/ ?1 ]; q
#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上/ X H; @2 ?4 _4 z# y, X! Y# p
#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏
& ~3 |$ \. `0 j#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上
! x2 u* W* l* \- {5 Y2 |. C7 c#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -
2 B4 O6 i: J; U* h#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店
3 z! c: q7 u% F) f; g7 R#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV
: Z+ t' L2 K( u+ }2 p$ d#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道
4 E M! u# t \# x$ M& C& G* ]8 b$ ^#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带- N" S) T5 n5 {; W
#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上( N$ }; @; ]' ~% `, e: L c
#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -
' a7 [$ P+ A' t% B2 f# P1 Z8 D6 B( f#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上' k# T) F% R) W3 T3 ^$ F' U
#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -2 M. ]0 }1 i: ], m2 i/ A B
9 W1 |# ]% j1 `3 ?5 ^8 E* e#define PacketItemMaxTick 150# M8 @. z" b1 N/ G1 ?
#define PacketItemPickUpTick 20, R2 s9 Y# N. e
! t; R) R! P) }8 q, u, xprivate:
( K# b# L5 f, G4 B- n) \ static DWORD _PKTItemTick;+ q8 y( |4 D0 Y! F D
static DWORD _PKTItemAction;6 x7 f9 V0 `3 P( z! ]% c
static DWORD _PKTItemID;0 T) u3 w, l; @/ l" N, O ]
static BYTE _PKTPKTType;0 t' Q. q# v) `* Z. L/ X
public:
8 s: I7 W$ Y6 o/ H static DWORD PKTItemGetTick() { return _PKTItemTick; }2 S2 b8 U( t6 C. j* r' ]
, X* N. i5 H; Z# b3 ^8 u
static void PKTItemRelease() 7 a3 C6 ^1 v/ U* d. w7 @# s5 u
{
2 O3 f5 }2 {" x! M, ]* w& o _PKTItemTick = 0;
% O( S: z4 D) e4 j _PKTItemAction = 0;
7 G7 k* {) E8 l, F2 I( t _PKTItemID = 0;
4 f7 k1 U4 ]- [, g$ u- @ _PKTPKTType = 0;$ J$ U) V- p. R% P1 a# t2 L
}6 f6 }5 A) @/ B
9 u: W% Q! K; ]) p4 k; t' i' q
static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick)
; U5 L8 D g, W: N {
* Y# s% q% J: X _PKTPKTType = aPacket0;
4 _* B3 G& O2 N* q# w _PKTItemTick = tick;+ G9 L9 `& O: g7 p$ @
_PKTItemAction = ItemAction;
' z L; K7 M, _7 C7 e2 x1 K _PKTItemID = dwItemID;" w" \) H9 L: v4 ]1 l1 X9 p
}, v, M9 K2 r4 y# Q
. I2 h0 j/ I% I6 l! W; b( i static void PKTItemTellW8(DWORD tick)" G' T% Q" R& ^( a: d
{
- B( N0 F a5 O- t: M6 C: K _PKTItemTick = tick;8 g7 F1 S, m) A3 g+ Z2 T
}
) U$ V* n* F+ K7 B" [( c0 y* b- K( C0 y8 b6 b
static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor* Y P' H5 N) _8 b! C
{
4 w' b' P4 M4 u0 n" S$ p/ l' E if (aLength >= 8)
+ ^3 y ?4 K; ~; o/ H {$ I, W( @+ B% C/ Z/ q
DWORD dwItemId = 0;
8 W4 R7 S& `% }4 f3 q5 }, T6 a- { memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));2 e& r5 l0 @; H/ d( @# c0 W
if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE
/ r3 j4 c& s+ @! a && _PKTItemAction == ITEM_ACTION_TO_STORAGE
2 q2 z; c) c) a9 A2 e1 i9 Z && _PKTPKTType == PACKET_NEWITEM
* T* R8 A1 l/ i! a+ N: h )" h! R1 a( N6 a# t, ~0 c
{ W/ Z" Z2 p7 Q! _/ Z, [
if (_PKTItemID == 0 && _PKTItemTick)
: D3 j4 `3 T! _ {& w g) j- A% o" N
PKTItemRelease();6 J" }. e0 S& I7 ?) a* }1 Q
}
" `% X" w. b9 \. E8 j else if(_PKTItemID== dwItemId&& _PKTItemTick)- S' r+ w0 w1 e3 s& R
{
# X6 B+ z1 X9 W- f. T PKTItemRelease();
! _9 X8 z1 ?& B }7 y! f; G# I! V4 C
}
8 r) F. r; X! e" g) W9 R. F $ t! ^/ j3 ]# R+ L- r1 J( F
}/ {1 ^1 `- d% `% s
}3 \( b4 q$ l5 k% `9 O5 m5 N0 T' X, c
& f9 l) P1 y/ a1 k4 N5 `
static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored. S# _5 l6 F7 d# m4 ]8 B
{0 @( _6 F9 Y( N/ h' {* I0 d
if (aLength >= 8)
/ S) z4 _$ @1 Q( g! @# c) F: E* N {
2 z) x" B4 W9 ]* g DWORD dwItemId = 0;
; v$ U4 H L7 _/ p- ~, @- { memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
1 N1 x" d5 O2 c9 \) _" J+ c if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE! D5 Z2 {( W m- H$ j' G2 h
&& _PKTItemAction == ITEM_ACTION_FROM_STORAGE
6 C$ r6 v0 X5 Q && _PKTPKTType == PACKET_ITEMACTION
+ s# C( P% S- {6 A; ] )7 O: Z1 O- d* O9 {# R
{
: b" a# `9 \: W( ^# I/ Q U% { if (dwItemId == 0 && _PKTItemTick)
; [8 m8 C* c# j {& R! `% ]& f* h& |, G2 K6 L
PKTItemRelease();
( m" u# s7 L) x }/ E& K( Q( m4 x( x9 g5 B
else if (dwItemId == _PKTItemID && _PKTItemTick)
8 x& @! b: g$ l) ? S F* h {
) n. i# ~, \ {' ~4 \" _ PKTItemRelease();& s/ e4 }& P- r
}4 [& \! S$ F$ j4 O
}' v, Z: j7 u! }
7 U! {5 h* q+ f" }9 L& H }
" e2 F( U9 _- H9 v }
3 I3 x0 {' }6 [, X" t! N2 c7 ?3 K: ]0 n0 k; j
static void PKTItemGameLoop()2 {/ t1 r! Q* U# J% Y8 |
{$ u2 w( l- a7 X
if (_PKTItemTick > 0)8 ]' O2 n3 M3 |
_PKTItemTick--;4 z; _) Y2 f1 L) N$ S
else if (_PKTItemTick == 0)
f$ ^% p& |9 J2 `1 H% k8 P7 L PKTItemRelease();8 `; p1 E" {/ v; x6 g, s
}
1 N- o$ @& w! m- B! n
# c7 S, @$ q* b2 N4 N7 a+ \! M$ f static BOOL PKTItemCando()
5 k1 M8 K8 l" m! T/ f; H D0 z' K {
# C' `* {! V4 O/ A5 V, Y; S if (_PKTItemTick == 0)return TRUE;
. e- \! C8 X5 k return FALSE;
3 c0 X! b0 r- _0 w* [) \5 S, f }' \/ T" M ^% [+ w; p! m% e. x
1 p' y8 D Y6 v6 ^
static BOOL BuyItem(DWORD ItemID, DWORD npcid)
2 E3 }' u2 q, u" g {
7 R, F5 d i V+ g PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);8 a) b2 c' [$ _8 H6 e2 W: h- `
BYTE aPacket[17] = { 0 };9 S1 T& f: F$ n4 U- O' a
aPacket[0] = 0x32;
8 G* ?) b) s, `& F4 c3 h% f ::memcpy(&aPacket[1], &npcid, 4);
; V- G Q, T* s$ M. F n! C. g ::memcpy(&aPacket[5], &ItemID, 4);( n; Y( v# Y; K
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
; v6 [* e. T+ f2 s: M4 R5 |. |+ f D2Net::D2SendToServer(17, 0, aPacket);0 `/ U; n/ n$ @7 K
return TRUE;' V) \3 r/ l' b& F6 g
}
" u' T+ u4 a4 \# ^ N! y# X! X. @
1 y. ]$ M! X( s, `- j7 ] static BOOL SellItem(DWORD ItemID, DWORD npcid)
7 w, T- L* J' D L: Z/ a1 d {; E* B3 K0 U4 D, |- D' u
PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
% R* u$ I) q$ W6 { u$ t9 h BYTE aPacket[17] = { 0 };9 m8 ~0 V6 m) d" `
aPacket[0] = 0x33;3 j* B% e8 X$ ]1 g
::memcpy(&aPacket[1], &npcid, 4);
6 u% N4 A2 S5 Y8 \1 O5 D r) G. V1 m ::memcpy(&aPacket[5], &ItemID, 4);9 ?$ Q2 r' p& W/ r" |
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
! {5 c" f8 A8 a8 B" M% X D2Net::D2SendToServer(17, 0, aPacket);
$ ]0 u( m/ L7 ~: G# U5 \& u return TRUE;- L% A7 Y& K3 Y0 q
}$ G& j. V7 |/ J/ n* U+ s
6 ?6 b P/ W1 Y
static BOOL Interact(DWORD nUnitId, DWORD nUnitType);
7 ]' A& e6 l( `% d7 X5 W7 k5 V
) N3 p8 l, b L! p0 I static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);! ~/ d. }' X& z1 i- L
1 r6 U( T' H, W+ g5 e
static BOOL OpenCube()
* e9 t" b# r; v5 u; {2 i8 ^8 D {
/ d! I6 n& k! k2 y% x2 L7 K if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;
& [! I- z8 _: {2 w" Q0 ?9 |8 b6 }5 n k( J
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);. S: G4 j/ I5 t$ y9 I
if (!pCube)) ^1 a+ l. r+ s; F. [. `
{
! p; A: s# o" Y( H" t) j pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);2 Y% b+ n) j4 z+ g
if (!pCube)
# a5 O; E9 s9 _6 X+ y return FALSE;
& A D5 q# }/ E: B0 { }0 z% Q- R) A( t3 \3 `8 A
PKTItemTellW8(PacketItemMaxTick);& z" f4 a) W; }: b F
- j. X" S/ v. u4 u& n# f; V D2CoordStrc mypst = { NULL };
5 r+ z+ ^2 W$ t" t+ ?6 s# F D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);! Y5 @' s; t" o
1 p8 |; Y% v2 D0 Y BYTE aPacket[13] = { 0x20,0 };/ z' q3 j' t- G; W7 ^3 z' I2 {
::memcpy(aPacket + 1, &pCube->nItemNum, 4);( L' ^' I6 L, h# o
::memcpy(aPacket + 5, &(mypst.nX), 4);& H" f7 \7 Y- y
::memcpy(aPacket + 9, &(mypst.nY), 4);: R5 G) g) Z8 o/ J
D2Net::D2SendToServer(13, 0, aPacket);! [! }# }2 O0 W8 T. Z
return TRUE;7 x# x3 `6 V- z0 W1 Q8 _* c+ v
}: I# l5 E, `& y [
3 [; Z8 a) t, k, q
static BOOL ToInvxy(DWORD x, DWORD y)) R8 v( O( l8 \/ Z! e
{
/ u3 r8 w! i; i7 m T UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);. s: \9 A/ u k- ]1 U5 _
( H) E) b6 Q- }5 F* a
if (phand == NULL)6 |: Y+ N+ @" G) R# |& A
return FALSE;0 B' G" d9 C1 {( z+ L/ |- T) A
; T, I, v& v: A+ H, G PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
7 U& L5 _4 Y( q, E' ? {
2 @* D" U: d% `$ y( j* n BYTE aPacket[17] = { 0x18,0 };
. y; {4 h1 ]. X ::memcpy(aPacket + 1, &phand->nItemNum, 4);4 ]/ h3 ?6 S- [- O; h0 @
::memcpy(aPacket + 5, &x, 4);
. M R- y' ^7 U' V ::memcpy(aPacket + 9, &y, 4);
* `, h! y, |) n D2Net::D2SendToServer(17, 0, aPacket);
6 W" |0 a- j9 y; U' T) P& e9 r return TRUE;: r( {' b& `; z* q3 ~) [
}
4 Y$ r* C. ~6 t9 f- n, X, G0 a5 X0 D H( a0 B
static BOOL ToInvRandom(BOOL bBagFix = FALSE) $ o; O5 @' x4 F7 y- _
{- Y% p& V6 _* w( L7 k8 M" e
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
/ \- y2 f6 k2 l; ~( G9 S0 ? if (!phand) f; w) |* b! X$ l: _3 l: k6 G
return FALSE; [* G: W/ {9 F" s! m
int desx = 0;
$ }& F* H" L8 u( j- V) [ int desy = 0;- ^2 A( V& r: u" t
if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix)); t9 ], V; ]# R' ]; a3 n+ g
{2 f I- }+ S2 f& @
ToInvxy(desx, desy);
% t: w C, j, X return TRUE;5 M- G' B; i m/ e5 g1 E
}# M. E% L& y' V2 A* F
return FALSE;, S9 Z# }2 j& o6 }& b6 x* a
}
+ e& G4 k0 J- K' E. x
8 q% M1 C- b# G( {: b# L+ l static BOOL ToCube()
- f; P) _' a) O7 Q) `" P: ` {
/ g z+ w' U4 K/ c8 M if (!(*D2Client::ptPlayerClient))return FALSE;
% \1 O9 [$ B" u/ F. j- P/ c% y% ?! i1 V
UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);0 |: O1 }3 q* O3 }" ?! S; S
if (!phand)return FALSE;9 u" ^+ m! v5 v, W( P+ D5 X( T6 W; m% |
- z1 U* |, a, Y- }+ R6 O J UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块
- ]. ]9 {6 U. i! c if (!pCube)
' ?1 g6 R' D: X6 {2 l {6 ~. x" W7 Q7 K1 E E) q' |
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块
! R, _4 @3 o; a if (!pCube || !pCube->nItemNum)
+ R) g) \" l1 ^+ Z6 P return FALSE;+ u5 I: e* N* Y: G1 k9 ^8 y
}; C& A: T. `. u
3 ~. |% m) V) v5 Z' O& K if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))3 s& o5 b* Z) Z0 E9 ]1 k
return FALSE;( K; e: O$ b" B X/ F7 d8 Z
/ ^5 I/ a2 u5 E5 \! G. _9 K
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
0 r' m, q& O/ }& ]- D1 J* |+ x: c2 t" |3 X! {" I% c" K3 x9 w5 {! M
BYTE aPacket[9] = { 0x2A,0 };4 ]' A p- i5 u; N; m, G
::memcpy(aPacket + 1, &phand->nItemNum, 4);+ X4 W$ `; l0 C
::memcpy(aPacket + 5, &pCube->nItemNum, 4);! R4 e" z- J( s$ W- @7 S+ U
D2Net::D2SendToServer(9, 0, aPacket);
5 J) Q2 k. L0 D% V# r9 L return TRUE;
8 q! j. x8 `; n ?0 w9 l
$ ^0 I/ `! ^3 V$ J8 J9 r }# u) }' ]5 b+ i) J) b
9 X) r# W- k7 d# |! j static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);
; ?7 h- U( K p4 l5 R( K1 ?$ f6 c
/ o! ]6 e% w8 a( {0 d2 n8 j static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存
, E9 v3 X& R! g {
+ [& i9 |( t% _4 w: D D2CoordStrc mypst = { NULL };
+ W- n1 w( p& U7 J- {' ` \+ `7 |6 ] D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
; I( Q6 @. G: V J' z7 z0 \
* S! v; P1 ^, Q8 Q Y& r7 J' X if (!mypst.nX)return FALSE;
; W4 }3 b( o1 E3 x! J" E6 q
- j8 F" z9 ?1 ?" G; Y PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
9 a3 X L4 L( Q9 x: n) V" n. @) f% p+ P# \( E3 n# x1 p, i) n1 \, V
BYTE aPacket[13] = { 0x20,0 };
0 |/ [- ?% Q! C ::memcpy(aPacket + 1, &dwItemID, 4);/ K# R6 R7 a# Q4 k1 m; ?, C
::memcpy(aPacket + 5, &mypst.nX, 4);% K" r5 T1 `, v) O
::memcpy(aPacket + 9, &mypst.nY, 4);/ a' r4 T+ K9 T+ L5 t
//return D2Net::D2NetSendPacketToServer(0, aPacket, 13);3 L1 K0 b9 k/ e5 u0 ~/ y
D2Net::D2SendToServer(13, 0, aPacket);/ \4 B3 H1 m& ~, d6 M$ o
return TRUE;
1 q- F1 j1 M7 N) u7 _$ _+ }9 t }
* F2 i$ q9 w) U7 E
# {4 c" |+ Z: n$ z static BOOL DropCursorItemToGround()5 ~2 S. z- E+ ?1 v# |6 i3 [
{3 [) S/ x. T2 G" m
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);9 i: X! [$ h. M4 n7 k
if (!phand)
; s+ t' h7 t/ S0 G* Z% ~ return FALSE;) _# Q, X. S# U# M+ o) @
7 g" U' u# a; s1 d PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);- [/ ?# S6 a7 x% ]4 i! x
: `& {1 M- [1 e$ l5 ~9 @ BYTE aPacket[5] = { 0x17 };- y( ^8 v: K1 m8 V
::memcpy(aPacket + 1, &phand->nItemNum, 4);
, `! h$ w+ b6 M; a D2Net::D2SendToServer(5, 0, aPacket); G) X' t6 n, l# [$ _9 G0 n
return TRUE;2 u) ]6 k& U4 z* l8 Y
( y$ `! n1 `; G5 a. T( p1 W
}
$ ` B3 b% f0 v. ^
. x6 s1 i2 v0 t6 a$ {$ Y/ u7 P static BOOL PickStorageItemToCursor(DWORD dwItemID)
1 J1 c! p4 q `0 w9 t3 W {
E8 h$ P5 R# {: }) o3 I PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);5 N. U5 w- n3 Y6 ?
. F' w: f T, s2 w) g2 y6 I+ j! R0 N
BYTE aPacket[5] = { 0 };
! j9 \; L% x3 g8 K7 Y0 b aPacket[0] = 0x19;' N v _9 w& o# Q' z
::memcpy(aPacket + 1, &dwItemID, 4); _2 H) B9 p7 |1 ?! D Y) d
//return D2Net::D2NetSendPacketToServer(0, aPacket, 5);
: S% c5 J# Z- @1 b. u0 C3 B; g( L D2Net::D2SendToServer(5, 0, aPacket);8 a& ^. I5 k- P7 V! {2 S7 `9 O
return TRUE;
( U2 b: X( ]+ A }' D' N9 Q" ^) R1 ] | Q2 J9 \
( U& {3 Z/ x& D2 F! R, m static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)
; C5 A2 r y& T {4 X9 t+ \- m! R
PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
2 H" h2 z/ I; H ?7 A* r BYTE aPacket[17] = { 0x1f,0 };1 V4 ?% d n. }# ~0 O& w6 i
::memcpy(aPacket + 1, &ItemID1, 4);
& u8 M P" A5 z' L ::memcpy(aPacket + 5, &ItemID2, 4);
p9 a7 Z* q' K9 i //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
. V; T- P7 d2 X- `! Z* x$ W1 t! a D2Net::D2SendToServer(17, 0, aPacket);) c! x+ L1 k1 U$ L: t" g% w
return TRUE;0 c1 R6 G0 x* Y. X& t
}2 I, m6 h- A6 G9 R- U! @
& d( y9 X8 K: `/ d+ _; t static BOOL Transmute()
% X! z6 y% G: O" E/ {$ y {$ y7 R' _2 G; F+ S- `- V5 D+ a- I
if (!(*D2Client::ptPlayerClient))return FALSE;
1 _; i5 J- _1 @% a$ H7 A; h3 K& g! D
if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))
# j) B& y- m- V: n* t3 b return FALSE;" j; B; R/ E: `, H; Y2 Z
/ T" c; b2 c9 p
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
* K" Q/ X3 I9 r& ]! B. I$ P BYTE aPacket[7] = { 0 };
w: E/ v4 U: M! ^/ k% y aPacket[0] = 0x4f;
' R+ ?) R9 e( R* N* A3 |% C) k aPacket[1] = 0x18;2 \" T: P3 |/ x
D2Net::D2SendToServer(7, 0, aPacket);. w, M; W0 g8 `: y j3 q
return TRUE;/ P( v) r: T% y
}( I' r( J0 @1 `' {2 O3 [
};
8 V1 F o; I# a% @* M4 l
& j+ @% z. W% E, B! ^ |
|