|
|
转载9 a; j4 {* m* S9 H& y
自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:. g+ r/ U" M7 ~( P+ M. s' ^7 R$ e
D2Client:
+ Z% b% A2 P U9 z6 n6FB20AE1为拦截输入框(用于获得命令)
/ ?" l2 {4 ?+ t: s; a% T' ]6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发
0 `: k3 [3 |- f, K! O8 r0 B6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发
- M0 M% {; f1 ]/ g* P& K- X6FAF4230为hackmap的loop点 我用的hackmap导出位置4 A, W; x& W/ k, V; j+ \8 H- Q) M
" {* T& A; A2 j% f" C
! ?! S/ l; {3 n发包函数: o/ H" }) F2 X3 z
class D2PKT_ITEM
# e; I! N4 f4 T5 Y: u{
% I1 {2 _6 \: ]0 ~4 s& s- ^$ w#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上
+ Q0 y' C' S6 D) m6 X G: u#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多
) n( w* ?: r- I) p' k9 p#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上' I( o: Q2 t+ m8 j7 |0 }
#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上
2 X) \* l3 g& u4 S9 A#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH
% V1 i5 b* f( Z4 J0 s1 E6 `#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上
, p; d: a! y2 E. ~8 g9 U. K- U#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏0 u, ?, C0 M" }
#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上
( [. E% l3 k5 x0 V1 A#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -
, }# z, M$ \( o* F& N#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店
* I" g, r! N9 Z) s#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV" w7 r: M+ P E! v j) O& [
#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道
. \4 P% C% y+ U/ j) N0 J: l#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带
& t* b( I2 }0 a3 }8 x#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上
- A# M" F6 r, N7 `1 p/ [#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -4 n4 _: O# s& s) G
#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上1 Y6 K& c* _' J- l5 E" o
#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -! E: J% [( f: B3 U, @
' I! C% U" \/ T$ i' o2 {#define PacketItemMaxTick 1507 |/ I, {3 g! R7 [
#define PacketItemPickUpTick 20
9 w0 z/ d3 R K
# N/ z' ~5 u. J) N% fprivate:% ^* n1 j. ?8 M: H$ `
static DWORD _PKTItemTick;/ u/ N: [4 L y; {6 a
static DWORD _PKTItemAction;
, f; c& g7 p6 `( X1 E _ static DWORD _PKTItemID;
! I1 K% i* B$ q, w static BYTE _PKTPKTType;6 Y3 W8 h6 L& S0 |6 s( X/ J
public:
) c4 d6 e: S4 `; i! _+ s static DWORD PKTItemGetTick() { return _PKTItemTick; }
! `; J; n6 T# L! b
; Z5 _" |& U. W) v& w( [2 p# b static void PKTItemRelease() % [* A8 s& z2 P, k0 Z2 d) |
{
" x6 ~0 Y# T, Q! G _PKTItemTick = 0;
2 F5 b: c& V7 G! [. P- m _PKTItemAction = 0;. W" ^/ t& C+ t+ n% H* \
_PKTItemID = 0;
; E# ~' W: n) @ _PKTPKTType = 0;
, F, o3 n: r* e- L }* Q) l" @' o# ~% s. y1 k0 V
. B3 `: T0 [! v( g/ J f8 m static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick)
2 W* Y' ?" m5 M6 g& y {
, Z8 v* P. Z+ B2 b$ u" \) _ P8 c _PKTPKTType = aPacket0;4 F0 W' P# P! o2 g
_PKTItemTick = tick;# L3 x: g7 S# k6 O; u
_PKTItemAction = ItemAction;
& d7 ?( f. |% X$ j1 F; ~ _PKTItemID = dwItemID;
6 X9 n) c3 M' u1 {2 i }, c# A5 [ ^8 T; O4 S U+ v6 H' q
' F Q$ }" Z) @0 x: P9 ?; s6 } static void PKTItemTellW8(DWORD tick)
% {! u- A/ z& a; _( r' c {
; O9 C2 {' l& I# b% d7 n/ b0 h7 x _PKTItemTick = tick;! C0 q3 _0 b: y+ k$ E5 M; a
}
4 W: _* h" [: f; c- O$ W
* |9 a& L2 T" k- f$ n6 L1 V static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor
" I7 |0 F& u8 R {' x; d( `1 h7 f$ W$ z
if (aLength >= 8)1 n! i& l3 \! L% [0 X% k+ i
{
- P% t4 l* H2 y9 C, x+ ~ DWORD dwItemId = 0;' G9 c7 {4 v0 ~* a# p
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));. }6 \8 |. G2 b& k4 L
if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE) a4 j# L6 Y# s- O
&& _PKTItemAction == ITEM_ACTION_TO_STORAGE
5 ^* k: J# }$ Z && _PKTPKTType == PACKET_NEWITEM
, R7 g) O) ]' {% E5 J9 w: V- N )
n. [, \4 D0 ?/ L {1 s- a; L! B" M/ L; G
if (_PKTItemID == 0 && _PKTItemTick)2 n8 l0 s0 w* K% }; O. V
{
: u8 L, J* Q) ^7 ~ PKTItemRelease();, y& E6 x! X% K' [& i# v+ S' f
}3 ~2 Q+ D0 {( |. b& Q5 m
else if(_PKTItemID== dwItemId&& _PKTItemTick)
7 S5 Y4 v4 R; o( y' z- m% X, ] {
% ]; Q @) O, v" p; } PKTItemRelease();: {7 a! l ?9 @7 O J/ `
}
" I. ?) S# Y! ~7 g" Q }9 J5 @& ?7 b; O
' J: z, E& |. t }
: E0 a! A5 E0 i3 {2 x }6 W+ S5 z P' i; u' O7 c
% z7 `0 F# r! X$ a( ?' R+ j static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored
7 N7 a' x9 @( E; W0 I. Y$ B {) y$ l1 k( y- m( W* v# C8 Q
if (aLength >= 8) I' O+ i0 @& d! Y& p! \8 {
{
) k/ P+ g# c1 N% O/ j DWORD dwItemId = 0;
* \4 M; R2 J0 P% _ memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));6 @# f6 J6 \' d* Q2 a3 |
if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE# F1 @! j2 W3 ]5 _. Y9 {
&& _PKTItemAction == ITEM_ACTION_FROM_STORAGE
3 Z0 f m* T0 r9 b) l && _PKTPKTType == PACKET_ITEMACTION t6 E& _6 {$ W z2 h0 |
)3 H8 \7 j' X, K! C; ?
{
- q, c4 b' e0 b% Y4 Q) A% H) D; B if (dwItemId == 0 && _PKTItemTick)
) A5 ]' m& G- E( \ {
) B5 L7 ^) U. B* { G PKTItemRelease();# F! P2 O7 j4 j% ?( X0 L7 h
}/ D3 A# p' P2 U5 s5 x
else if (dwItemId == _PKTItemID && _PKTItemTick)2 g ?1 ^# {0 e; a3 W
{. n, D6 t8 p8 |8 @3 W$ r
PKTItemRelease();
6 X5 B& ?" q6 P6 b" ^. m }9 H3 I: P& `& N3 d! b7 ?. a
}
- ^6 v7 _2 G# B m. W* T & g* D/ f( r" V" W5 r) ~
}
; T9 m& O9 r5 C; E: y. @" `; G }
( l8 }3 Q) f# G {) X6 b( p
3 N$ c* r$ x4 g, U# G5 t! g static void PKTItemGameLoop()
) b8 ?2 v3 Y. D9 o( j {" M- ^% X. T. d9 D% ]( D8 h
if (_PKTItemTick > 0)
) w4 Y N! |8 h. ]2 ? _PKTItemTick--;+ r! Q5 A8 B* w k* _
else if (_PKTItemTick == 0)
" B3 T Q/ M8 U4 Y P: H PKTItemRelease();
& X8 J8 V: z( r k. { }
1 t; P0 o' Y: K4 H; X4 ]+ x: p& W
, h/ D7 A+ f T2 P% D& s static BOOL PKTItemCando() + j8 V) A" R* ^8 D7 \9 T
{
) x) @. a+ Z) L! b2 ^7 T9 G3 X2 @ if (_PKTItemTick == 0)return TRUE;; I) `' s. D+ o* U2 I$ l
return FALSE;% ^, ^) J7 u. C" d) T
}1 ^) c$ Q: }7 K, A }
4 n6 F) |3 B- L+ e
static BOOL BuyItem(DWORD ItemID, DWORD npcid)
f# D. `+ N. g" C: n {
1 B' c% M4 B! V3 i4 G$ ] PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
8 m" q# F- \0 ] BYTE aPacket[17] = { 0 };; r) k0 w7 C! @
aPacket[0] = 0x32;4 e* x5 b3 S D: [2 S. F
::memcpy(&aPacket[1], &npcid, 4);
+ M+ x& Z4 n/ Y) Y ::memcpy(&aPacket[5], &ItemID, 4);# ~3 S# K+ W8 r3 H
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);. h8 p* J' J9 f/ p5 v
D2Net::D2SendToServer(17, 0, aPacket);
! b" M0 ]2 Y. \$ Z: a3 D2 |% z, O return TRUE;
$ A4 Z7 e8 J* {9 i8 M1 u( u }9 r: a0 w2 X$ }8 m3 y
# R6 D' H' r4 P static BOOL SellItem(DWORD ItemID, DWORD npcid)
+ d! ~/ T- w! ?0 [ {
- o& G% H$ ^8 i1 U7 @ PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
1 o* g; Y2 T) W' T( c( L BYTE aPacket[17] = { 0 };' N) V" ?5 _# z, |# d1 x
aPacket[0] = 0x33;
0 f" N4 [6 v! X" M- P' @ ::memcpy(&aPacket[1], &npcid, 4); X) ^/ F6 R- G# [8 F0 o! |
::memcpy(&aPacket[5], &ItemID, 4);$ N5 N# ?9 I5 D" m1 a. w5 q
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);7 w( p- i7 m0 o" {% E& t1 b3 S; n
D2Net::D2SendToServer(17, 0, aPacket);2 g: Y7 Y- q5 c) B5 [: a
return TRUE;
" Z5 @7 }. j8 e* q+ `8 ~1 z }
1 `( E) L1 b: N) b% \$ @1 r; G& y2 V# I
static BOOL Interact(DWORD nUnitId, DWORD nUnitType);3 I' _) f: N3 h
8 E* u a2 G$ `; u9 W0 x8 L
static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);- D3 q4 j- p* V. i
" z$ S6 L" k+ n% H7 o static BOOL OpenCube()
8 E, I2 p4 J, U9 [' i: Y {4 f0 d0 q# p1 u* F3 V' U* j
if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;
i1 y# x i; o6 {% M H, ?& w
T3 {! j2 U. Y, ?4 x2 r i- ^ UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);3 V& A! [- u' E I
if (!pCube)$ k7 G+ ~8 g$ u# z5 s# N
{9 P* D9 s( o+ i0 c5 q
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);9 T, f6 x1 H5 L3 U% H" R
if (!pCube)
! ]. j1 ?1 X/ [' q- ~+ F return FALSE;
0 W0 k C: R7 w* ?2 h' X' V3 X }6 o! Y. Q7 R; D+ I
PKTItemTellW8(PacketItemMaxTick);
5 x- U' I* y' V3 [7 ^
" b# C' o c4 ^) @0 [0 ?4 N5 k D2CoordStrc mypst = { NULL };6 B% V H$ K1 T% ?! ?: _
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
3 q3 n* O0 k; W0 G* s/ d# A! b7 m X% O
BYTE aPacket[13] = { 0x20,0 };- ?+ a5 h) g1 `5 }0 K
::memcpy(aPacket + 1, &pCube->nItemNum, 4);, F, O$ U1 I4 r' F2 z
::memcpy(aPacket + 5, &(mypst.nX), 4);6 |' R8 Z2 X, E
::memcpy(aPacket + 9, &(mypst.nY), 4);0 {+ W8 R, r9 I2 T5 B9 S
D2Net::D2SendToServer(13, 0, aPacket);# F$ }0 \$ r" b* k4 `% G% \
return TRUE;+ ` D b5 [$ l+ x$ g6 L
}4 y4 C5 P3 w9 F' _5 k
1 K5 [, U, @ ?% U. x x* ~
static BOOL ToInvxy(DWORD x, DWORD y)/ t$ u! a, i- N' E- A, U- n
{
3 {1 V- g' c, x% @ P/ A( z/ E( ? UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);2 U0 c) z* l2 B8 |6 l9 |. U1 N
& { H- U6 j8 ?- r3 z* q! e5 p if (phand == NULL)% V) K$ B( M* }; b; N1 r- V5 T
return FALSE;
) M9 |& x& {4 c* |. ?7 I. V/ Q& b+ W/ y: m
PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);! `5 n- V5 U, n$ s
6 k: y) F; \: H7 t& p! Y( P' ]* Q
BYTE aPacket[17] = { 0x18,0 };
0 E% h! y5 N6 p v8 C ::memcpy(aPacket + 1, &phand->nItemNum, 4);2 t1 V7 X" ~* _8 p8 K8 Y( ?0 ?) _
::memcpy(aPacket + 5, &x, 4);$ ]( k r# j5 b3 ]* H" {) D
::memcpy(aPacket + 9, &y, 4);2 C- `, z7 r, c5 ?, a
D2Net::D2SendToServer(17, 0, aPacket);/ U8 i- X9 M& k
return TRUE;
) I9 d8 R9 D+ H" U) p$ w+ h }
( u) h! N; L) f2 E2 ^- H- S" S
static BOOL ToInvRandom(BOOL bBagFix = FALSE)
, f9 C0 s0 }& x! l {
' h! E/ K: c' g j7 v; n9 B: B% m UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
& R. d. g7 k( N8 ? if (!phand) B/ Z& K: G0 C
return FALSE;
& m+ W; p! ]* l$ z5 I3 h int desx = 0;3 p' E. ?. L5 W. x% ]
int desy = 0;
- t3 I- f( K9 B2 ?5 l! y Y if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))+ g, @2 f. B* H! v; C% L
{& c# O% s% s/ a2 A; b! A" M( Q7 l
ToInvxy(desx, desy);* L; ]5 ^: v3 e! ?1 F* w/ O
return TRUE;
/ ^- N6 l3 s2 u: D) Z D }
3 R& Y. f! L: Y. p. J! Y return FALSE;
4 w% ~7 z6 ~' V; N }
; _; G7 t O) U7 o1 f$ t3 `
: {( C' k0 z! m- t( J static BOOL ToCube()
- z% v" t3 [) Z& g2 i' n; C {
8 v! I% N4 D2 g- f7 l i if (!(*D2Client::ptPlayerClient))return FALSE;+ i% i! B) }/ N- G$ C4 h7 e
% `' m R& C- l3 p UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
. D3 t" l5 O' N0 n6 I7 T) Y/ e if (!phand)return FALSE;: H8 B+ W$ g+ X* X9 E
% W @" |/ O L& @
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块
: A& |" J- x D( o1 S" _- e7 b' R" o if (!pCube)
" X3 y' C; u& ^, W+ C) s; L0 ? {
& M- d1 n; Y& o; [ pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块
! u) q: G3 n( G; {& Z6 r7 O if (!pCube || !pCube->nItemNum)
. p1 y7 H- a( _- s0 ~5 V+ w return FALSE;5 U9 T5 W1 `* m2 O! U; e
}
; w% D# O( t2 ?6 u$ w9 x- t& b' s M5 _1 R: a
if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))& c5 O. S; L5 b" F0 D& v. y
return FALSE;
' Y& X: H( h! C- ~. z5 N+ ~
6 G4 |8 u2 e- W5 p* H6 T* ] PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
$ ]& @) }0 i3 S, k( v; M
/ X6 P; G9 L8 h, \0 c BYTE aPacket[9] = { 0x2A,0 };
, [! Q$ _$ R' X/ o0 w$ _$ e ::memcpy(aPacket + 1, &phand->nItemNum, 4);# ~6 d X4 A# F: q
::memcpy(aPacket + 5, &pCube->nItemNum, 4);5 l/ D$ [$ Z8 _9 s
D2Net::D2SendToServer(9, 0, aPacket);
+ ?9 h! P% N: k; C, J* o return TRUE;
2 |" @9 u3 h$ Y* {7 r0 x* E9 A+ v( S! z X- q! D- c: u' X
}' H3 T# N$ ~" `
' Z" S% G& t0 m3 Q; _+ X& E/ b* @" c4 i: Y static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);
9 [( I3 {4 i, {: B. N9 H A! } V
7 T* m" S! r z static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存' I8 o4 o6 w5 | ?: U, f
{
8 z- D, j4 x. ` D2CoordStrc mypst = { NULL };
8 F/ F7 R6 `6 w0 ? D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);& E+ \8 }$ z6 |( S' p5 i3 M
( p: R" z$ K$ H0 S7 W4 G% `* O if (!mypst.nX)return FALSE;
- P3 E9 j6 J$ G0 U. @$ ^ ) J# w. J# \- o/ Y( p, F, \; W8 j( p! g
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
9 P; R, r7 ^1 q
0 ]! j. K* J( X2 R# S$ R BYTE aPacket[13] = { 0x20,0 }; k/ K( F$ g1 I4 K
::memcpy(aPacket + 1, &dwItemID, 4);
/ C3 D4 W, g: r3 j9 \6 c F5 R ::memcpy(aPacket + 5, &mypst.nX, 4);) `0 n7 p6 t: t( x- f4 ~
::memcpy(aPacket + 9, &mypst.nY, 4);. _" t' d2 V! Z. Y
//return D2Net::D2NetSendPacketToServer(0, aPacket, 13);
- J; h) x* X2 r c! D* I D2Net::D2SendToServer(13, 0, aPacket);
4 E8 v6 U4 t1 A2 b return TRUE;
# p4 v/ B2 j# g( e9 k0 F4 K3 y5 o }' Z. k3 s- h) a6 }' N
, ]/ s7 U, Q9 m
static BOOL DropCursorItemToGround()
$ s% v" n2 j$ k {
6 b& a8 d: ~& h UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);! L, [( [: Z1 J4 A$ Q
if (!phand)6 e8 L: R. S- I; k. A$ j+ i: U3 v
return FALSE;
, B5 h0 g1 T8 ]6 ]& r! }5 s6 g" }: ~
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);0 }: L! M+ u* g
0 k3 R9 H9 y. Z7 Z
BYTE aPacket[5] = { 0x17 };
' A) q% P' k- Q9 I ::memcpy(aPacket + 1, &phand->nItemNum, 4);
: m4 B6 H* \& j; v9 h D2Net::D2SendToServer(5, 0, aPacket);" o5 k: |( b1 j% M% X
return TRUE;
: G' m& g9 {* B) g% o* _, _
& u9 \8 Q) G1 K: m# s, O }; H/ g& v' |# q' @- q; P o1 c
2 |% _- D) ?/ ~1 ?0 v0 a: I9 j5 r& X6 V
static BOOL PickStorageItemToCursor(DWORD dwItemID)
3 @) m5 X% L5 u( N9 x8 }' X {% a/ }( e9 \% R! U+ F' }1 w
PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);. l2 Z8 C, N0 {- z, f
6 v- r9 t' P3 x
BYTE aPacket[5] = { 0 };" z/ ~- W0 _/ u/ ?
aPacket[0] = 0x19;
: M, @! d$ T$ `* j8 b# i7 i" r ::memcpy(aPacket + 1, &dwItemID, 4);
0 J8 I5 H4 Y" a2 }/ [6 X //return D2Net::D2NetSendPacketToServer(0, aPacket, 5);0 L' k% H2 h5 [8 z( `1 c! a1 x" z; b
D2Net::D2SendToServer(5, 0, aPacket);
* V6 b4 x/ W) q# e: W/ T return TRUE;
+ R& @. x8 a" e0 i; _7 g. e1 g }$ r' j( c5 n- n0 j5 K; V0 b
+ y# b0 N( k% U1 L# O+ z, |. H
static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)
( s0 b0 {9 `5 Y6 x* Q0 V {
6 ?/ G. j( p. q+ A* X- [3 P# l PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
1 |' [# f2 `4 e6 ~% O; V+ D BYTE aPacket[17] = { 0x1f,0 };
; ?) z! m# d8 L$ u l ::memcpy(aPacket + 1, &ItemID1, 4);8 g/ S' Y6 a" U( P
::memcpy(aPacket + 5, &ItemID2, 4);6 L% n" R0 x& H; G4 r
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
0 C% k# L5 l+ _ D2Net::D2SendToServer(17, 0, aPacket);
. B0 P3 E! }4 p1 }1 ? m7 h9 r# F return TRUE;
* R9 @$ `% ^* g$ g }! O- W, ?+ s! t9 o) T6 r: i% H
* J; B2 ]' a8 E. @. y* k# ~. {
static BOOL Transmute()
6 k% p! e' }7 o! i { ~: F' |. S7 M) v4 O. k& C; \2 G1 n
if (!(*D2Client::ptPlayerClient))return FALSE;
; W$ |3 W. E" B! A- Z' e# R5 c
' Y* t% u4 D9 h* x: ` if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))7 _! U8 H0 z' H( T1 S( X
return FALSE;
K) \% `6 _6 Z ^, W% ?/ O* r6 d7 O
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
7 C8 V' m# S0 {6 q- Q BYTE aPacket[7] = { 0 };4 p' f% M" r; u
aPacket[0] = 0x4f;
, m5 V6 K1 W' B" y! p- |( Q4 _5 ?8 C9 H aPacket[1] = 0x18;
% Z# B! K2 K' F5 V D2Net::D2SendToServer(7, 0, aPacket);
" e: n- L) L" F0 a1 J return TRUE;' u- r7 s, {! E! a/ r; M! E) u# n
}
7 L% h3 Q% h% I3 S};
' ^9 p* K6 |& O0 `5 \' E+ U. L% }% q0 z3 }! f
|
|