|
|
转载
8 ?5 N1 P" p. R& B2 P% b自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:
0 o! w% Z% ^0 {6 _3 [& M5 RD2Client:' a' A1 ^$ O5 x: G2 H
6FB20AE1为拦截输入框(用于获得命令)
& ]) x5 r" ^7 u! z1 r* j9 |1 L6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发9 F. m; x w, ^: c
6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发7 N* C& Q: m0 |; X* B+ h
6FAF4230为hackmap的loop点 我用的hackmap导出位置: u' h+ B1 [# _2 w! F
( n; R; u3 U( {0 C% n/ x4 ^
; d: |1 n: j! I0 R% A$ x4 Y2 e发包函数:: H! |4 q* d- X- a
class D2PKT_ITEM
9 R2 e' `! t& c) P* _/ y& s5 X{
1 A2 r# R% V0 _4 A6 f! x#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上
: b4 O2 j4 e$ Q+ F* H! [#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多
5 x" I( g4 `5 o7 ~$ ]( ?#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上
* L3 l. I4 o; v: p; ^. {) f#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上. ~+ R. T4 J& }' {8 O% Q4 J
#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH
/ u1 H3 K: y# y% S4 M! c#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上$ ?# D6 U/ |( Z- @6 e2 ]
#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏
% G1 N# N* m" W/ D. g#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上4 h+ i' w$ J9 |
#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -3 x: D0 K; l, [- {4 F7 \
#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店
# {! B% r0 v, }7 y: S) Q#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV2 I8 L6 |* P. U/ ~' D L
#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道
' Y8 B) _! s4 _* q) \1 x* E l& @0 J#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带
, L6 s0 Z# e" {#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上* C2 ?1 e' Q6 O; ]
#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -6 g/ o& B( j6 T8 N8 I
#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上
# L- f/ E' ?0 F4 v, }! ]#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -
9 z9 T! s) l# r: h- r+ D# q" R9 ^5 @" h7 Y) C
#define PacketItemMaxTick 150
6 a' }/ i/ w& Q& w, l n m#define PacketItemPickUpTick 20+ n/ v) Y1 x) d% I
/ C5 U3 L2 d m" M% W- gprivate:8 \+ ]& J6 O# r u. a2 l
static DWORD _PKTItemTick;4 y0 d8 G4 `: y. t# J
static DWORD _PKTItemAction;( h6 h# s% k1 M" k+ v
static DWORD _PKTItemID;
. t- V. \1 a% o! C7 e2 D$ H static BYTE _PKTPKTType;7 x8 @6 S) R% X/ X# d0 W8 U
public: G1 M2 v3 a: f! G S
static DWORD PKTItemGetTick() { return _PKTItemTick; }9 ?( c$ `: e" E, g! t% c& a
9 `0 j# C4 z- A
static void PKTItemRelease()
# W) ^' w4 A' }8 ^; e5 ` {
* Z2 ~0 \, R; A; ]) C: |3 i _PKTItemTick = 0;" l8 p( C. M7 \( D* W/ ?
_PKTItemAction = 0;
' A, r8 S# E8 i1 @" T4 _; R _PKTItemID = 0;4 R/ v8 Q7 M+ q" D& t% }
_PKTPKTType = 0;/ b# d9 I7 k; J1 {
}7 T. C i: z( g5 p7 x4 e1 b: n
& N ~7 b# y2 [4 p static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick)
- G$ z" y7 w% F1 H2 m" z- i {
1 e3 q; t$ D7 O- O9 m5 V _PKTPKTType = aPacket0;
. L( f4 D' ~! i. y: h2 \ _PKTItemTick = tick;; h3 X! P, \; `) v$ d7 f
_PKTItemAction = ItemAction;; j f0 ?0 g* o- V3 N
_PKTItemID = dwItemID;5 P% {6 Y; j4 g% N
}
! S) X% x2 W8 K! o6 A4 E. |
3 O& V9 o: F; @6 q3 a6 K, D, K2 F3 S1 v static void PKTItemTellW8(DWORD tick)
6 `9 ]: K! p) S' R7 ^3 p {
Z! O/ k1 i1 r# }8 S _PKTItemTick = tick;
( E6 g4 \* I8 V& b }3 N8 v, b* |/ d% ~! X$ `
8 d) T, A# U+ y0 b$ ] static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor
8 f+ _3 G$ i# x4 q# ? {
" V0 `& @: F. ?6 [5 ^! Y) b; H, n if (aLength >= 8)
* n |( ~9 L Y; a4 e. w+ Z) @ {
( n P- B' O" H( W a$ Z, R7 ^% x DWORD dwItemId = 0;8 T% G* F2 J6 A9 T3 [& I
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
& W- ^$ K4 L" D0 i3 \( ^3 K6 A if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE; D" {/ I& G5 ?+ I8 E
&& _PKTItemAction == ITEM_ACTION_TO_STORAGE
1 F$ g+ m- S) U, v* g && _PKTPKTType == PACKET_NEWITEM
5 L6 n N- ]3 [# p) E2 m )) H- D7 u- c+ w7 h. r) I) E0 _
{ }0 \( x7 C" E+ M5 t
if (_PKTItemID == 0 && _PKTItemTick)2 h" _" N7 [! x. M1 v
{
& X- _6 ?" ~1 n5 {- R6 k PKTItemRelease(); j s* ?+ j. Q% @
}
3 p0 q% a2 K; b9 y$ E) g9 s3 ` z else if(_PKTItemID== dwItemId&& _PKTItemTick)0 C# O& ~+ p* d) w
{8 F+ `/ D8 l {" C! M' F. U* W
PKTItemRelease();+ f$ Y8 `* A+ ~5 Z/ }
}. y9 _$ |) a* a1 ]2 N! t
}
1 R J$ y6 Y% G: B" z0 f $ U" w7 n: F& z/ S' j/ {7 Y3 r/ F
}
@( V! c4 O: B5 c1 t' w }
+ a/ F3 X+ t O ^, y. I- [) N( X4 ?; d& s9 u1 u3 P! C6 m
static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored4 X, n# t [6 P
{& a& w& q2 O x. @
if (aLength >= 8)
; N0 x0 f' }; `3 T/ y+ w {
/ ?/ [6 b. y0 G) I+ s8 g DWORD dwItemId = 0;4 E, Y, \: f# I G6 M+ |! y0 ~' O
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
3 W0 Z# J* z/ o9 C+ a- T4 A if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE
( o: O' _& `0 m7 l) s& P0 F$ M$ D && _PKTItemAction == ITEM_ACTION_FROM_STORAGE: ]1 ], ~% P4 z" _- D) @* c& h
&& _PKTPKTType == PACKET_ITEMACTION
* p, [, \9 d2 K5 Q$ A ), u9 _2 N% N$ p; S
{
3 q& P% T C7 c7 Q if (dwItemId == 0 && _PKTItemTick)
! W% q3 b# J a9 r) p {
# m a8 Z" |0 j0 g+ f PKTItemRelease();' r2 q6 h2 N8 F' o! X
}
1 H. u4 m2 n4 M5 V$ X( J else if (dwItemId == _PKTItemID && _PKTItemTick)
3 X0 @$ \8 \/ o1 { {. l+ x+ u/ v& C+ p/ L$ I
PKTItemRelease();3 y/ D# d1 O% N9 B6 b: V- g
}: L! I6 ~5 ]. L1 c& x+ _6 Y/ g+ l( g4 y
}
4 j) S+ o0 O0 u- L0 G , |- x1 g" h; v/ {
}
: w5 u& e0 P5 t: j" Q: s, [ }
3 e' C# e& y0 ~. i, Q) z7 i: f8 M, Q2 S
static void PKTItemGameLoop()
& H3 Z2 P/ [! k% G: ^; _ { K5 Z, H' V' G$ V* L" `
if (_PKTItemTick > 0); @/ y9 i; `( c B
_PKTItemTick--;6 f* J/ \2 @) D* B1 M7 r9 y0 j
else if (_PKTItemTick == 0)" m' Z0 N1 M ^% z7 s" U8 U* j0 p# D
PKTItemRelease();8 p. ?5 l7 g% R
}6 L4 Q# m0 o5 x, l- M+ Y8 z
* `# _8 ]/ W4 ^( P: E0 O& I8 { static BOOL PKTItemCando() + i6 Y5 C# s3 e! ?- P6 V4 F
{; Y! u( x) M; w( Y4 `+ N; d
if (_PKTItemTick == 0)return TRUE;
' h3 o/ a( B/ M/ l; F2 K9 @2 r return FALSE;& b0 { u1 V' K% M$ a% N: L- I
}: e* I! f( B f; @" a, B# T
3 m; q b/ S* L: r! [/ a8 n
static BOOL BuyItem(DWORD ItemID, DWORD npcid)2 V" m" C7 V c0 @
{
* j# z; B* X0 l PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
. `: ?0 Q: M2 T, z+ R: o9 s, N BYTE aPacket[17] = { 0 };& y6 ~8 X( s3 t3 m) N+ V# z
aPacket[0] = 0x32;
. z! O) p! L; D1 y, o ::memcpy(&aPacket[1], &npcid, 4);
$ R* v) w z4 G2 @7 x. j ::memcpy(&aPacket[5], &ItemID, 4);
; j- J! c8 T. T9 k y! d, n //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);! ]) J0 \1 D i( v8 p( ?; o9 i
D2Net::D2SendToServer(17, 0, aPacket);
! x- ^* v( h( J6 v return TRUE;" I% b6 `: \+ |7 m7 I5 {' J( _
}
( c( E3 x" ]' c: |8 j% n4 I
; @( x) l5 N5 o static BOOL SellItem(DWORD ItemID, DWORD npcid)
: z$ P& J6 R/ p9 y7 `/ {; e {
) w. J4 l5 B7 @) {/ `5 h5 U: n PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
! F6 W, j: c1 [6 t BYTE aPacket[17] = { 0 };9 U, B3 a% N f+ a, d4 G- C% o, ~, ]
aPacket[0] = 0x33;
( j0 h3 t; m: n; T ::memcpy(&aPacket[1], &npcid, 4);
# W# y+ N6 F! w2 }! r+ w5 {* z( _ ::memcpy(&aPacket[5], &ItemID, 4); ^0 n) d5 C8 c" A0 T9 ~+ ~) {9 B
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);' x2 [, _# G% r
D2Net::D2SendToServer(17, 0, aPacket);
9 f6 K) L5 P; v return TRUE;/ Q) R) @) T- s/ ^! a& ]0 v5 H2 O
}
% e8 B( O- _& ~& d
% D! k) m y4 W: q static BOOL Interact(DWORD nUnitId, DWORD nUnitType);
' [, W( y) u8 L% F" N" v; a# L& f" G7 w0 [! v
static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);
0 \9 d/ `8 P$ w7 i3 J; z8 a9 [1 S7 c) [6 v8 [, @. j
static BOOL OpenCube()" t4 ^" v4 F4 ^0 _0 b
{% ~) d+ N1 Z$ \% L. u8 o
if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;
# _# S. f/ _ ~' [6 I7 `) z* @) v1 Y- W5 T& A3 Y4 q' t3 C
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
$ B2 Q: q7 N9 C) N+ b M9 m if (!pCube)
: b/ J2 i7 G1 ? {
! t) s& Q) K2 W pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
, z! {' ]) k: @) C, b if (!pCube)
, B' X" @( }9 @( \, k2 @9 z& A return FALSE;" e) q1 ~! w+ ?' I7 U
}* f" `0 M% |3 G- d) i
PKTItemTellW8(PacketItemMaxTick);# G) b! t+ g. ]% |( c
: v/ ~7 l- } I D2CoordStrc mypst = { NULL };
+ u, x/ u$ C9 T D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);" \1 a+ p) U; t5 r, J4 g' w$ l. L
8 p, F- z8 ?8 u2 x( O
BYTE aPacket[13] = { 0x20,0 };
6 n7 k {- U: y( o d ::memcpy(aPacket + 1, &pCube->nItemNum, 4);
+ Q5 x- ^0 b6 `8 ` ::memcpy(aPacket + 5, &(mypst.nX), 4);
, R3 M* [* C# S4 p1 o0 D ::memcpy(aPacket + 9, &(mypst.nY), 4);/ V" W: m4 _" L' e
D2Net::D2SendToServer(13, 0, aPacket);
% e% n7 R& S, M return TRUE;
8 G: ~: R4 I) p }
1 N; b. c8 t" n- c' Z7 w5 \+ G @$ y2 L5 ~* D# Q' B/ b; m, `
static BOOL ToInvxy(DWORD x, DWORD y)
3 C2 B- k1 h( V: U1 ~ {
. S) z. _) ]0 f# ^ UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
( I& k( I2 _9 l/ R" f! ~. |! S( E
+ L+ L+ H" l/ \ if (phand == NULL)
1 J" r* R( d9 G0 Q& N9 n, t" v2 G return FALSE;
' g! i& R1 i2 b+ w! d6 ?; E+ m
7 |4 C& C7 X# }( a5 m, L9 O% i* n* { PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
9 w; g& k/ o' s
; e$ ^$ e, A& T2 c8 P0 P- z. Y BYTE aPacket[17] = { 0x18,0 };
' @" k$ D5 ?- v' X, d. i. n. M ::memcpy(aPacket + 1, &phand->nItemNum, 4);
( _3 P, p! l: _7 c ::memcpy(aPacket + 5, &x, 4);7 j1 r% R2 t$ Q( c7 B f
::memcpy(aPacket + 9, &y, 4);
0 I/ g# B: c. ^0 }6 f/ s D2Net::D2SendToServer(17, 0, aPacket); w7 C. r! [4 ?# x# P
return TRUE;# R4 o0 I2 j% Q' |" `( x
}
$ y" O5 q% u1 m7 ^2 w. p( R) T* e; ~3 z4 t. h
static BOOL ToInvRandom(BOOL bBagFix = FALSE) 1 f- X' N! `' n& s
{
/ v# E! |, a7 d UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
: Q2 C* v: g" x9 ^$ u$ ` J if (!phand)
0 }- |- J; ]- V% N return FALSE;# o8 Z8 S; ?: J" l5 ~
int desx = 0;, N- u: g! h) N: d6 O. } S5 S% M
int desy = 0;
' j) b' m5 O! C/ h0 K9 `* l/ | if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))- h; N' K/ T1 Y
{( D% \7 P6 d0 s1 @
ToInvxy(desx, desy);5 F# [/ u% q/ F- h
return TRUE;' f1 P& H/ I/ s2 _% P; I/ c( {
}
0 a$ V4 ~2 [6 n. o/ @0 ~ return FALSE;# P. D; y# V7 P" z0 T( A
}
& f; I* x. R6 i" [' P \( v, q
+ c3 ?% g5 C! l. B' g, w2 ^ static BOOL ToCube()/ Y- P! j P M1 ?$ Z! X( p
{
/ b* w$ z3 ]; t) f) [/ V if (!(*D2Client::ptPlayerClient))return FALSE;9 r* b- f, T4 {( P8 B
3 g* [0 Y8 ~! R5 }5 y! E
UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
6 D( J% t" Y1 ~3 P3 h. {' @2 i. n; O if (!phand)return FALSE;
& b. q+ u; Y8 [3 Y3 j/ d- }9 s1 z' V X9 I
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块
3 V, Z% s) E, O3 Y+ d7 s4 L! k if (!pCube)
- \; \/ A' J5 T9 q L- u' q+ A* i {' ?4 \7 f' d9 {" O8 \) a6 |% ^
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块* Z0 H ]" u- j8 |' n, F4 \
if (!pCube || !pCube->nItemNum)* P0 M' }4 I* q& ~
return FALSE;( V4 F6 }3 ^& j E, j5 U/ ~
}; W* r/ _' I& |8 G) y
1 P4 u& S, R% h
if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))
4 z1 {# ?' z+ q8 H1 _3 c return FALSE;3 E7 ?3 s+ i: W8 F# F
" E2 D: q M+ v! J PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
# F) y. T0 V; U& T
1 q1 G9 @4 `: s BYTE aPacket[9] = { 0x2A,0 };* }( |$ ]' c6 X( s# D( b, I
::memcpy(aPacket + 1, &phand->nItemNum, 4);6 t& h5 O7 G! ~/ ?3 _# l% o
::memcpy(aPacket + 5, &pCube->nItemNum, 4);
5 g3 W1 R4 ^) U1 o3 D7 Z D2Net::D2SendToServer(9, 0, aPacket);( A7 \0 I9 p, ~- |* J
return TRUE;- @' Z3 f& w9 O& ]4 t; w; v
' k' `) W( K* i+ {# Q/ z$ }
}
8 n `0 ?/ ?. t5 @, {
~+ t- Z8 b# h8 U1 ~9 ~ static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);9 d$ Z2 C) A& S4 M) R& v: |. G5 P/ [
. `6 c1 q, X" e+ L* W8 N
static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存
7 J8 ^$ h2 C) \6 V2 e, u8 Z# V6 F0 B {8 ]$ ?0 d, J6 T( }! i9 K, q
D2CoordStrc mypst = { NULL };$ ^* j3 E' h* [" L u$ B* l
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);( r" o' e M x8 Z" D
$ H! c' R e% J# j0 n
if (!mypst.nX)return FALSE;
S5 G7 R+ T: I' d8 n% R
8 T v5 }2 _: R$ G5 ~4 y8 K* J% X3 a PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);) ?( z9 Y0 a! a7 P! A
* C6 V& s* a, ?0 x! k: T8 X BYTE aPacket[13] = { 0x20,0 };
0 t6 j9 N. p4 q: G4 A ::memcpy(aPacket + 1, &dwItemID, 4);
, |$ Q: n: W' Z% c5 [- G' i2 N ::memcpy(aPacket + 5, &mypst.nX, 4);# C( t2 _6 V& f0 i1 Z
::memcpy(aPacket + 9, &mypst.nY, 4);% J8 P* T9 E4 `5 z1 q. t! O
//return D2Net::D2NetSendPacketToServer(0, aPacket, 13);
; p$ i3 y9 i0 L8 I D2Net::D2SendToServer(13, 0, aPacket);
2 }& S) A) t k3 R return TRUE;5 S! ^$ p4 b* f$ ]
}' @$ Z4 j# I. Q; m) p
3 j+ ?. n* Q4 R% Q! l7 H8 V' `& }
static BOOL DropCursorItemToGround()
. i3 k* u9 D: l {
; B, ?- c) o9 \7 u UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);* l) x+ B7 T& g, u! {
if (!phand). K9 h' p1 w- }# L
return FALSE;- `# L- Z- h: p2 t5 m
, F3 J8 O |4 Q" |+ U' u& C: X; Y0 c3 H PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);
2 e$ ^1 e8 O$ C, N: `
. Y0 j t7 K& Q+ \4 x* G1 b" v BYTE aPacket[5] = { 0x17 };* i3 z8 w5 {6 ~- c" X% M
::memcpy(aPacket + 1, &phand->nItemNum, 4);" Q! W" K% J9 A' [0 O
D2Net::D2SendToServer(5, 0, aPacket);
6 Y [3 @& Y) m0 c v( g( c8 N return TRUE;
( b: S: }: d2 a6 @8 ~) Y \6 V7 y! R0 c+ f, s* H* U
}
% ?+ \. P) }( k; C+ {7 N& X V8 d% \
static BOOL PickStorageItemToCursor(DWORD dwItemID)% m; ?- x4 k0 P3 Z8 U# z1 Y
{1 P) q3 E7 S: I* n/ B* F% w
PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);/ j) g; f+ o5 h* j, B
& x0 U8 l2 v5 R
BYTE aPacket[5] = { 0 };* S4 O9 `* x* [/ {# f, N% Q
aPacket[0] = 0x19;) u# y) }+ ]8 a/ h2 |/ S
::memcpy(aPacket + 1, &dwItemID, 4);
2 `, h' `; s; D! U/ h //return D2Net::D2NetSendPacketToServer(0, aPacket, 5);! ~" T) x" @) E3 m- p1 S8 U
D2Net::D2SendToServer(5, 0, aPacket);
u* t" r6 s% ]- X6 L! E return TRUE;$ P# {2 j5 C8 S
}
8 a" I& ]& r A% U/ a+ h W* z+ v5 z
. M3 y0 e6 W$ w# J3 a, Q static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2); Y8 l4 w2 [- F
{
3 w9 x, b8 v1 } PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);% w; E# g% M' a4 h+ v7 l
BYTE aPacket[17] = { 0x1f,0 };) K+ r; Q& E, i% E+ N! \
::memcpy(aPacket + 1, &ItemID1, 4);
; M( S6 z& S6 O/ x+ B3 U ::memcpy(aPacket + 5, &ItemID2, 4);# p# F3 Q) k7 M% x3 a2 R& a& x" N
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
* O, h8 T0 K+ I6 k9 O* m! i D2Net::D2SendToServer(17, 0, aPacket);) ~$ p7 u. w# {5 E- }* E# p3 _
return TRUE;
. ~, f" X! a( P, d- g5 q }
0 m) B7 Q' |: L2 u6 ^4 y0 c j! m1 E3 J) t# J% M4 o
static BOOL Transmute()
. Z/ X7 x" V$ U' m {
$ G2 b5 l/ a/ o! H0 y6 u if (!(*D2Client::ptPlayerClient))return FALSE;# C: {4 _* A; S) u, u" q- {
! G' t6 K1 x) U1 q( {
if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))
. |* v9 n' J0 Z7 n, F% [. S7 j' W return FALSE;% v* {9 \" a; y- i# p1 _
% h' |) G8 R; Y0 Z/ _: B" [# J+ [
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
3 i% m, X- {+ r8 p! x1 q& } BYTE aPacket[7] = { 0 };
: a3 |4 i1 G4 p: T( ^9 b- M T aPacket[0] = 0x4f;
. j5 B8 |& D* d3 }2 d- ?. ~; a aPacket[1] = 0x18;
7 _3 A' M* l1 k( m" ]/ t* t2 h D2Net::D2SendToServer(7, 0, aPacket);
- z1 a3 ?5 V5 p" X) O8 ]# m$ L return TRUE;
# _$ @: W) f3 O }; d# d. F3 v6 }0 z+ ^2 W& w
};
2 L o& }) t1 X6 J" T# _' x+ n! k! a, W' o F4 S
|
|