|
|
转载
9 T0 y) B4 ]; F" o8 u$ Y) }9 b0 }3 |" R自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:
0 m. F0 Q' |" F9 kD2Client:
; p! I+ I4 T- h# }; z) q* Q% G1 r) S- F6FB20AE1为拦截输入框(用于获得命令)
6 }( {9 f0 K$ s) }- G+ h8 k6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发
5 Y9 e5 q# A; @! Q" N+ t6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发
! r, i6 E) g! X. u6 v; v6FAF4230为hackmap的loop点 我用的hackmap导出位置
W" Z8 s8 X: e" _
! e3 T4 a- v ~
8 C4 W, E# R4 Q% a) j; |发包函数:! ]0 w( u# t5 b7 o
class D2PKT_ITEM( U! }: ]/ ^6 Q: Q _3 O7 z
{( u1 N) I3 L6 P+ M! B
#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上
, O+ N0 {' M9 ]) }( [. f, U$ K+ Q1 T#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多
" w. d* s: }0 ]* s3 G" _#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上7 o% g3 z5 a; M1 j t1 L9 ^7 f
#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上; C1 h% v9 f6 q& N n- y. B" e
#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH3 y; }, E- G j9 |% h, c
#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上" a1 \! m- E- [5 |
#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏2 g z: l6 P2 x* s+ a( K+ g
#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上
K% n6 L% U& a" O#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -5 Y4 ?* J$ d, ?, O/ l4 S* Z8 D. |! J
#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店8 Q+ Z/ o# f/ i5 h$ t! O$ ~! z! g
#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV2 ]* |( r: q/ \8 f, ?, F0 B3 J
#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道 % Y5 W% A+ S6 [! w: \$ J
#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带/ N/ z# J2 q" D, M- ^. Z
#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上5 P* D& a+ f' I$ q. f. C u
#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -- u% F1 {# e" o0 [. V
#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上) s' F W/ ?4 }- h" @" G
#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -
. j" Q2 o: w5 \, w% }# o
6 c2 g5 D I! E+ d6 K, `$ a0 E, |#define PacketItemMaxTick 150, R+ X# p5 O( Z6 l, ]/ I
#define PacketItemPickUpTick 20
% Y+ O9 f$ Q( P0 D! A+ {& R- C2 L2 u0 g0 ? ~" }) P/ I1 a) R
private:
0 C$ ]5 M" |% n$ } static DWORD _PKTItemTick;+ s% Q( a' @! U K, I
static DWORD _PKTItemAction;2 O) m7 B s9 W. m# k% @% @ u$ j7 u
static DWORD _PKTItemID;
3 E& K. @' @- G static BYTE _PKTPKTType;/ h* V1 |( W" M; p* e4 u# ?
public:
7 K. h9 ]. o, \ static DWORD PKTItemGetTick() { return _PKTItemTick; }
; Q; x0 E e* c: e: K! ]$ {' f: L) q" A
static void PKTItemRelease() - g( L/ Q8 {' m2 o
{
/ _, y: Z2 e9 V' S7 a _PKTItemTick = 0;+ k4 T/ f8 [* l1 F- l; W+ _. c
_PKTItemAction = 0;+ K* b& y7 L' Y8 u1 w
_PKTItemID = 0;
4 O/ N9 z/ W) X0 g! V$ ] _PKTPKTType = 0;
! D1 T! ?" O" ~2 n }
7 ]- ]% l* O# G+ k; |6 x4 ~# i" M: v9 j: l4 u) Y; q
static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick)
% b% a# g [8 } {
/ l, ]1 c! L* @/ l: j; B1 G$ e* F _PKTPKTType = aPacket0;
9 z8 H; l& }! N! }6 `' ~0 Y4 | _PKTItemTick = tick;- a. ] ^% j/ H) j# P
_PKTItemAction = ItemAction;8 m p2 N1 ~1 ~/ j# r7 l- t% s1 E9 L
_PKTItemID = dwItemID;, U7 E- ^( I+ r6 t
}. ?4 m. C1 n2 U1 j+ ?; K
w1 \+ a& ]( S3 p' Z* Q static void PKTItemTellW8(DWORD tick)' r4 J9 g( c5 d, ^8 y% o7 D
{4 P# }% h# r+ z8 P6 F
_PKTItemTick = tick;
% W: K* u+ ]8 n/ s+ j9 ^ }
* t- B; k1 O2 B
/ W5 b. Y8 _ C( i# D static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor
( k) }% i3 |# o7 [- D {
- ?% F4 E$ q2 W4 {5 w4 e7 l6 `( A5 z- T if (aLength >= 8)
$ f' `4 s$ e6 z( p! w) H {. w% I4 Z5 x) L/ c
DWORD dwItemId = 0;
- \6 w% q3 [( n; U memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
5 o! r( D. M5 q& F( L# ~) y if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE
S- b+ [; M+ s) v7 _ && _PKTItemAction == ITEM_ACTION_TO_STORAGE
3 J# i4 j1 }" w6 L && _PKTPKTType == PACKET_NEWITEM
! D9 b9 z: ~' V4 T1 Z5 [# K$ t )
% ~: S2 m! U; x7 {5 }: l# t { o4 q% u3 V3 {; y* f/ I! L P4 }. f
if (_PKTItemID == 0 && _PKTItemTick)3 Q* w' Z( _0 W# g- ~4 A: e
{
2 b: t, E, M/ M5 G8 x PKTItemRelease();
7 Z) ?# o. U8 S# Q }0 [8 F: [0 l7 H. }8 _, A; M/ M
else if(_PKTItemID== dwItemId&& _PKTItemTick)+ L: }2 a8 o$ \, x7 F. i& O) `- \3 r
{
7 R" A9 J7 c3 }* } j PKTItemRelease();
4 O- i! k9 B( X! w T% T$ h8 y }
6 U: W4 f, q- R" b3 [ }
$ _4 i% P; v3 M8 O" }
& u, l& O4 n7 W0 h3 H }3 C! _# P I1 g
}
& _5 }$ R1 p1 Z1 z5 A2 a
9 h# W4 _, p# m$ D0 C3 Q3 l static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored, l$ g8 V$ c' o6 v
{: V. ~$ l9 t- p# y, i- g% [
if (aLength >= 8)* S7 K; @6 x% G! P% w
{
% A: S# u! [7 L7 j, Z DWORD dwItemId = 0;
) g3 K- j, s0 p9 h" U3 G8 y3 y& g memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));7 D$ _( i# \, T; y, d' w
if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE0 X i: t. B" Q, V! A3 q" R* C @
&& _PKTItemAction == ITEM_ACTION_FROM_STORAGE% i2 I: ?$ T# q) a
&& _PKTPKTType == PACKET_ITEMACTION
$ l A' I" C8 q. e) m* ` )2 b+ E h$ y2 L: E8 H
{2 m; L4 v. _0 Z+ b% U$ |1 g
if (dwItemId == 0 && _PKTItemTick)/ B1 j1 |; s1 t
{( a% k' C) B8 J' Z" S2 E
PKTItemRelease();
$ A! ?1 ?- ?: p& ^! o5 D" L }7 U1 i3 T3 t7 X% o6 E
else if (dwItemId == _PKTItemID && _PKTItemTick)5 Z8 }! S3 {' E# `. i+ y
{
8 {% i; `5 R/ c: m PKTItemRelease();
. f9 `) n4 s" A' L& A3 ~1 `! F }
; u9 ]4 E, C+ O* Y9 f }
& w# x! g" R1 }0 T( L M% [4 ^ 4 e* o- v" ~. B, n
}2 U, C. q& B& k$ M0 ~& o* o
}
. t% g, j' J5 H2 u* ^
: l: R; D# v/ z: [+ R static void PKTItemGameLoop()
& y( p i" D& x* t' H( M/ p8 s+ k {
0 A1 Y1 @! q: U: |) ^8 D9 J if (_PKTItemTick > 0)/ e7 i- g1 {* |. s8 O# Y! W7 r
_PKTItemTick--;& G( U0 P- D; K) m5 N; Z3 B! b J
else if (_PKTItemTick == 0)$ `3 F9 ~$ i# N* ^
PKTItemRelease();. o( H9 \: x2 p9 T' i
}/ B9 e- C/ ]0 U( p
+ K# M. W* f, H static BOOL PKTItemCando() ' ~8 W) H6 b" g
{/ c6 J& G$ `8 Z5 z9 S
if (_PKTItemTick == 0)return TRUE;
3 }% o( v% x1 R2 Y5 g return FALSE;& j( V1 k: \1 V* @) o
}* i: g7 q. }" t& d
) u& R/ z' {' x static BOOL BuyItem(DWORD ItemID, DWORD npcid)
0 Q) @% s6 v9 ~- [8 s0 r {
" R) u( J! J! c% a' q PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
d, K: y9 M# U, o( n BYTE aPacket[17] = { 0 };( x$ C7 J: X: @3 K# r+ H
aPacket[0] = 0x32;
2 S* E. m. V S" l ::memcpy(&aPacket[1], &npcid, 4);
9 T0 r* G1 t! |9 y8 H: w- ^$ }4 c ::memcpy(&aPacket[5], &ItemID, 4);0 M: R I a7 k9 y- d1 t
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);7 Y! ^ i) b% R4 G5 p, b' S+ c2 K
D2Net::D2SendToServer(17, 0, aPacket);. E5 N$ E- g9 e, i, b w2 P
return TRUE;
' E X2 F$ r* d3 _ }* v# |, R3 d# U/ Y/ a, n% l$ }
( ]8 @( q7 |$ _/ q
static BOOL SellItem(DWORD ItemID, DWORD npcid)3 ?7 J, X( M3 a: o
{/ {, d' d$ w( d8 F3 H
PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
2 R6 x m4 J4 y. s9 A4 I# I BYTE aPacket[17] = { 0 };& K: F+ Q6 V: c# s% _- g
aPacket[0] = 0x33;& J+ X$ {& q: ^/ I0 D$ K. h; z
::memcpy(&aPacket[1], &npcid, 4);
9 J# x6 z+ E" s7 `6 I1 b7 k ::memcpy(&aPacket[5], &ItemID, 4);1 v, @0 a$ A1 x! z: @: f1 E
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);. s n5 ?& X$ t3 _2 N8 T* ]6 _0 R
D2Net::D2SendToServer(17, 0, aPacket);
. B1 t+ V$ l; z. U7 G0 c return TRUE;
. T+ y7 o* @/ u# Q) ~0 H$ C }
8 z6 B: r T& X1 h. a4 {( V8 g( S
9 h, d$ M4 k- B+ V# l3 Y$ l9 \ static BOOL Interact(DWORD nUnitId, DWORD nUnitType);
% n# m" F9 L* B, g) j/ s; H* `" i$ ^ U* i0 h
static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);
0 n( {( I: c. d( f8 n7 d; O! w9 g7 N7 t; k$ D0 Z
static BOOL OpenCube()# o4 Y! e0 @& f& k
{
4 Q; h+ l; A+ H& a( r if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;
( v3 \: P9 Q3 {& e: g9 t5 A* s5 F0 x* r. n) U
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
5 s% O) M4 R0 c) | if (!pCube)
5 u: e8 t9 d- Z9 n1 G {2 o" y _4 `( M
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
7 w5 O' E& ]2 I2 Q if (!pCube)* b4 }& X4 _5 F
return FALSE;
9 l- j# K+ f+ \- b% L }
% z7 J7 `+ K/ K PKTItemTellW8(PacketItemMaxTick);! O/ L, \, n* ^# u/ F, k2 i; Z
' P+ w; M4 u5 Y9 o+ Q% u/ p D2CoordStrc mypst = { NULL };
$ S. M4 N7 ]/ K% z D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
' q" c0 m4 i @+ n0 [9 m* B
2 C3 X. A4 r0 T$ G& {2 U. G" F3 f0 S BYTE aPacket[13] = { 0x20,0 };
( a+ H5 C: ^! L5 t" t ::memcpy(aPacket + 1, &pCube->nItemNum, 4);
: m$ W, _) B7 L) S6 n! N6 I ::memcpy(aPacket + 5, &(mypst.nX), 4);8 A! y/ L, w V& d! D% y
::memcpy(aPacket + 9, &(mypst.nY), 4);
" U3 Y( z1 [. J6 I6 r- ^ D2Net::D2SendToServer(13, 0, aPacket);% \, x# d# r5 h7 i0 C
return TRUE;
$ F, W; Z1 ]' o/ x' ]' y; l8 e9 y& } }/ K f7 o! Z7 F% q, D
- d# d; ^0 @" {# T0 o
static BOOL ToInvxy(DWORD x, DWORD y)2 M3 H2 Y2 U7 k' q
{
, |# j- |" V$ k W( r% d; Z* H UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);9 R g! e0 S+ m9 N& h7 X) k s
# |1 K5 U/ B8 t
if (phand == NULL)
0 D; i# z% \/ X/ J! N0 V! t4 W return FALSE;
' U7 M U: H& @& @3 D$ y* h7 |' s9 R) g2 Y5 j0 Z
PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
. R0 m2 _' g. J' r. s% A, }6 m# ^( j. p/ O/ O, q% N" ?, V3 s
BYTE aPacket[17] = { 0x18,0 };
3 s( J% e6 u2 m ::memcpy(aPacket + 1, &phand->nItemNum, 4);
, d& V8 ^, M6 A* `9 A' @( K ::memcpy(aPacket + 5, &x, 4);
0 r H, K1 N, E& q9 j0 N- L1 O ::memcpy(aPacket + 9, &y, 4);, b. s: g) u' X& n
D2Net::D2SendToServer(17, 0, aPacket);
6 Q% i. B8 q! z! d return TRUE;
: A5 ~/ z) h3 H2 @0 { }
1 L+ ^ n# T" C
4 [; y- T! Q4 l static BOOL ToInvRandom(BOOL bBagFix = FALSE) ' ~3 I# c- ~7 @. t
{& k+ j: ~! X' k q
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);" p4 z+ {; P6 ^* g# F1 {1 [
if (!phand). z: G ~# }+ v* {1 t! w& o3 d3 |
return FALSE;8 k$ s- ?& Y" S4 e7 Z) T6 M
int desx = 0;
5 M: z' p: i5 n* D/ ^ int desy = 0;& R/ P4 ~$ t6 c9 j% M, v
if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))& W5 \2 Y# L/ ? ^& R, Q7 T
{& E, i* J- k( ?3 _8 q* I
ToInvxy(desx, desy);
! t7 e% E2 v A0 x- t2 M return TRUE;
! m j7 J! Y- H9 P- t# `2 t# J }
6 o7 ?- E7 l" n- D2 W return FALSE;
. e$ L: e2 ^$ z, B& D }
+ y! h1 B. y1 l
/ v$ o$ N8 ] `+ l1 J& L2 n) @8 E static BOOL ToCube()) Y( R2 P/ B" z) G6 P! g* I. p( f( b
{! Z; m0 @1 U9 d' b# K% F* \- `
if (!(*D2Client::ptPlayerClient))return FALSE;; ^0 t- `$ Z$ O( z2 U- w
8 g/ G2 U4 k/ k: D1 m- m, K' w z# Q UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
4 q1 y) `) D. s- E8 [ g2 f if (!phand)return FALSE;3 o% ]7 F9 a8 W8 x( `0 k6 E' y8 m: S
4 ?9 P8 W8 U1 D3 ^
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块5 i% w6 I4 G9 a- ~& L6 }- H, `" o
if (!pCube)
# B7 _+ d1 q; w/ \9 @ {3 W# n, Z. _( ^) E/ Q
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块4 ^' l; Y+ C4 q7 ]% p. W r* N
if (!pCube || !pCube->nItemNum)8 j/ `3 x# h$ C; U$ [
return FALSE;
+ z& h) |; L7 W/ L7 q1 a }
7 k- h( e5 h/ @, R2 p A" Z- J1 V& m+ z- j% Y& Y) n" D
if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))" U! k3 W/ u" |% g" k
return FALSE;
$ `3 ? z* [0 L
, G. o- L2 _- e- y5 g- \ PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);+ P" E; i+ I1 j* Y( ~; v
) J$ o' ^" F, V1 m$ s0 g, N
BYTE aPacket[9] = { 0x2A,0 };
7 i+ J& v. |/ y' u ::memcpy(aPacket + 1, &phand->nItemNum, 4);* E E( v L# r
::memcpy(aPacket + 5, &pCube->nItemNum, 4);( M7 n3 T* X* Q" F; T' D3 E9 ^
D2Net::D2SendToServer(9, 0, aPacket);7 F. d3 D: X) d" b3 x
return TRUE;- P. ]* r5 k; [% I
5 X0 P4 e. ^2 j- j) D$ O }$ J0 F4 h' T* j: ?4 @* O
5 L6 u- {& r) P9 l
static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);
+ ^% m4 @' E: I$ `8 W' R% P. [6 i% Z
static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存( S7 ]! P* q& Z1 a6 B/ u. u; b
{
9 V; v. D! d* I- V, D D2CoordStrc mypst = { NULL };
: p8 W; G. Z `: n& m0 g D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);5 [3 @, \! T: A( ~. c
- f2 {; J2 k6 }/ Z
if (!mypst.nX)return FALSE;
5 g. S1 X. [3 M% G0 B7 z 1 N# b5 a" o' f0 \ U5 [" N" ~
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);0 e$ `1 p+ B" U2 z1 l
( _) q3 m; N/ g) A* [1 j) c2 L# Y! c. C
BYTE aPacket[13] = { 0x20,0 };0 m4 d8 Q. s7 {9 Q$ f: T
::memcpy(aPacket + 1, &dwItemID, 4);
6 U" F. P& w4 ]5 O! ^+ ~ ::memcpy(aPacket + 5, &mypst.nX, 4);, f- a- ^! R" f. q
::memcpy(aPacket + 9, &mypst.nY, 4);, Y1 j9 o$ z" d- n6 D
//return D2Net::D2NetSendPacketToServer(0, aPacket, 13);0 x, V0 r; X3 R
D2Net::D2SendToServer(13, 0, aPacket);
z' ?# I/ Z. G' Y( L1 x% K return TRUE;
) Q( ^, j4 @, I6 d: o* ?1 { }
0 \7 H) f& o( z3 y- b: Q) J0 y p$ V a1 S
static BOOL DropCursorItemToGround()* m8 B! {. ~* r5 Z' E- h
{
0 N8 W2 Z. i: w# _% I9 W UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);- {. H, B0 d$ S7 G6 a. g) P7 \
if (!phand)# \. h |. T- L U3 N% J
return FALSE;' }( w8 F2 t! L8 y- i( J
8 o) v5 Y$ Z8 Q' I9 X( |$ S; B, z! t PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);
" b/ l0 v) U1 m
* ]. ?0 K; k3 y+ H8 w# E BYTE aPacket[5] = { 0x17 };
+ Y4 N N9 ^1 ^" F1 u- \ ::memcpy(aPacket + 1, &phand->nItemNum, 4);
) R5 E/ ?7 x( B5 Q! g; `- ` D2Net::D2SendToServer(5, 0, aPacket);1 B2 A0 B; X7 z9 p% F$ C
return TRUE;7 }6 @; z: s9 v+ L/ i
4 r3 Q# g9 g$ B8 o2 M2 T
}% U4 _) q6 y/ v6 B
# u/ Y8 v6 x a, x: y static BOOL PickStorageItemToCursor(DWORD dwItemID)" T4 K& U! Y% b$ V. u
{
% @9 X6 R6 l! Z( f PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
! n5 _6 B& ` a' `& H! Y
2 a \- W+ X" h1 B8 z# D4 v2 M( E BYTE aPacket[5] = { 0 };
4 M% K m- L8 |* m+ B aPacket[0] = 0x19;
S7 P* a6 L' {* I ::memcpy(aPacket + 1, &dwItemID, 4);
& W. `' o) l P8 V //return D2Net::D2NetSendPacketToServer(0, aPacket, 5);; T, {& I: X1 I( ]% `* p
D2Net::D2SendToServer(5, 0, aPacket);4 j' Z0 {* p' l
return TRUE;. \2 ^7 ]( f( k0 S5 D8 c
}) ]. X4 s- B' f) `2 d: h5 Y
. `0 Z! Z6 ? {& q( ?) \ static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)3 ]. {' P& o E5 g# C
{
( Y: `% K3 A$ s! U2 q! { PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);; P' L- k S; W6 H, D* G% W, l
BYTE aPacket[17] = { 0x1f,0 };
6 P7 r$ D( e' C ::memcpy(aPacket + 1, &ItemID1, 4);1 h3 g {& U- Y5 f
::memcpy(aPacket + 5, &ItemID2, 4);
7 ~) ~6 g( q) ?$ c" C //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);$ \/ [8 V" f4 p% R
D2Net::D2SendToServer(17, 0, aPacket);. e( q2 v1 k7 |6 G9 u1 {9 {
return TRUE;
7 X+ Z1 `8 U- g- E* p1 | }; T/ \, V' [6 c' D
' L0 d0 k; Y2 |& E" G
static BOOL Transmute()5 _/ m: g, f1 ~3 S) y
{- [4 ~; g/ G% J5 o
if (!(*D2Client::ptPlayerClient))return FALSE;
5 q; {" Y& z+ |
$ H7 p1 e8 Y( z) [' p if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))( G3 F- S( b0 O, [# U
return FALSE;7 ]% u* w$ _6 X8 G& B4 X. P
# p; m9 I2 ]8 s7 v, l" `9 G2 K PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);" _7 _( t& {, r* c0 p
BYTE aPacket[7] = { 0 };' N, u7 A1 {/ N% }& E# ?3 F
aPacket[0] = 0x4f;$ f1 ~; w3 c9 E [/ T4 \
aPacket[1] = 0x18;8 i, V" x- [. q* g
D2Net::D2SendToServer(7, 0, aPacket);' m6 d+ a2 j5 }( C$ r
return TRUE;
& S* U9 g v' j0 {, T; m! @7 f3 n }
8 x% N3 |( `( q$ @& [) y" ~* ]};) B r6 h: g+ a- Y; O& ^8 p
0 Q- M* b# c7 s! u: m' @: _% w# a
|
|