|
|
转载9 \/ [4 I4 r8 K; d' ?5 z* `) B
自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:
@3 C* i5 f, Z# [& kD2Client:5 R& d! z* B# a; k( V! l* H' {
6FB20AE1为拦截输入框(用于获得命令)
8 f- N1 ~% w# H* g9 p0 A( @/ E6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发; K3 \1 R; u) J9 L; P' x6 k# [
6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发% \; Z4 g. Z& Z v. D+ }
6FAF4230为hackmap的loop点 我用的hackmap导出位置0 h: I! f, R j4 `
1 I' @$ \2 r0 [* P: Q7 r3 {( x& K, A% Q+ O8 L$ B9 D I
发包函数:
/ g! J; t7 |+ E$ @7 e! X% Lclass D2PKT_ITEM+ b0 M8 m$ \" ^8 c, \
{
) q% o: W' j* k* u0 W; e2 E#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上% @% ?5 x `# [
#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多
) a k) g0 u. G1 W' d#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上 w; L8 `* D' e7 w
#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上' ?; H! v9 c2 `0 ]# C2 z
#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH
( ?9 z: `( ?: f- O0 f J#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上 p8 i2 r) z* t% C- u) o8 g
#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏0 B. H/ ~- u. Z
#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上4 m! M6 a2 R0 @
#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -
$ t" v, \: X A8 L( [1 D1 k#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店$ Z! L$ ?- ]8 p. G3 G1 w" P
#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV
* z' M1 ~# {! J2 a( o7 {8 |#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道
9 r7 Q/ F) T6 B6 h: z#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带
, l( f2 G; r1 ^: T' Q8 X#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上5 h* _7 a* g j6 |5 @5 a
#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -0 W0 U: Q% u$ K) T3 f
#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上
+ ?. A! {( C4 A1 e#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -& X% n7 K7 ?+ I( Z- A/ m
+ N. F( D! Y* \7 n4 _$ n) D# |
#define PacketItemMaxTick 1505 X: M i( Y- {0 v4 y
#define PacketItemPickUpTick 20
4 d: f* \6 |5 T _. U/ e' A- H8 [+ g" O0 k6 q* [4 R& w4 x8 V
private:
; P& E6 p0 b, n+ r9 {" F static DWORD _PKTItemTick;
! C" C) R/ N# x! [ static DWORD _PKTItemAction;
\& i5 ]- I" [$ x* y; X0 c static DWORD _PKTItemID;5 T- n; Y& G2 u; _% L! J+ J. _
static BYTE _PKTPKTType;1 m U$ l4 q, ]- W% u" H" ^( d
public:! l% c# N3 U4 D" E9 F. o
static DWORD PKTItemGetTick() { return _PKTItemTick; }" _" U& f3 `& F) W" z7 s6 Y
8 p; X! Q1 K+ u3 r+ m8 b d* N
static void PKTItemRelease()
) O: W* f6 ]7 |$ h1 g. B {: v+ d5 s, O% E, o3 P
_PKTItemTick = 0;
7 ^* l: h' \, ~& ]1 y7 ? _PKTItemAction = 0;
6 H# i0 x. b5 G _PKTItemID = 0;$ m6 z3 m# L+ E
_PKTPKTType = 0;
+ L1 s' n4 p& Z/ _ }- R' C( K7 p. r$ ]
: [3 ] ^$ z' S# S static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick)
0 I1 \) q {: U9 q: |- @ {
6 F: s4 L2 q8 {4 W; \* o+ u _PKTPKTType = aPacket0;2 o# P: q1 F) e7 [8 d3 |4 U
_PKTItemTick = tick;
7 }0 N/ D5 j) \* g _PKTItemAction = ItemAction;+ |! D1 j$ s7 V0 |$ }. b$ |2 P
_PKTItemID = dwItemID;
1 {8 i8 e! D/ k7 e4 e% U4 M, J9 ?2 {. g }2 N9 Z. T1 u: @
6 U X; a5 `( b4 d& p3 z) X. N
static void PKTItemTellW8(DWORD tick)
8 l# p( Z$ d' Z) _ { U v+ P& g* A1 @. X
_PKTItemTick = tick;
( @' Z/ }; t* O. H) @( y }. d8 V' A$ h6 N+ v9 M, ^& E
4 W+ J$ @, a9 t7 |( p- @5 R3 W static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor) {2 F0 m/ \5 s1 M3 p! \ b* ~/ m
{. `, Q7 U |; i1 F) y
if (aLength >= 8)
1 X3 T) `! Y2 e$ s {( ~2 Q+ Q% d, o* ^ ~
DWORD dwItemId = 0;# i- e# _5 k/ Z3 l2 l1 p
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
5 k8 B7 X0 B8 H if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE
6 X( ]# W5 }9 I && _PKTItemAction == ITEM_ACTION_TO_STORAGE3 w; `% h, @1 v% H, d9 u7 }) j' ?4 p
&& _PKTPKTType == PACKET_NEWITEM4 R( N* i! {% k- p1 Y+ Z5 K$ {! T
)
: ]: r9 O+ B& R/ w5 w# t4 d {
2 j5 Y2 e. \ k, D( q if (_PKTItemID == 0 && _PKTItemTick)
$ @% z N7 ?3 e! n {( T: E* @/ v8 @) J9 B# P" d6 a
PKTItemRelease();
8 d8 N( Z( y0 U }9 y+ f( C: w" `9 l! ~6 Q/ z7 e
else if(_PKTItemID== dwItemId&& _PKTItemTick). w" W4 d5 ]3 H) ~* w
{
2 R. f g# p3 M" u2 g0 | PKTItemRelease();
* ~! \2 W3 X8 \ }: S S Z; u) U
}+ ]8 h' S& @( s! }1 z& e3 @
`5 w. O: ^! H* z3 T8 O }
$ {& N( f/ u! B+ ] }
# E4 ]1 h' a: z ~/ P
7 e: d9 G* p+ J static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored
* F! T4 M0 a; j3 ?% y- A {
) t9 O& \# ^% A/ f9 n if (aLength >= 8)# x u% j4 e- S
{
! L k& [8 h9 [0 h0 I4 E2 Y/ s DWORD dwItemId = 0;
# y9 X' g5 U# a9 E memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));# x/ ]) f& B4 `5 }5 v
if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE
: Z6 E; G% b+ P& G7 q( n' H && _PKTItemAction == ITEM_ACTION_FROM_STORAGE; _$ }. C6 O6 ?% s; z8 c+ e
&& _PKTPKTType == PACKET_ITEMACTION' G- G4 a. g3 H8 o) k# U
)
/ E# f; O3 X$ v0 N6 v6 i {! I2 P$ I& s- d+ ~; }* @5 F. D1 E
if (dwItemId == 0 && _PKTItemTick)
3 b4 H5 c& m! L, C$ d) a1 v+ p {# D {
1 G: t. O. a! V y PKTItemRelease();8 B, C2 s! ^$ i' ^: I1 U+ H. I
}
$ r& ?/ u7 I9 ~2 \ else if (dwItemId == _PKTItemID && _PKTItemTick)
8 A' g# g" X' u1 {7 r! ^( G8 y4 X! K/ K {
~/ E- j# d1 ? PKTItemRelease();9 U* ]: C% f, E7 D" k- a
}7 i( y9 }5 [5 Q4 F
}! F" B! U& L9 a: \; G- q" o
% N0 E6 a8 f# x; H* U2 I
}5 l$ i3 y- K; x, S5 \! W) O2 A4 V
}6 p2 r1 B: K5 V
Y0 ], t5 N' u! B
static void PKTItemGameLoop()
+ t5 a& H; T) L* d8 G5 ?8 X4 q) ?8 S {
2 ], Y) Y$ i6 O5 _ if (_PKTItemTick > 0)
" H5 D0 n2 ~4 R' ^ _PKTItemTick--;
5 X2 ^- q' R. ^! e else if (_PKTItemTick == 0)
# H" ~- H' H4 o) h% A PKTItemRelease();+ {& @" z X; c0 T6 m
}( i# w/ |0 k0 ?2 \$ K$ F' |1 ^+ k
, H# D% [5 [! u5 q& L
static BOOL PKTItemCando() ) }* Q; x8 n) C. ?
{
& T$ ?: s) B, _- h' \6 j) b if (_PKTItemTick == 0)return TRUE;2 O1 R0 _8 m" |& F; d9 s% X/ W
return FALSE;
. i; Q) X, D+ h! h }/ y4 m1 x$ Q9 b; g& A ^
8 Z8 V& c; j2 f) n static BOOL BuyItem(DWORD ItemID, DWORD npcid), r* v3 p9 @! Y& |+ ]" f' A- ^
{9 q/ V6 K7 l' k( X4 [
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
( _- |* }- H( I; r' |: O3 F; a! c BYTE aPacket[17] = { 0 };
: [; X. n6 N: z; e# L aPacket[0] = 0x32;
z2 m7 d5 e( |. [% [5 q" F0 r ::memcpy(&aPacket[1], &npcid, 4);
7 k- o E& Q, v, ]3 f! f" q' j6 H ::memcpy(&aPacket[5], &ItemID, 4);
! T* b" R/ @9 u //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
) X9 k, r; t# e- f D2Net::D2SendToServer(17, 0, aPacket);
t2 U+ J6 K8 n6 S" A' X% C' J( Y return TRUE;% ?2 L2 `7 u' u5 w, `
}
/ I" U! {+ N/ |, ~
% A) P# z8 L) F V" H; P static BOOL SellItem(DWORD ItemID, DWORD npcid)8 H% Z6 D# A% _7 f
{
/ W4 A2 S# i9 [; [ r1 p1 l$ U PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);3 y2 S+ Q2 p* p: E
BYTE aPacket[17] = { 0 };& N$ ~* f. g" O3 d3 ^" I) k% A7 \
aPacket[0] = 0x33;
) W e7 @2 E: \! D6 W' X" w {: A8 q ::memcpy(&aPacket[1], &npcid, 4);4 o) V& f1 \8 g
::memcpy(&aPacket[5], &ItemID, 4);. Q: o( K4 w/ H/ j, u2 S
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);9 O! `8 c9 v* R3 E
D2Net::D2SendToServer(17, 0, aPacket);
6 c( A; j, g# u6 m4 g8 b return TRUE;% N3 W. L2 x; l( ~+ R7 x T) z
}% y- E# Q$ w1 N
6 B" V% x c7 }/ R" V& s
static BOOL Interact(DWORD nUnitId, DWORD nUnitType);* c) F0 t0 B( n n
O N# }; z: p! d' M! {+ b* X static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);+ @) i8 v& m0 c. g% G: O; A
) c7 ^ t1 D$ u( `# Z+ V
static BOOL OpenCube()$ S Y$ S! n/ z# g# }, d
{6 H" O3 W6 c% |& D& i& P
if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;* L& d1 ]$ W; o
& O; ~9 P/ [8 D UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
" U* I+ Y* s4 `2 S: K if (!pCube)
3 u/ R6 j) |9 |$ w( h* t9 j {: R( @4 h* g8 p& f. ]0 _
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
6 f* z5 F2 z! z5 Q4 f/ P8 H+ z0 l if (!pCube): o% o4 \0 e' t; w" {4 p$ v
return FALSE;9 \' u7 m( R5 ~/ l( G4 ]6 _% A% X
}( Z h& v% y; h2 x- i8 V& W7 Z
PKTItemTellW8(PacketItemMaxTick);
% P/ G5 S" m1 U* n3 k D: z
4 m1 j; S& q% j! C7 T D2CoordStrc mypst = { NULL };0 Q' t! J t5 }* a* J% P
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
( x4 H2 x7 k% O( o+ l5 l! B1 l( H* ?" Q/ H% H# j
BYTE aPacket[13] = { 0x20,0 };
5 v' n8 ^/ v* J" t6 a ::memcpy(aPacket + 1, &pCube->nItemNum, 4);
: c# @0 e+ Y, k8 A4 P7 p ::memcpy(aPacket + 5, &(mypst.nX), 4);
( q/ C) [; x. r' o$ O! y6 F5 _/ z' d ::memcpy(aPacket + 9, &(mypst.nY), 4);
+ g, U- B* M, r/ F% y. |1 }' ^3 z8 `/ v D2Net::D2SendToServer(13, 0, aPacket);9 F$ D' |# p9 \" ~$ ^4 E' f3 _ N
return TRUE;
; a) q5 A+ b# n! i+ [( q" s+ l5 u }6 |6 d- A1 r) D6 `3 f; f
7 M4 ~- w0 H2 ?0 G
static BOOL ToInvxy(DWORD x, DWORD y)% @/ c# D& [1 P
{
0 ~7 [ i# k4 q3 G. I3 P UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);$ N; _% {" g! ^# U. |
, u5 U) [) z, j/ l if (phand == NULL)* R) ~, ^1 m4 t0 R
return FALSE;; j0 @! ?& r* m, @& \. X# ~
" N6 o2 Y( ?4 q/ \' V5 v- ]3 X
PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);1 p' F9 @+ O' x$ w B5 y8 `
- T3 C f1 J4 N [$ v) u" d$ G
BYTE aPacket[17] = { 0x18,0 };
( f3 {$ C% {* Z! R ::memcpy(aPacket + 1, &phand->nItemNum, 4);9 w% J% K$ b5 N4 u7 e4 n: k( ^- I; a
::memcpy(aPacket + 5, &x, 4);- ~% x' `% L, }# F& ]3 G
::memcpy(aPacket + 9, &y, 4);
9 w' l! a% I) p. W: g& I7 t$ L$ e; F D2Net::D2SendToServer(17, 0, aPacket);7 g2 C$ X/ f2 m/ j* ]# ]' |
return TRUE;! m3 ]9 ]' S! {( h2 h. w# G
}- ]* N, g P, M; w8 d6 Y# \
$ m# R" J! t5 j- w/ A D. m static BOOL ToInvRandom(BOOL bBagFix = FALSE)
$ x9 o1 c# J _* [5 z {4 J+ o# b: v) g' P( x
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
$ }" N( W" X& {; }2 V if (!phand)1 @4 b5 ?( j/ {+ p
return FALSE;; W' _7 b) s' {, u# B3 f
int desx = 0;
0 E0 E: z/ L6 N* m0 O int desy = 0;
0 Y: w8 f+ _" r1 H% u' P8 T if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))" |: G7 O- C# s- _
{
7 k& S$ ?6 e7 I* c1 `% s2 s ToInvxy(desx, desy);
7 j. w; a3 \( \- ]; R4 Q4 ~ return TRUE;
9 M+ z: |* a' q! _ }6 H' N/ {: l% B* {. l' _
return FALSE;, j v8 f6 h$ p; \9 Q3 a8 i
} R/ ~- F: q2 A# e; M& A
2 m8 R* M- c/ g' J
static BOOL ToCube()
6 w$ {1 ]( D8 D, r {
j! M" q/ A( N. c if (!(*D2Client::ptPlayerClient))return FALSE;
) }" j. B& F2 q' ^3 ^5 G& i
4 }; b, N% [, b% M4 Q UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);5 ^% k4 {$ i' V% Q: w
if (!phand)return FALSE;
8 l4 Y6 R* j3 ^3 ?! Y
6 k& [# \; C9 I; R UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块
& o7 F+ M6 c& E9 n8 C if (!pCube)
' i# u9 A; k3 k5 o {+ i4 b. X% S* _! j. |
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块+ M4 `; h, G7 I. c. x8 s( }7 c
if (!pCube || !pCube->nItemNum)
3 c$ u- q( C0 M8 J C return FALSE;
; F4 q0 G$ ]8 c1 ]; B1 W% p }4 V2 F$ Y+ Y# u4 M# J( Y- f( e
g% o" |# T J! x
if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))
- u5 \ V; o x: V9 g7 t- a return FALSE;4 H# a- x+ [( ^9 a8 l2 V
" s' b7 I* Z' ^3 h' K$ ? PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
1 ?/ ~- P: i- u2 ? D4 r2 V0 ^! _8 v0 {6 x. Z
BYTE aPacket[9] = { 0x2A,0 };+ Q8 P0 v: R) C$ Y, _7 q
::memcpy(aPacket + 1, &phand->nItemNum, 4);2 v% W6 E8 d' a- O* h; E6 _7 L
::memcpy(aPacket + 5, &pCube->nItemNum, 4);
% I D! _1 P) v9 B4 I6 T2 C0 F D2Net::D2SendToServer(9, 0, aPacket);4 }& \% j) L, q+ a
return TRUE;1 o5 Z2 R/ `; h2 F
- i: X0 q7 O) r$ Q }8 s, T: O8 D9 G7 u- O7 l+ c
4 r: B* G+ ^! i( W" R
static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);+ O! a3 ] g$ O# [% J3 n R4 V
6 {/ U+ j8 y* U7 x
static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存
2 ^; V) ~3 s$ ~' r {; } L) n- C$ g% q8 l
D2CoordStrc mypst = { NULL };3 s3 b% p9 z8 o5 t% H* [9 Y' ?3 G
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
: r* @/ v- @ S
+ \; A- n; G! k( Q) S- k$ `$ T- ` if (!mypst.nX)return FALSE;* A+ `! F5 `2 V A- g% r$ j( j, H
0 O; U% s9 i4 f( L* S
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
% y6 Y1 Z- w3 N8 e% g! Y( K T5 P
BYTE aPacket[13] = { 0x20,0 };
' q4 o1 h( q$ I0 `0 E& C ~ ::memcpy(aPacket + 1, &dwItemID, 4);
+ z/ U% m6 V- j( s0 M% A ::memcpy(aPacket + 5, &mypst.nX, 4);
8 _! g' b: ?; Z* a. r: {8 m& O z ::memcpy(aPacket + 9, &mypst.nY, 4);. s( Q, S5 U! D4 @% ]4 d( ~! |7 x
//return D2Net::D2NetSendPacketToServer(0, aPacket, 13);
& W& m( P& v0 r4 Z; V D2Net::D2SendToServer(13, 0, aPacket);3 Z$ `/ j6 G8 Q6 r% h% b
return TRUE;
$ U$ g1 K8 b* z4 I3 T }
5 \+ T4 [+ H8 z2 P8 ^# a) l6 ?2 W
static BOOL DropCursorItemToGround()5 L, o" m$ u# m
{$ ~+ D& d6 {: X9 a9 F
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);$ K/ @9 H9 ?- ?" _9 T+ U7 M7 w
if (!phand)+ x; k; U/ G" I. x h4 |
return FALSE;0 D" P7 [/ v: l8 }6 ^; h
/ N0 e1 ?5 r+ X
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);
% M7 I5 p9 Z* ^% \, x3 v
1 s2 ~0 q& U& w* [% l& @ BYTE aPacket[5] = { 0x17 };
$ k1 h% N; z& g+ V/ O9 |4 y ::memcpy(aPacket + 1, &phand->nItemNum, 4);5 p! o7 w2 o- W0 \$ V0 E+ w, `4 K
D2Net::D2SendToServer(5, 0, aPacket);6 m' j' q6 R: |( i+ S
return TRUE;2 V7 W% l# u" d( _, ~+ \
& [7 N# L: E# b9 z' L }7 j/ K3 v8 m$ S- r
( D$ ^! m( c0 ]/ `5 X. c. A static BOOL PickStorageItemToCursor(DWORD dwItemID)
8 H8 ~$ s8 n! n8 @2 y6 P; t$ w {; A* }) k0 u3 Z4 h
PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
! u) ]) {" h) Q+ w7 ], X1 T& K- w/ N9 |: ?$ s: A% D6 q4 N
BYTE aPacket[5] = { 0 };' `2 b, k4 y. M+ u4 c: B7 k
aPacket[0] = 0x19;# d- i6 S* K# \) z( r( l
::memcpy(aPacket + 1, &dwItemID, 4);
|; A( i" p: u( s //return D2Net::D2NetSendPacketToServer(0, aPacket, 5);
2 G* l4 T9 i/ t' u D2Net::D2SendToServer(5, 0, aPacket);- _6 z. d# }3 Q
return TRUE;
0 w5 H9 r r3 Q# M. ~6 i }
+ O3 q7 Q) g, \% H4 C& x# U! R& ?5 P g6 u) Y9 k* G
static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)5 E0 R: c2 A0 j
{
7 d( z% H( b/ S3 y6 p7 W PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);% i$ R- S5 z, n
BYTE aPacket[17] = { 0x1f,0 };
8 h3 P. y% }: J8 q+ Q ::memcpy(aPacket + 1, &ItemID1, 4);
( O4 b6 J9 R$ u$ Q$ b ::memcpy(aPacket + 5, &ItemID2, 4);
+ N/ }' q& P9 A3 \" d: s: M/ i //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
$ B* W4 N5 P+ i" l8 O2 B% ^ D2Net::D2SendToServer(17, 0, aPacket);
) j2 b+ V4 j. f4 I2 E( F f return TRUE; I5 a0 `3 ^% f a: x
}
! A; c; g2 {% M; t3 E) K) Q: h& ?& a4 t" G9 @
static BOOL Transmute()6 ?( i/ ^' ], K, t* K6 l9 L
{: k1 H. F0 J, j$ Y- v! D6 q* U# d
if (!(*D2Client::ptPlayerClient))return FALSE;
6 ]' a- [7 B4 U1 F! t7 \
/ C, ~ H4 g5 k O* y, S+ o' { if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))
# L6 q* F7 r( H( o return FALSE;
2 o# o0 E1 S. t$ U8 \4 L3 S8 d* b) Y7 _4 Z6 N1 ]( \& ?
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
( C( }( E/ C, |# u BYTE aPacket[7] = { 0 };; n/ y( U7 Q. b9 U& Y Z
aPacket[0] = 0x4f;& [. @ G3 y+ G3 _. z6 z& Q, w
aPacket[1] = 0x18;
9 f- \4 k+ ] t+ j) D# q) x D2Net::D2SendToServer(7, 0, aPacket); Z% [7 g9 g" w' b# m% Z
return TRUE;6 L- V* H. d, n1 W0 }6 e
}
1 y0 x6 C4 E/ z" Y8 I};
- `% h. M: N, W. f+ F. n7 D7 L- D; S8 Z3 ?9 q, @
|
|