|
转载9 ~) l2 y) u# t7 J, ^
自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:
% U4 Y! n' J6 rD2Client:
4 P0 V1 @3 w3 Y3 E- z, _6FB20AE1为拦截输入框(用于获得命令)* K2 B% d P, G+ h B* G
6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发5 w: g$ Q" I( G5 V. ]: s- Q" Z( u
6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发
: b7 c7 B! Q) i6FAF4230为hackmap的loop点 我用的hackmap导出位置5 R+ g5 d. d& z( o5 x7 x
! X& [& [; {* f7 C8 E3 [* n* a' ]" ^# H" t
发包函数:6 u0 `7 [( C6 h8 q
class D2PKT_ITEM
4 n5 X; {6 G8 p5 Y8 N% A{
! ]; } X( @; j#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上
% o% @/ y+ I6 z#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多/ I" ]3 M# H3 \ I& a2 u( F+ k: ~
#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上# i$ R8 E5 h5 u: x
#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上
$ _4 s( G2 p \" z( y/ E4 I#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH
. V$ o. i3 Y6 b#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上
7 m- _' s1 D( k#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏) e( n6 K' d K
#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上3 A4 j: g" J. I& P# b* \
#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -
7 h6 j# y A6 A8 ^1 V6 ?$ g. i: o#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店
" ?, e: r4 C; U. u#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV
6 F8 o% H, u/ r+ o) j% o#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道 , q2 }3 A f y( v1 h3 B6 x5 v
#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带1 i* T* a! g$ i4 Y3 r# j
#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上7 h* v! L3 \( F* @ r8 X8 h
#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -
2 u# _& Z. I. s+ u" w#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上/ E# J) p' i$ _# d
#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -1 j8 p, a7 e3 }
" j0 a0 \7 r5 I8 o1 P8 e
#define PacketItemMaxTick 150& e. ~/ Z \4 G4 q- X: z
#define PacketItemPickUpTick 20/ Q4 V; `3 N0 v, b( q
: w5 i" H" ~3 Y* G0 L( l9 q: I1 K" Iprivate:5 w1 R6 {) D) {; h
static DWORD _PKTItemTick;
0 l/ f( P5 N3 U static DWORD _PKTItemAction;, e& ]3 i5 W5 l& v
static DWORD _PKTItemID;
8 i# a- w% a1 X- i+ f8 B static BYTE _PKTPKTType;: B) f. B7 L- J" d+ @. ^
public:
0 _! x& D8 l% O4 f static DWORD PKTItemGetTick() { return _PKTItemTick; }
. b9 J1 z! `- `* K4 ~( l+ P7 L8 h
2 w2 t4 d- [1 Q# K+ p) x0 ? static void PKTItemRelease()
# | i; [2 Q1 {5 D& L1 e, V {6 _; N1 \- [) B. {3 a
_PKTItemTick = 0;6 j! i9 B9 P! B( C
_PKTItemAction = 0;
) N; q/ ~6 f/ e) U$ ] _PKTItemID = 0;
6 }9 S# G/ c7 k) \% M) F7 L _PKTPKTType = 0;
1 k" C# s; H5 R6 y' V }. @- b1 n$ J4 z3 c% f$ Q
0 u3 O2 w3 }' y$ o) T* n' R4 H+ @+ A
static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick) 1 N+ W2 K* R3 M- ~
{
; \, o- m+ K6 v- N- z% m _PKTPKTType = aPacket0;
! u. \: A- c1 |& {9 U6 H _PKTItemTick = tick;
& e+ t( N6 Q1 q/ @' Z/ k7 ] _PKTItemAction = ItemAction;
# X- i8 v: Y J9 W6 H. K( N3 X6 [ _PKTItemID = dwItemID;
* P: d$ }' n* b. Y } }
" y3 L% J# X) D- I% t
% |9 O7 Z2 c/ t4 B0 D static void PKTItemTellW8(DWORD tick)3 d+ g$ z, L+ Z. b9 u* E" H+ Q5 F9 n
{
% l3 \% Q" Z1 ~# }4 M# d2 N% O6 v _PKTItemTick = tick;
& j! p! \0 A+ q. {, E }
2 c# n5 o+ B: X# I) ?& s2 `- O5 x5 A8 O& c6 I
static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor
* o6 G' `2 l- m: n {
& D. H/ J& }& i4 W9 g/ ` ? if (aLength >= 8)
& P( V4 g3 z& w {, K6 W o+ N1 S- Q; F* @
DWORD dwItemId = 0;
& |% @; P/ {: m; O3 O! P3 R0 i memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
( z# n9 S! i: [ J0 C9 A if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE) q+ I7 @3 U# T+ G4 _3 r
&& _PKTItemAction == ITEM_ACTION_TO_STORAGE$ m, x+ m4 f, G. c9 x
&& _PKTPKTType == PACKET_NEWITEM
! N2 f& V- E% @$ @2 @ )
1 }. S7 z" u* r2 r {0 D1 L: [ q8 e# P, w2 W/ `2 V3 Y4 {
if (_PKTItemID == 0 && _PKTItemTick)
( g' {* ?4 S$ g' A {
" M9 k' H, s: e1 x6 g PKTItemRelease();0 l% ^3 a/ b4 [* D9 z
}% j; y* n8 Q! e b3 j ^
else if(_PKTItemID== dwItemId&& _PKTItemTick)
1 m, O$ L% F) p' ?# c {' x3 j% p" N/ c
PKTItemRelease();
. W: s9 U& H% [- o2 Q }( O) `" W, Z1 e q. c1 U
}- J# C5 t, Z# t
4 L8 b& `; J9 |* N" s( D* w }1 I/ d( w/ }+ N! m& F4 p2 D
}1 F" R5 N: |5 Q" U5 @
7 |' ]7 l5 m+ a4 ?4 t static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored' A" D9 }; g) M$ b# G- ~% j
{
3 x& C, |5 Z0 b5 h$ t/ U if (aLength >= 8)0 Q- n. c7 S6 _" p5 w5 R' A7 Z
{, ?* \0 p; I5 T5 D0 q# u" y
DWORD dwItemId = 0;& t, \1 u x \0 D. w# a8 w
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
) G2 q8 b# _) F6 E8 [ if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE
% c9 T1 L+ d( S- C9 d4 w && _PKTItemAction == ITEM_ACTION_FROM_STORAGE L. J/ A7 V! A9 l
&& _PKTPKTType == PACKET_ITEMACTION
4 Y4 l. E$ ~* T W; t5 _ ). F+ U& C. P" R' P" F$ {
{. O6 \3 K& ~6 \; h0 n9 b( r
if (dwItemId == 0 && _PKTItemTick)$ u- E8 e% `% U
{6 |) M" h: j* `0 E: {! K6 |2 [
PKTItemRelease();1 _8 T; _' J1 M0 M8 W5 `7 p
}& w0 U) \" V$ x0 @
else if (dwItemId == _PKTItemID && _PKTItemTick)* h4 _) ?3 B7 p! G
{
& `5 p& ]# C* J- ?; K PKTItemRelease();
/ N$ F8 O7 {: T) l4 ] }& p% h- C- F: a! b% n* b& u4 b
}
' k. X' h* O. \: g" p7 T5 d V
8 F& @6 M5 ^& W$ H+ B7 c }5 ^9 F# v4 v. v# G2 w7 m, J
}) b+ y) X! M- t+ k; j, K R
- `6 i5 m# R' p# I& w
static void PKTItemGameLoop()* ~* T( j6 k1 c2 ]! x( Z& l0 T" o
{# V9 C9 j A% I) F7 A0 z( \
if (_PKTItemTick > 0)
* l' h8 Q* ?4 ^% @/ \3 q _PKTItemTick--;. F/ w" _$ c: i- O, \* x! G
else if (_PKTItemTick == 0)
/ G8 g; k$ H% _7 a1 v PKTItemRelease();/ ]& K: |( i- @* q: w2 y' L
}
4 a2 h4 J$ Y, R0 h" [; m
2 p2 R; J% }# J! ^, `2 G+ G static BOOL PKTItemCando() % v. @9 x+ v6 O0 y1 O7 u7 W& a
{ W( O$ g0 G6 a; z
if (_PKTItemTick == 0)return TRUE;1 G6 V2 [' m: R& U" {
return FALSE;5 ]% p: k- W$ v' x& e* Y
}( k/ q- }+ ~6 K
; V) U6 M! G% \$ c7 }' C& J static BOOL BuyItem(DWORD ItemID, DWORD npcid)
; A0 t! K8 D2 l; E {
2 I0 x$ U+ A1 k& U3 ^. y# z PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);8 L! H/ a" S# N2 U w O( ]
BYTE aPacket[17] = { 0 };0 R4 B% k6 K ^3 R. h0 ^
aPacket[0] = 0x32;+ \, C! b3 F6 n3 T
::memcpy(&aPacket[1], &npcid, 4);7 } I q3 g0 A" h& S
::memcpy(&aPacket[5], &ItemID, 4);' G1 o& M$ j& ?' k1 a
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
5 q) H+ W c1 Y D2Net::D2SendToServer(17, 0, aPacket);
) P, Y0 b% F) r$ ~+ P" Q" e return TRUE;- U1 h: R- [# g
}
* f+ l7 T: o* d* ?% y5 u6 t, v4 r* G( A8 A
static BOOL SellItem(DWORD ItemID, DWORD npcid)
. V) D# x @& z9 f {
( a, L7 t8 \0 P/ L: a, {: I8 } PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
6 \9 K& n5 x7 h: _ BYTE aPacket[17] = { 0 };, ?1 _6 o/ ^; ?
aPacket[0] = 0x33;
0 e1 [; C% e a# u ::memcpy(&aPacket[1], &npcid, 4);8 J* i n: M# d3 u
::memcpy(&aPacket[5], &ItemID, 4);* \8 f3 ]% A X& t1 e
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
9 I) x6 I# L, X$ B* J4 ~; _9 |& A D2Net::D2SendToServer(17, 0, aPacket);
9 _: w8 K9 M2 O% y2 E+ M return TRUE;
6 p/ {0 ~: Y+ _9 a# s }1 g) P+ L- J3 m! X
3 P+ f0 U8 W, n8 M5 B
static BOOL Interact(DWORD nUnitId, DWORD nUnitType);
: @1 O% r9 D. q, I8 `
: T6 }: E; y- o9 Q- p6 ` static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);
7 X$ {1 L, E! D$ r5 @/ C, ~
6 i! d8 Y, u0 x1 `* P7 g3 J static BOOL OpenCube()
! F+ B- m7 C {8 C1 O e {% k5 M) C% x# U& A1 B5 O
if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;
) e1 m% ~. R$ U0 v
3 `$ e: x5 e; j9 Q8 Q UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);" d6 v4 r3 r; y) x9 e2 z( p
if (!pCube)& q( ^2 m. U! R; j! O; x5 K. o# |
{
9 b u: S4 M6 t3 X. H. T pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
* A, }% c1 C; d% P- l1 C5 l' t if (!pCube)( F2 P* l- P* y2 E$ L
return FALSE;
: ?; D& [3 A/ y2 A! ~ }
' w4 R; U e5 ~" p0 v. l. d PKTItemTellW8(PacketItemMaxTick);3 T5 }6 e" V2 R/ U
* I$ V7 E* ^( [- ^, x D2CoordStrc mypst = { NULL };+ }4 R) ^( m" C7 \, |5 ~
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
0 A2 t& a5 @1 Z6 v$ i0 R9 u4 e' U0 D; E' p" I
BYTE aPacket[13] = { 0x20,0 };) G( Y0 X" L: Y
::memcpy(aPacket + 1, &pCube->nItemNum, 4);4 n+ I+ d) o" }3 F
::memcpy(aPacket + 5, &(mypst.nX), 4);- z% N! ~2 l" Q S% U( @' t8 U9 V8 H
::memcpy(aPacket + 9, &(mypst.nY), 4);- s0 e. Q9 m2 K+ D# W$ B7 b2 m' I
D2Net::D2SendToServer(13, 0, aPacket);. t! B3 z2 ^" P' T0 y; r- D
return TRUE;
' R& b1 ?0 d. t" V$ L! u. S }
6 B, p: R% R' ?4 R8 D/ r9 m4 u7 Z2 b
static BOOL ToInvxy(DWORD x, DWORD y)6 Y6 t$ `# d, ~( U6 }* v3 h, Y' g' ^2 C4 v
{
) k" H- O" L7 N# W) [* w7 P1 A3 X% K UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
6 ~7 p- B5 q- B H L
8 U3 i9 G: `7 I8 t5 `; _7 ] if (phand == NULL)4 L( h! r0 V- {
return FALSE;. c+ F" Z3 x" T" t2 D
9 }& v! }0 M x9 \ U( _% G PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
& ^9 I' k; {6 A' Z0 L$ T6 b7 V; T( ?
: {3 i2 l3 \$ u+ Z BYTE aPacket[17] = { 0x18,0 };6 n' N. ^ o1 U* p
::memcpy(aPacket + 1, &phand->nItemNum, 4);
- G: x; i P* U2 }4 v ::memcpy(aPacket + 5, &x, 4);( y( w+ P& O) ~! w
::memcpy(aPacket + 9, &y, 4);7 {, }' Z( |/ [9 m
D2Net::D2SendToServer(17, 0, aPacket);* S' ?) X% ~1 \: N. q% U
return TRUE;
" M4 T7 N5 q1 l4 G5 T& l: a, r } Q3 I$ |6 V, U/ ~
. G0 `4 b( F" g( g static BOOL ToInvRandom(BOOL bBagFix = FALSE) 6 g4 W/ S6 K) `, y" g2 k% H8 L
{" \6 f& _! g1 R% \- r
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
" q2 ?4 N4 e# A3 B K X ` if (!phand)* X+ m% _5 V) h; U% p n' _
return FALSE;
& q+ C. h- Q( K' n" @5 t int desx = 0;
& p* H( u, g5 T5 c0 U0 O, H int desy = 0;
' ^& [. b. w* U7 e: a5 }! T, y if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))# L5 U, z5 q0 ^3 V: _; O
{0 j& p( M" @& a# @$ f0 W0 Z- |
ToInvxy(desx, desy);
0 @6 R+ {' T0 G6 C3 i" D return TRUE;
6 k$ C, y/ o: O( ~9 e8 w }1 b# w* T' o f, e2 l$ x3 G4 {
return FALSE;
: A! r* Y! v' U }
8 Y. D- O2 j4 d: Y
* S: k6 w/ r" f: H static BOOL ToCube()
, a- r: p/ ~2 a% N, t {
5 }' U2 Q2 ?! C2 H1 y% N; o, X if (!(*D2Client::ptPlayerClient))return FALSE;
% Y: \6 F0 X- ?7 T9 j
% a! Y0 J4 o+ s9 _7 o- v. O UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
& o/ y' x; V# m7 ~ if (!phand)return FALSE;( N4 T, `' x% j3 Q" z. c3 C5 ~5 Q! d
1 `8 g* n+ i$ B4 |4 X- f: I Q UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块3 F8 x' L& r* J, g) q* y
if (!pCube)3 ~: I( Z5 ]% T9 X# A# P+ x3 O
{+ q2 l: ?) b& X
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块0 k0 C }; o/ }( T$ b8 N
if (!pCube || !pCube->nItemNum)
! Q1 V0 x c W# C" i return FALSE;
& z3 \/ ?& a- Q+ v; q }7 T& |, R. _3 o/ Q3 k9 ~
% ]+ |' Z O3 r( [( k( C. F7 Y- G if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))! e2 o$ [, j% ?! X- e, d
return FALSE;' n; X% }0 X4 K" ^% n3 X
% v6 w, L" F0 q" U) a9 @& O PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);+ U+ B4 P% u6 b" t8 c0 B1 `) v0 m
$ M5 }4 O/ x- S. @% d# m/ v BYTE aPacket[9] = { 0x2A,0 };2 o( O+ w/ c2 V5 H: s
::memcpy(aPacket + 1, &phand->nItemNum, 4);3 |, S" m4 d. ^8 G+ S5 N# |
::memcpy(aPacket + 5, &pCube->nItemNum, 4);
6 t0 r$ L6 L) S# Y$ `$ l1 y& c D2Net::D2SendToServer(9, 0, aPacket);
, M& L, i1 _* T; c& a( j$ X return TRUE;
0 ~2 M6 g8 M& O
' b# R+ z0 v! q }4 I3 i3 c, r% {% m; B R' F/ U
, _* q( L { A% d8 \* }6 T static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);
5 `1 O |* s4 b% ^; |2 E) w" X, _9 m( p4 H6 ?9 }; g' a: D6 w
static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存9 s& W# H5 a: P; C: M) U3 N' T9 t* Z
{
. K9 o. w1 I3 v) t! z; K0 Z D2CoordStrc mypst = { NULL };) t) G6 G& [. I- l
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);$ ]' o+ c' o6 C4 c5 }% A) {4 ^
) d8 d8 Q3 _9 ?
if (!mypst.nX)return FALSE;
" A0 E) d. C/ @; E, y) i5 x8 ~
/ \3 @; }' r# g* \, ^; R1 e- { PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
3 }" ~3 T: P6 h
/ Z. i. \+ W! ^ BYTE aPacket[13] = { 0x20,0 };7 E0 s- `5 S4 l" X
::memcpy(aPacket + 1, &dwItemID, 4);# X) C% ^7 l0 {7 I
::memcpy(aPacket + 5, &mypst.nX, 4);5 i* D5 ^8 H$ x1 D) s+ t
::memcpy(aPacket + 9, &mypst.nY, 4);$ ]0 c& h# i9 n
//return D2Net::D2NetSendPacketToServer(0, aPacket, 13);# y% U( W- L7 B' D
D2Net::D2SendToServer(13, 0, aPacket);4 _$ M2 S8 ^& P) w
return TRUE;
8 L0 s7 G$ q1 P2 {* E# E }
$ N L& z' H) I9 z. P, O; M- Z+ x# A( N! L& X
static BOOL DropCursorItemToGround()
+ Q9 b3 U% u# W" K {; v! ~' v0 v/ M' D) U Z ]7 W
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
" k( d2 T6 n% p! E if (!phand)/ l! N4 \9 f, U% u% x$ n* \( {
return FALSE;' N0 k* U& p- U m( k
! v# L& z2 ]% w) e( T) r% G" A% @ PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);
1 x- S& C$ Y3 [, i- {/ W c8 e$ R8 c) j! p! Q
BYTE aPacket[5] = { 0x17 };
9 A7 b& P; E0 N6 j4 H ::memcpy(aPacket + 1, &phand->nItemNum, 4);) q, h* f* R8 ^4 J8 p
D2Net::D2SendToServer(5, 0, aPacket);
7 q0 ?; \: a! q. {2 m. Z return TRUE;: D+ s- ~! |8 }. S
4 M( Q3 P( R/ v. ~
}" `4 O1 Z4 E2 L: I" b
# n8 n5 G0 x& c8 T1 X9 C static BOOL PickStorageItemToCursor(DWORD dwItemID)4 |. X- y/ W4 r8 D( |, i1 k
{
5 @' I" |6 [; H( ^3 A# `9 }$ Q PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
. i8 b- k1 l F+ }4 |' i7 k1 l% ?5 ]8 R1 Q F$ p; e/ O
BYTE aPacket[5] = { 0 };3 W, E" f- {0 e: }
aPacket[0] = 0x19;
; q. k( t: Q8 Q* z8 A4 Y0 o ::memcpy(aPacket + 1, &dwItemID, 4);% A9 d: K5 D7 Z; N" v4 g, b
//return D2Net::D2NetSendPacketToServer(0, aPacket, 5);7 {5 S' J( x Z) B+ c
D2Net::D2SendToServer(5, 0, aPacket);
& T# Q$ i" g+ ]$ C2 a# [ return TRUE;; n& z4 ?/ d4 \
}
9 M/ r3 x( q5 Y1 ^% ?; }' d* g; ]6 V" {+ w/ j$ t3 S. @& V
static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)
+ I5 Z: w# Y; _1 x# n. \2 t5 ` {
. q& [6 P; a& Z' p s3 `" O PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
- U6 l& ^5 w$ O2 p j4 P BYTE aPacket[17] = { 0x1f,0 };+ U! d# C% }& H# e# x. s2 o
::memcpy(aPacket + 1, &ItemID1, 4);
3 e8 m/ j/ u- Q ::memcpy(aPacket + 5, &ItemID2, 4);* O: b h6 t- f; R2 P
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
7 i. W. w5 u, [% q D2Net::D2SendToServer(17, 0, aPacket);- [1 K4 T3 u1 [
return TRUE;
" X+ A( v- a! {/ ^) O9 a, h; C# b ? }
3 a; Z( J5 n8 w/ j# T/ u$ x- M) `* h$ u/ z7 N) N5 Y" \5 f. U
static BOOL Transmute()# C+ Y7 \! v. ~- @3 j2 P+ _
{# z7 k# }: A5 E) l0 U+ m5 L3 Q
if (!(*D2Client::ptPlayerClient))return FALSE;
" I8 K( j8 L% T3 \# i( a( [0 R% _9 Y0 l
if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))! D6 C/ r* a$ c4 ~5 h6 q- W& r
return FALSE;
. h" }, V3 N2 h6 ~) G! l
; ^- m8 G% I5 \) G1 j K3 } PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);! {0 A' q6 L! P, m b- N% P: U Y" R
BYTE aPacket[7] = { 0 };
, O6 v' K9 B4 V& n4 @- Y4 O% A aPacket[0] = 0x4f;
% O4 `' {" f0 I* W3 O2 K& K aPacket[1] = 0x18;
8 J# Z3 {& L5 d# @, a% G' C M$ H D2Net::D2SendToServer(7, 0, aPacket);
( a. N4 y6 p) a6 c) N5 y return TRUE;
5 j; w" d) i) l5 ~ }) o/ y ]6 I9 S# V6 e4 Z' d
};# B2 ~0 n, ~8 @ j! J! [
3 k" [) a$ x! E: n' |
|
|