|
|
转载
; `6 I% r8 e# v. W自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:, M! M% [& R5 s5 W& K
D2Client:
; t) j7 O/ V. g) D6FB20AE1为拦截输入框(用于获得命令)
- L1 }; h% B- R, b" R6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发/ X) p+ {. {) F: X
6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发* I7 B; S5 W: o0 g: G' Z) O
6FAF4230为hackmap的loop点 我用的hackmap导出位置4 Z1 k# Y3 i" h$ u
+ k0 B6 d, }5 T/ V1 n- v; ]/ ^
4 s6 ^2 ]; o* }$ Q) a$ L
发包函数:/ V+ _- u/ f$ r3 Q1 n3 x5 I
class D2PKT_ITEM
9 P* m* T6 d1 M8 Q4 L{
# ~3 f$ J+ Q! ~$ r#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上
- o# E) Q' `* n2 F#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多2 F, O( X1 b# _( R1 _% V+ L
#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上8 ?: v4 r- M0 s2 e% y0 G
#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上, i9 o r7 Y- c x' E
#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH7 y+ f( h2 g: n: q( b& |
#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上# r4 I9 S5 H2 [$ a3 X- `& ~' A+ y/ F
#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏, }/ o! O/ w( ]/ a
#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上
% M6 i! u, J5 u0 G% u4 {0 k2 L4 E#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -
) X8 z2 x2 Y7 c4 t9 d* V#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店
! P6 H8 j4 U5 B0 z#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV
1 X$ @% X& \) p+ L% I& N# e! t#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道
3 T% A7 C7 x5 Y#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带! T N2 g5 J q
#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上
- |3 l8 T5 o9 e' @0 f#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -
8 U0 O) D* V& g* L a% R#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上# l" b( H2 l- O0 v
#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -
" }5 T+ Z! [4 H* Q0 M+ M) ~" H
+ c8 a+ _- X' H: W0 K+ Q/ ]/ s1 L& t#define PacketItemMaxTick 150& q2 W9 ?9 y' B7 r
#define PacketItemPickUpTick 20
X! X0 b7 o, C( k6 l2 x
1 t6 M! V% m `) G* @) xprivate:; ^" o5 { O/ f5 p1 c( S. O+ r$ D. Z" q
static DWORD _PKTItemTick;3 t7 N! ]9 `( q1 m% o' d* _* h
static DWORD _PKTItemAction;
$ ?& o( M/ ?8 B5 w [ static DWORD _PKTItemID;
; [3 ]8 |0 z2 d( k# [2 U static BYTE _PKTPKTType;
& Q) H1 ?. C0 B7 Ypublic:2 v* Z" ~& e) [
static DWORD PKTItemGetTick() { return _PKTItemTick; }* E/ j& G: g$ e# V) Z
0 g# G& M% K; y. s) E' u
static void PKTItemRelease() $ z! J) l5 k7 f, J+ o3 d* r6 q
{
4 E8 [: E/ K+ N+ g+ t, n _PKTItemTick = 0;
+ b0 O1 T; g1 M6 L _PKTItemAction = 0;2 Y0 ?& p+ ~% g; ?8 W; b) {
_PKTItemID = 0;6 E [, ^" J6 V, m3 V& m/ ]" b
_PKTPKTType = 0;! W6 R( ]8 u0 K0 i( R! ?5 k- r
}
0 V. I% U7 M8 U8 d$ K: _- A/ w3 A" H$ i* ^; b. B7 X
static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick) ! ?) x0 H% V2 O; x5 I
{
2 }9 q. B" S' ] _PKTPKTType = aPacket0;% C. Z/ e! T" L& ~4 `& o6 S
_PKTItemTick = tick;
/ I1 J5 m8 M7 T' h$ L) f _PKTItemAction = ItemAction;" T, P: d: F) P
_PKTItemID = dwItemID;
5 E9 F8 p( ^7 g* J1 \ }
% H; D8 S% b: j" l& t6 L7 x4 B' k) P, u* I% ?/ s
static void PKTItemTellW8(DWORD tick)" W- _+ `: Q4 l5 S+ _
{# F* J: A+ r" T z
_PKTItemTick = tick;* Z9 e/ s$ _# J& B# _1 M3 f7 r4 z
}
2 d' a- L3 o" f& v3 b/ m- B! C n$ J7 [* N9 ?( B c
static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor
& w4 i" Z2 P3 t1 x0 h* s {% s! G$ `9 M1 \" A; p2 e
if (aLength >= 8)
1 Z9 V" x; a3 D, l' E: w! e {
b8 n# I+ k9 A# K DWORD dwItemId = 0;5 y8 t" v+ n! d0 _0 |; j
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));2 C+ h; D+ ?8 N7 U
if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE
, K" d) R2 X) G && _PKTItemAction == ITEM_ACTION_TO_STORAGE
9 e. N. ]$ c5 A& J8 W( G && _PKTPKTType == PACKET_NEWITEM
! R' y& s' R, h. H3 Q* Z' f; v )
( `0 m4 {# b& @- C& j& P0 l, ]1 b6 u! x {
& @6 T+ \; d5 |1 C8 S if (_PKTItemID == 0 && _PKTItemTick)2 [* e+ _. G f4 Q* B5 f
{- G4 Q, s7 H6 X, X/ Q& w+ Q
PKTItemRelease();
- M; a1 a0 V" U" n }
& L1 ?& _0 ]3 D& [1 f; z else if(_PKTItemID== dwItemId&& _PKTItemTick)
1 k" x$ K1 u" U* f6 d% P {( D5 H; S' t7 W, S, T- C5 i5 e
PKTItemRelease();
1 _' _5 F D" q: G/ ? }( E C6 E9 T+ l6 [" K
}
: `; d: d! ?! E) n4 I ; A m$ L6 D# x$ Z, g+ p
}# t! s( d# I! R i2 d. T/ z. E& i
}3 R3 K B7 m. s1 u( D+ O
6 g: k Y6 O1 Y+ [$ v3 `- ? static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored
; i% Y$ O- ?. y+ W8 | Y {# R" s( h5 ~! `# `6 f! H) X
if (aLength >= 8)
) ?0 ]# \6 h# `+ d2 O {) _2 z5 J0 m' a" k9 J4 q' u
DWORD dwItemId = 0;6 e! k0 y d! R8 Y: U
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
+ y' k: H4 m+ o: q5 E if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE
, x! J7 v5 y$ M& E9 I && _PKTItemAction == ITEM_ACTION_FROM_STORAGE
2 B7 H( ~9 U+ u% j* u9 z( r && _PKTPKTType == PACKET_ITEMACTION! m2 u0 b; x2 ~/ F/ O" @
)1 o( r; h' S' w H- q5 m* f! O
{
- q ]% ^- o1 s5 |7 S/ m e if (dwItemId == 0 && _PKTItemTick)0 J) ?, a: u/ m+ H
{
+ k6 e: a4 w% r- L7 O% f2 P PKTItemRelease();
+ d/ u- L* S E- Q0 t }
2 a3 l' j. J, q2 o else if (dwItemId == _PKTItemID && _PKTItemTick)
- M( A- m6 x2 L0 I* z8 Z {
1 [' z% Y+ Z' c PKTItemRelease();/ {( h4 I \. J& g; Y
}
* B6 h: _ w4 i( S }+ A$ K: b" \. u4 G/ b
6 E, s$ E1 o/ M" c2 |# V+ p, g }
/ |. @; o, _; f" v) w5 r }
; F) ~9 ] g. Q. i
2 Q6 B& K2 h6 Y6 l/ p5 P% Q, c static void PKTItemGameLoop()# q6 h0 i) }1 \2 g; v ~& } r0 |. ]
{% g2 F3 H4 _ E4 q) b# p' A1 T+ S, `
if (_PKTItemTick > 0)
* D' h" u( m: O* q/ E _PKTItemTick--;- y: _/ T* R# {5 `8 Z$ s
else if (_PKTItemTick == 0): {( {9 u! z- o5 X% n- K! E! ?
PKTItemRelease();
: l# \3 Y0 Q2 @( Z% o+ [1 N6 k& W! x }) o8 ], ^* E* j) X: |4 Y
6 L n7 B4 E7 v9 x# R8 D
static BOOL PKTItemCando() 4 d3 {; G* ]" v; A8 O& X
{( w9 v1 n3 I- W! N/ m
if (_PKTItemTick == 0)return TRUE;* O }8 B* p8 A/ w; M
return FALSE;' q7 n% J: C' _9 P
}' {7 l4 O; ?9 c: U" F' p% L" h
% M- N# B0 R- F% a# x
static BOOL BuyItem(DWORD ItemID, DWORD npcid)
/ R( j* D Q5 J {* s& C/ {2 x0 g% \
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
3 I0 j5 d4 A |) F. B9 ^2 g BYTE aPacket[17] = { 0 };
, ~% O. \% N0 Y' r& _ aPacket[0] = 0x32;4 Y, q8 `) \( F& C% L: c
::memcpy(&aPacket[1], &npcid, 4);
, ]% e# u8 Y$ q7 Y% J! H$ ^! X ::memcpy(&aPacket[5], &ItemID, 4);0 q4 k5 m/ B @& H% y8 B
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);8 [5 k& n$ Q v# w" K
D2Net::D2SendToServer(17, 0, aPacket);
. q5 O1 D! e2 {+ F% _1 Z return TRUE;
7 w j9 y* q2 x5 B }
$ p( e9 |+ N( L D% m% h! E# z- U& ~- C, P3 `( L4 e6 ]
static BOOL SellItem(DWORD ItemID, DWORD npcid)
8 [* M0 H' _! [ Q {1 k/ O) j) w \( S3 s' l: R; r
PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);; J5 r: e8 n; z
BYTE aPacket[17] = { 0 };: k. u1 G: n7 e! b, ?& D6 Z
aPacket[0] = 0x33;
$ e( T0 `- o' S; | l* N ::memcpy(&aPacket[1], &npcid, 4);$ b! M9 j9 E. T& r
::memcpy(&aPacket[5], &ItemID, 4);
4 ^2 m2 K {9 E8 ?4 f! B //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);: O; Z1 u4 u8 M$ M) r: U+ X
D2Net::D2SendToServer(17, 0, aPacket);7 l0 S, E9 g5 P$ ^
return TRUE;0 Z- `& x+ Z5 D e" Y9 p9 o
}& r1 }' `9 z6 c; A' r( M0 c
0 h; Y% `7 T2 T% t" E' K static BOOL Interact(DWORD nUnitId, DWORD nUnitType);
- Z, ^5 F& a4 D$ n/ J) ?. w
* D0 [1 d8 c" _ a9 z static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);1 a9 w3 A4 @. e1 s8 i* }
4 K+ X4 @3 ^6 n. j0 I
static BOOL OpenCube()
; L' E* p' h$ [4 [ {
+ d+ [/ V; g2 Y( F" Q( [' Z if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;
" i; q0 h5 ?9 o7 Y' F; t& q# d5 `" A0 y6 F
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL); k3 ~4 ]: J9 A# X" d+ A
if (!pCube)
7 }2 M$ e& F; Z! c5 C {& }# ?8 M( E1 T9 X3 r
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
j5 L+ U, L2 _* v if (!pCube)
, b* ~/ o9 x. u$ L+ `/ q# g return FALSE;/ t. @* i3 u; I' B; e4 b; K
}$ |2 W6 \" l; O u
PKTItemTellW8(PacketItemMaxTick);
, S$ e+ t0 v8 x1 O+ @3 n
) J5 P ^0 f% x' c0 ] D2CoordStrc mypst = { NULL };) q+ @1 K; c) R O6 ^* j7 D) V
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
4 F* }% |6 U+ @1 H$ y; b6 _" b4 ]/ Z" a( ^
BYTE aPacket[13] = { 0x20,0 };, n' M- @# [% P/ O
::memcpy(aPacket + 1, &pCube->nItemNum, 4);
3 s! c' x6 J! h' `0 h4 h ::memcpy(aPacket + 5, &(mypst.nX), 4);
% y6 R3 V1 {7 i6 I: J5 O ::memcpy(aPacket + 9, &(mypst.nY), 4);3 ]7 H6 U' S$ |$ i: F2 y! n4 e: Z
D2Net::D2SendToServer(13, 0, aPacket);$ m8 E' P& t$ r, X S9 B, ^) o
return TRUE;
2 q8 B- t) O0 ]$ a2 ]3 n5 v. a }. H3 x( t& A0 c6 s# T
3 [$ ^! F: H8 [, D) ~. h
static BOOL ToInvxy(DWORD x, DWORD y)1 e- Q: @6 \7 k1 J* Y: m0 [ K; |
{$ B- \, q9 a' w
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
" D/ w8 X! K4 C( R* N) V, k0 c
$ ` h3 o2 \4 L0 p6 v' q1 N if (phand == NULL)
3 d0 j$ j( z3 }+ B return FALSE; u/ y2 T0 L6 ]& l2 {
% g$ K8 L4 S' o" [' O4 c
PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);! s+ c- X' |+ ^1 O, a v" G
$ P. g( w2 r/ n6 A: k( X BYTE aPacket[17] = { 0x18,0 };4 _. W4 ^, q3 ?, h/ g6 k
::memcpy(aPacket + 1, &phand->nItemNum, 4);
/ v% { ]* B& j# u! L1 g: P3 v8 Z ::memcpy(aPacket + 5, &x, 4);2 z' u* g ?8 I+ Q
::memcpy(aPacket + 9, &y, 4);9 l D' S5 T$ P, B
D2Net::D2SendToServer(17, 0, aPacket);
5 f& s; N3 F P l return TRUE;# Q+ Q& p9 Z5 I2 `8 g
}
5 D" }6 ~2 c3 Z' B& ~& @' M5 E
" x# H: \, A( {) c |5 {% d9 f static BOOL ToInvRandom(BOOL bBagFix = FALSE)
, Q" J6 O1 X- H3 [/ o) e {
- t @! ^( Z8 t- _$ t7 H4 Q UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);. A8 F3 x9 J# h! I5 }
if (!phand)2 x: Q- _+ M& \* W0 i( X' ^+ q6 b
return FALSE;
Z/ w6 t x8 [ int desx = 0;
- X8 R( ]' J: c0 B int desy = 0;
" [4 j7 {/ W. d( G) p2 ~! y/ M! a5 @- q if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))
4 v1 @ w6 {8 h( P% s8 |9 \ {
) X P+ c1 `( ^1 u ToInvxy(desx, desy);
5 `7 H& |# c" I+ g return TRUE;+ l: X. Y% X( C7 n9 ~( F
}
, _/ u+ E. H- b+ U. [) g( { return FALSE; I/ N3 x" `# f0 X) @, n! {
}. O3 I7 w; L1 I- W3 M- z
) t+ _/ W' R, B, K1 \ static BOOL ToCube()
3 O) q* K9 R5 N {
; n+ I; q3 F3 W2 e* U0 R1 } if (!(*D2Client::ptPlayerClient))return FALSE;. w4 n" n" d/ ?3 w
8 z& l1 i( d+ f7 A: @ UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
7 F8 u8 O$ x: o, ^& r3 d% S if (!phand)return FALSE;4 f! d0 U# {' _/ J$ [' t
& K( \ A* y }) ~2 [: y& H
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块
% H+ f% ?4 `6 ?9 _* l9 Q/ x if (!pCube), e/ N% F9 D+ a( y! I2 c x2 u
{
: R* A1 H8 [. }% D& _/ { pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块) [# ~, D! f! P/ }* h3 g
if (!pCube || !pCube->nItemNum)
# ?8 s# ^. D# U0 X( ^ return FALSE;
- ]& ^, }8 h# k2 D% u5 ~# X' f }+ k, D2 K7 r7 z5 D6 m
% W" s. y$ g4 U w/ a; _9 z5 e
if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))6 V* J! v2 O. ~. P) d& ^& m
return FALSE;2 J9 O9 {# l. V6 c6 F; j
* D2 b2 h* z: \4 ]1 v* @ PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);- I: |# _9 m( j/ d0 N, V, U7 U( w
4 L8 x s, |7 b0 V
BYTE aPacket[9] = { 0x2A,0 };
. k+ V1 q& l/ ~- L9 g/ @ ::memcpy(aPacket + 1, &phand->nItemNum, 4);1 I3 d8 F& i* M, d S
::memcpy(aPacket + 5, &pCube->nItemNum, 4);
, h5 D' I6 D: z) ]2 T& f D2Net::D2SendToServer(9, 0, aPacket);
( b- \# c$ Q# T8 Z) v return TRUE;# T3 G+ y8 `/ @5 _8 U& X
X0 V- l5 K3 a0 a" D1 `
}* I" {4 ~3 X# f! i7 G* Q
6 M* S* n5 D3 W) g( F6 m
static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);
, _4 U. Y6 f7 C0 V) u H% g2 Q& v2 M! _: V0 s
static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存
9 d. V% o; l( \; y% V* V0 [8 D {8 ?. q: q" U9 |+ t$ s9 a
D2CoordStrc mypst = { NULL };
9 w: I) Y( X k5 ^" K' \1 T- n D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);4 j$ F4 E0 [9 d5 n' T$ C8 ~6 N
, B8 k! N8 @6 e if (!mypst.nX)return FALSE;
- o/ Q4 h1 s! c% h3 `
+ n' y. p, g/ I' @' T PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);) _3 @1 q2 m# |6 T7 }
/ z/ Q8 O0 `/ D! P% Q: S
BYTE aPacket[13] = { 0x20,0 };/ c& [" h l; [' V
::memcpy(aPacket + 1, &dwItemID, 4);
, `1 [/ k$ Q5 | ::memcpy(aPacket + 5, &mypst.nX, 4);- R5 D8 y3 v' z' K9 J5 i. W* `
::memcpy(aPacket + 9, &mypst.nY, 4);
, t- b# }8 _1 e% J2 G+ w: p //return D2Net::D2NetSendPacketToServer(0, aPacket, 13);3 d" V0 Z; r; j. B! [1 R y
D2Net::D2SendToServer(13, 0, aPacket);7 K& b$ S, [% W% S! w' I2 l( S
return TRUE;
# G. o" C, P4 n6 J } f) U. K& F' z5 j
g! q7 w* w& q5 a8 S) M3 |5 c static BOOL DropCursorItemToGround()
6 d5 {1 G. G' [ T4 {7 D$ _ {
0 i/ ]: y1 [9 z) u8 _9 w UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);0 {# n$ f9 F# l) b8 n5 V
if (!phand)
: H' L# [0 f9 X8 u% w return FALSE;
9 w Y/ @$ w# @5 j; }
. x7 g/ v$ o5 i5 m4 |! l% _% \ PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);
# R# h8 ?5 g# ~* c! ]0 X7 s( I; E( r& p9 ^) W1 ]9 W6 O
BYTE aPacket[5] = { 0x17 };6 y1 p2 ^1 j; w' u6 C
::memcpy(aPacket + 1, &phand->nItemNum, 4);3 a$ `! u; e- V0 ^& i4 z/ D
D2Net::D2SendToServer(5, 0, aPacket);5 u5 H% N, L: I/ o2 l
return TRUE;
0 H& F0 C+ y: @2 h' M9 D4 u* i- X/ o/ t- N R
}
; b' t" H3 \% Z, s# ]( | _$ K
- P% }; t5 s9 C& i static BOOL PickStorageItemToCursor(DWORD dwItemID)2 t, I2 N/ N8 Z, O5 [
{
# _% f0 l0 R: Z# ]4 I" N PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
# i- e1 R& i; t6 F+ \! S, ^1 b8 d3 R
; _4 t6 Q! S- k2 ^, z BYTE aPacket[5] = { 0 };1 b- {. ^8 M9 B; q( {5 \5 O
aPacket[0] = 0x19;' T7 V9 s/ D2 W% d% b
::memcpy(aPacket + 1, &dwItemID, 4);) K* X3 M3 |5 c$ n
//return D2Net::D2NetSendPacketToServer(0, aPacket, 5);
, I' c# K8 K6 T S u; C( w# ?# p D2Net::D2SendToServer(5, 0, aPacket);9 w7 i+ ?5 S* [# `2 A
return TRUE;# [/ h, H/ j* z9 a M7 R0 D9 u1 P
}2 e+ L( W p; ~
4 D% A1 T7 o# b. K% T& P) o4 C static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)9 g$ y3 k- z# D- Q. n. a5 d
{/ c ^; E, I3 R0 }
PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
F. w: i5 D/ }& G BYTE aPacket[17] = { 0x1f,0 };
W4 v5 Y1 k% d" y, o! ^6 V ::memcpy(aPacket + 1, &ItemID1, 4);8 S& s: ]: S! I `
::memcpy(aPacket + 5, &ItemID2, 4);4 S$ L8 M: |9 O* K& z( H1 C1 W1 H
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
. [# q8 |. j- Q) Y4 K6 y* L D2Net::D2SendToServer(17, 0, aPacket);& u( R; B2 u- O8 }* b
return TRUE;! t8 N2 L. N/ ?
}1 P# l$ {4 M @ [
E& g5 w( A: n' p% a7 q
static BOOL Transmute()' g) q, H4 ?- [# H+ `* p. I
{- [0 R6 x! K+ ]
if (!(*D2Client::ptPlayerClient))return FALSE;
4 V3 S7 b! p& F& M7 T7 ?9 u5 J- {' m% x+ @; Y
if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory)). P2 N. a$ [/ u8 D' j7 ~
return FALSE;7 Y! Z& [0 f5 N/ ~" [2 d
7 E: R" `0 V9 \* ]$ n8 _0 @
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);: @/ m3 \6 x$ x( c
BYTE aPacket[7] = { 0 };! v' H: g v; ~* k$ K! D* a
aPacket[0] = 0x4f;
0 U/ U6 j" p1 w/ h4 J aPacket[1] = 0x18;
. H$ n0 A1 r/ l: r" y9 @ D2Net::D2SendToServer(7, 0, aPacket);4 R) E4 q' |2 H! _
return TRUE;. M1 v1 T. [ a
}
_( s7 `! D" ?};
4 R% i1 [ z _: M; c% h' Y) ]' ~, r; X4 y' o6 m; ~$ U
|
|