|
转载. P$ P# s$ y6 ?, i
自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:- |$ A7 ~+ I" f1 v
D2Client:1 P; T4 F( [: A% Z. G! \- C; K
6FB20AE1为拦截输入框(用于获得命令)
; K0 P* u" U0 _6 B( I6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发
2 h6 Q( H, S- B# X6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发+ b; c+ ~) K3 o2 K: h4 E' ]' q
6FAF4230为hackmap的loop点 我用的hackmap导出位置
* c. z4 c3 Y+ a/ J- R( ^6 T
Q4 f' z& z8 W/ m
5 H# G( C/ X, [ g发包函数:
! o C" k7 N6 Y4 }4 W. D3 Q# Cclass D2PKT_ITEM+ E8 N0 e% [! l: N% l% p
{
( T: w% h8 p) h0 c" q e& `#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上
4 a; J4 R) J! a! S; e#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多
- s/ t+ F6 j' C& ` _#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上
g8 @. \# q, u. i j, S#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上
; u" ^; k8 |" ^- @, D#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH
* v) C0 j+ j& T4 T' G- ]#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上0 t) M; Q, x* ]: F; _3 Q) \ k" X
#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏
- S9 G3 R, L# w# O#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上 n* e* F6 E# j
#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -
- r* }6 U1 d, Q#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店
1 Z8 V- z! E; g X#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV) X \% R) L) l2 @7 c8 o
#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道
% E- K4 y: ] Z#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带) H! ~; ?9 Q% n% a& ?
#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上* Z# b7 ?( e. G3 U
#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -& E1 K0 t0 v$ t2 f0 t; A. g- W
#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上
* g. _: O9 T8 F#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -' l8 q: c* u x0 h% W: E
2 y [+ k0 l* Y7 {$ i#define PacketItemMaxTick 150
0 z: j- ]& `3 I7 c1 b5 R#define PacketItemPickUpTick 200 c- A* A; K; Q T0 u
+ q% p# N3 r. ?* G+ N8 J
private:$ m( s# S/ c9 t% X4 ]
static DWORD _PKTItemTick;
7 S7 i! N: I$ T% W static DWORD _PKTItemAction;7 p- d! f" N0 m) F2 v
static DWORD _PKTItemID;
; w- N) d3 [5 C+ z; p& V static BYTE _PKTPKTType;
; l+ M( ~+ v! S- Epublic:
4 [6 E$ x# S' H& y" t3 t static DWORD PKTItemGetTick() { return _PKTItemTick; }, v5 v( X9 n- _5 O4 P, ^
6 Z9 d5 u% @6 h; i a4 _# O static void PKTItemRelease() * y# S- f! K8 C6 d8 y' i6 i. Z
{; g: D6 q# O1 D: B
_PKTItemTick = 0;
1 J4 l' A4 ~6 K( i: t B' L. E _PKTItemAction = 0;
. ? y+ d* o) w" P _PKTItemID = 0;/ t3 E% M+ `0 ]7 w8 v, i# B
_PKTPKTType = 0;, @7 A! h$ M, x \ t& C
}
) V( t% V, E+ w7 c
' l9 e2 O- {! G5 D8 w+ o& S static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick) 0 Z9 x9 ^$ h7 ^$ m
{. M$ J1 J- C4 ?4 i2 T
_PKTPKTType = aPacket0;
9 J" R( b' j; R/ R3 H( ~ _PKTItemTick = tick;5 f, F1 Q( b$ J! N# n
_PKTItemAction = ItemAction;
& u$ L# {9 r2 V2 s( W' z! X! ` _PKTItemID = dwItemID;
4 q& n; J% p1 S }
+ l1 J; ^- a! x7 x0 L& H/ Y: {
9 @3 N2 X1 k+ L+ E* h# i3 m2 A static void PKTItemTellW8(DWORD tick)
7 x4 L7 M& ~) R! M! C {
* q% {* W) Q! Q# e _PKTItemTick = tick;3 B" @/ i/ X0 X8 t8 F0 [3 v2 v" r
}/ j/ Y3 e0 k" n1 x- I3 a( r: f# _, W
3 O/ a5 [4 V; \: K static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor
) G/ e3 X* N1 |' ]1 ~ {, ?9 Q2 D/ b$ i0 t2 {
if (aLength >= 8)) Z; ^( h: w+ R8 f5 i2 B
{- R( H9 ]) ~5 b
DWORD dwItemId = 0;; t1 ^5 d/ }8 j- P4 d
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
8 X& W4 l" I7 d# }6 p if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE
) f# t. B6 u% l && _PKTItemAction == ITEM_ACTION_TO_STORAGE
/ R! i# T8 K' F; Z( { && _PKTPKTType == PACKET_NEWITEM
. Q/ r% j- S. S )
; R! M- R2 y$ B: M {8 A5 E5 j% l6 l- u
if (_PKTItemID == 0 && _PKTItemTick)+ `1 u H @9 Z, ~/ f9 m5 ?$ P
{
; R6 Z6 C5 X& B3 o+ K2 f% j5 | PKTItemRelease();1 T* i' \( D/ z7 s
}
' A( b2 H7 t6 i8 r5 `% l+ K2 a( Q. A else if(_PKTItemID== dwItemId&& _PKTItemTick)3 d! a" y. ` X6 \$ z( R- S
{
7 R- b+ M2 U5 h; x PKTItemRelease();
o9 p6 D! z$ I8 z% H' j. H, j }
8 n1 C# W3 ^; {& X- S U2 D }% v8 }3 e- l- h$ m, M; \
, U0 s& O8 c. j0 f* Y }. j1 M- ` f U5 t/ C j9 b
}
9 v& K& y3 B; s! b( Y1 n; o% |
8 N6 E/ Y6 U7 Q+ ^! I; ~9 _- M static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored+ ?, Y: u: v Z$ r; y/ u# ?- \& A! W
{. q6 I) P/ W5 M% {& [
if (aLength >= 8) |) J* c( b9 B! X! ~7 L
{
& i- p6 c, x) ? n. m: @5 c, J$ d DWORD dwItemId = 0;
2 B8 a9 X1 \6 ] memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));3 h$ w5 v) O- k/ G8 V
if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE2 o2 K9 k4 ~3 B0 z6 a! q( z3 w
&& _PKTItemAction == ITEM_ACTION_FROM_STORAGE
* p" T+ |0 P; [+ T: ?3 V r* J3 F && _PKTPKTType == PACKET_ITEMACTION
4 A/ P1 [6 M6 q4 b$ z9 I ) U& r/ ~% J. Z6 d1 e
{
) y. d& ?0 t4 C; H3 K) ^ if (dwItemId == 0 && _PKTItemTick): g1 m' c9 _5 ?
{- K/ q8 ~% p2 z, i4 C: W( w
PKTItemRelease();+ x* Y: C! R" L& J# [
}
2 |) |% u' ]4 e else if (dwItemId == _PKTItemID && _PKTItemTick)) `9 ]: e( o% C/ x8 u4 E2 T
{
4 a5 M3 ]8 O% k7 W" m1 }5 R PKTItemRelease();
$ l, G9 [ h. J4 S: k- Z0 S }
* ~7 _' M. @0 C) @ }
3 A& I) m1 J+ ? 8 j4 I! P: `; D$ X6 B
}7 e* V4 _- H+ W: N' N
}7 @; C+ O4 F. n( p1 K/ u! @* c
: q' s1 a$ u7 @" s: t% b
static void PKTItemGameLoop()
; E9 O9 D% @$ X. G2 v0 L {& b) F$ y+ M: {& T
if (_PKTItemTick > 0)3 B( s2 J2 P" a8 ]
_PKTItemTick--;
$ o9 {+ ^5 y8 p; S* U- G else if (_PKTItemTick == 0)/ {$ T2 L) f. E, ?8 n
PKTItemRelease();
7 J$ B8 A2 h* U/ @7 U" c }% T) `, `8 w9 @5 P$ J0 g/ `8 z4 X
) n/ N8 `$ X- j, s& M/ E4 B& c static BOOL PKTItemCando() ' c) T2 Z5 w5 q+ b$ a$ I
{! I4 a9 W" A; f% Y
if (_PKTItemTick == 0)return TRUE;3 W+ e9 k: |. Y0 c; d4 g8 H& f
return FALSE;
& j& O) O) ~. V( T9 m6 l: I9 \ }
; h1 o$ c4 Z) h, g
- w) D+ Y; [% x. s8 b$ n6 _ static BOOL BuyItem(DWORD ItemID, DWORD npcid)7 J2 ?9 u- a6 j# l& Y: [3 a
{
% X$ m) n8 Q. x: S0 R% f PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);* v0 x' n% m2 X0 Y2 s
BYTE aPacket[17] = { 0 };* H t3 B+ T. w' @* e6 Y; B
aPacket[0] = 0x32;- f/ J7 ^ J! B! E% A* @" [0 d
::memcpy(&aPacket[1], &npcid, 4);
6 J4 S- L t- r7 n! q0 p I ::memcpy(&aPacket[5], &ItemID, 4);. r6 f. V( u0 n2 V4 A q5 z* R/ V" k
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);4 y' `$ h( F+ i
D2Net::D2SendToServer(17, 0, aPacket);: K# O- x* A' c3 Q$ Z; g5 G1 v D' @) h
return TRUE;# W6 o/ E8 A; ]2 p
}
3 W- ^3 V# X7 Q0 _. i7 ]7 }6 o# @" T! k. ]$ K
static BOOL SellItem(DWORD ItemID, DWORD npcid); I4 Y0 J7 d/ H
{4 E2 b# s7 z. I6 K, M% P
PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
0 y* U& e- D% ~0 n5 m BYTE aPacket[17] = { 0 };) b/ u$ ]0 Y0 q- S6 W
aPacket[0] = 0x33;
, S7 z( v2 E# R& l ::memcpy(&aPacket[1], &npcid, 4);0 H' c8 P5 z9 S
::memcpy(&aPacket[5], &ItemID, 4);' R$ Z/ ?/ [/ @4 |9 l; G/ a
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);3 a/ x9 ^9 e7 ?9 Q; c+ ~
D2Net::D2SendToServer(17, 0, aPacket);
4 j. y" U6 Q& F" Y- [/ J" b return TRUE;2 j6 a1 w U" e% k+ l5 U
}
X0 D; O+ S+ t+ d3 t9 k, n H8 I1 e# x$ r$ ^# o( i
static BOOL Interact(DWORD nUnitId, DWORD nUnitType);$ [+ d2 s m. b4 e
# X2 D$ `4 q/ b0 w: Q. \+ z6 u
static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);2 ?* i5 I9 j& |1 z0 ?% e3 e
) A$ {: ^7 H. J$ ? static BOOL OpenCube()
% v/ X- ]$ \7 r1 Q {. S% E7 w: J* d7 B
if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;$ \; z0 x3 x0 K
* c \* M, W7 J' [" X G/ Y6 x
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);$ q0 @ T7 `( V
if (!pCube)
7 H' e( f% I" G/ F {
* Q; B7 G3 K; D" d6 C) g pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
" f6 v6 o5 N. t$ U: w if (!pCube)3 E1 N8 Q7 w9 V; @- ]( `
return FALSE;
7 O O. W. L# i( _7 r }) z6 ?- X1 y- i& I, x& k: h
PKTItemTellW8(PacketItemMaxTick);3 o, y+ z- R0 g% l7 Z8 y8 e
$ K# e* b9 c) ^" [
D2CoordStrc mypst = { NULL };9 \& M9 V$ S1 l. e2 N; N
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
# x1 u- W+ l* f3 r5 J8 b
6 Z- J0 ]/ s. p5 j Z9 j, K BYTE aPacket[13] = { 0x20,0 };* T# S% w' V# ?7 X, J- D/ D
::memcpy(aPacket + 1, &pCube->nItemNum, 4);
4 {) H# r' q4 \+ d2 j ::memcpy(aPacket + 5, &(mypst.nX), 4);
; s2 g% Q9 i$ D K$ T; U9 V; b ::memcpy(aPacket + 9, &(mypst.nY), 4);' j( L! y% G4 @) h2 w4 Y
D2Net::D2SendToServer(13, 0, aPacket);
0 V, {& M7 ~" y5 e6 g' S return TRUE;
h2 W! N, H9 H }' l' V: b1 U# N/ Y( r
$ Q n k# Y$ \! g5 z3 r- H( k Z& o static BOOL ToInvxy(DWORD x, DWORD y)
9 R# [; B6 ^4 E# T; a, {5 k {
8 y2 v+ S& [8 g! m& J# @# m. s UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
$ ~+ t* h g' S" @9 F
, Q2 \; n$ @& Y8 G$ F* Q/ _ if (phand == NULL)
% `1 y0 r e. M4 ]+ S# N8 n return FALSE;
% k9 n, U6 ?9 M5 ^0 I
# u5 ^, E! H% ?# ? \6 d PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);3 e7 l5 U* a$ r( _; P& M
& J! b* i0 n5 Q/ f
BYTE aPacket[17] = { 0x18,0 };0 g/ z2 i7 [2 Z' U' I
::memcpy(aPacket + 1, &phand->nItemNum, 4);
0 l. P2 U/ f" A% ]6 E1 y/ t ::memcpy(aPacket + 5, &x, 4);
1 z& q% w& P3 G! @ ::memcpy(aPacket + 9, &y, 4);
+ _9 h% E c0 N5 o D2Net::D2SendToServer(17, 0, aPacket);1 H+ q" z0 p3 a* w$ q# |
return TRUE;
' @3 P$ p# @9 ^; e! Q1 H `) E' a }( Y6 q0 l7 a5 f4 h" V$ j3 E" k
8 F/ X$ F2 j2 Z8 E; m e3 ^ static BOOL ToInvRandom(BOOL bBagFix = FALSE)
& r7 h7 f9 a2 `% A! W8 ? {
* t+ L) Y9 V- D1 p% @6 U UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);+ E+ x* F! e7 m- z% n3 q
if (!phand) ]# \1 J% n6 o8 z
return FALSE;, x( `2 f* C* P: @/ O
int desx = 0;
2 P; [6 C# d1 Z4 d* U- x) r2 d int desy = 0;: R' F& O# w6 T
if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))
' w$ J7 z8 c5 D# E0 ?5 V, S {
9 q/ Y9 K' n7 ?2 i ToInvxy(desx, desy);1 w" |( m7 Y8 H: Z$ G/ Y ?8 G
return TRUE;
1 W5 L0 N: V- T. r }
. n0 K$ R' \ k( @1 u6 D return FALSE;
( X7 O; Y0 Q2 E" o5 ?% `2 c7 q- a. b% T$ B }+ W0 h5 k0 @7 V) R: @
" @) L; a/ w+ s& V" P! g. O static BOOL ToCube()
. X0 L% _- b, q( D- a" s {
Y% }% e/ H/ X i if (!(*D2Client::ptPlayerClient))return FALSE;
- ~1 `& L) l" V% v" x
! A& v8 O+ A% P; D UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);1 j% n. T2 i4 f# Q! [# ]
if (!phand)return FALSE;
5 J) Y6 I& T( g3 |5 P% s- F
1 a4 M$ O! y" j& P UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块/ h- Y" O$ @: q9 }9 h. [3 X U
if (!pCube)& I e9 {, f# i, e' c) N: V
{
! J+ v* y4 l) q4 @4 J ^ pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块
( G5 A& q- F6 i/ Q# J- z6 v: _. r9 q if (!pCube || !pCube->nItemNum)
$ |6 |9 `) l" a8 U9 [5 J return FALSE;* @/ D: L A, I$ e% A
}+ x; R. }* T5 O8 D, Y; D \) ?* a
; a& d. C. k8 x8 @( @/ G if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))
' u1 G- |: ~: B$ D5 D return FALSE;3 k& z0 r6 y) f
5 H/ r! q* t! L9 m* i/ k0 F PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
# a/ I& M8 F; G p; A, s% x8 u- s
5 K g3 b: t/ }" T( h2 N BYTE aPacket[9] = { 0x2A,0 };# g" Y. _! q. M3 T
::memcpy(aPacket + 1, &phand->nItemNum, 4);$ l" }; z z$ g* X
::memcpy(aPacket + 5, &pCube->nItemNum, 4);
2 D2 a( N/ w; v! h |! e$ h& f D2Net::D2SendToServer(9, 0, aPacket);+ w( _4 J% X9 i) y x( \, r
return TRUE;
: a4 {) |/ e5 k, @
) N( Q/ ?, f- N }) ?0 x* N; t5 o& e5 w2 Y( F
2 j$ [2 \) k0 I' H
static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);
- a, Y `3 c5 ^7 F# I$ k: s3 G0 D) j) ^9 C! R9 g& f
static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存. A; t) J; f% A
{- F+ J- _- J2 y7 O7 P
D2CoordStrc mypst = { NULL };. `9 [. H3 D& L& V! s( E4 v
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
; D% Y; Z" l# Y, v9 g6 r. U. a
. _) `9 @5 s$ ^+ g. u9 k. N5 l if (!mypst.nX)return FALSE;2 E" T) j! U0 ]" u( k3 F
! q+ s- K4 e3 q0 r
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);3 }/ U7 _" k* G+ t
1 {9 z3 e" X; u J$ r- A
BYTE aPacket[13] = { 0x20,0 };
. ^9 F4 f$ g8 s% i4 L% q% \ ::memcpy(aPacket + 1, &dwItemID, 4);
* y- y# q# a; w ::memcpy(aPacket + 5, &mypst.nX, 4);
- m: e6 e7 ?2 |/ r; _* `5 Q, H ::memcpy(aPacket + 9, &mypst.nY, 4);( { W- p# t' u( B& {( R
//return D2Net::D2NetSendPacketToServer(0, aPacket, 13);' w8 \0 S* a; V# G" P
D2Net::D2SendToServer(13, 0, aPacket);/ ~) G9 A" I* S7 g
return TRUE;% j- S* G. ~: {; @0 v% n5 V2 d# I
}1 l5 r" q0 P' L
) y. E. ^- ^3 O5 A! g/ B
static BOOL DropCursorItemToGround(). I. A2 d) f& w' j& x( k* y
{' L H% h$ E6 c& r% o; E
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
- l, ~, e6 |/ r% x9 L if (!phand)- b3 Z6 o! J- c& {$ H
return FALSE;
+ `2 [- w6 Q, P$ H
( @3 {# f5 F% C3 p R PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);2 a5 S6 W" d+ g6 e) Z7 u
3 g. h+ p% ~1 J& a; G
BYTE aPacket[5] = { 0x17 };
; \6 X1 A+ R8 h7 _% x# q6 A ::memcpy(aPacket + 1, &phand->nItemNum, 4);
% ~! z' j g$ p. F D2Net::D2SendToServer(5, 0, aPacket);
) J2 H! U3 w3 R0 r$ g return TRUE;) | r2 E7 R2 u) z) M; [" o6 K
S, |+ L7 i0 u5 |) W3 a" O }
& W$ O" m' o* g% S& v
4 Y. _. I, {6 h- M' t$ u% R static BOOL PickStorageItemToCursor(DWORD dwItemID)
) n* J/ H3 c& }3 \+ { {$ J: W) N5 w3 H0 `( Y
PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
$ G( `# U/ D5 I7 B9 F* o# y
( l p6 _# n" a% H BYTE aPacket[5] = { 0 };
4 d2 i6 q) M: a/ H% S$ P2 { aPacket[0] = 0x19;
' r+ o7 n7 y p ::memcpy(aPacket + 1, &dwItemID, 4);0 i$ Q; w6 ?( r" E
//return D2Net::D2NetSendPacketToServer(0, aPacket, 5);, u G1 K% B8 S( _9 H
D2Net::D2SendToServer(5, 0, aPacket);
6 y2 d& `, s& |8 ], ^2 l3 o return TRUE;8 [, f+ I1 p: {5 b( n2 B# S3 E/ G: a
}! P# W8 w Y, J7 M/ S# C* g
0 w D7 V! C4 t2 Z" O
static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)
. \! {4 ^- e1 @! v& ^$ y% _, E {
) d/ Y) L7 d" \8 Y' k9 P% R0 c) g- L E PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);* G5 {) D& C" ]2 \
BYTE aPacket[17] = { 0x1f,0 };$ h9 V+ e5 n0 z/ t5 c0 N8 c" {
::memcpy(aPacket + 1, &ItemID1, 4);' [% E9 E ], q& h" t$ ^- `
::memcpy(aPacket + 5, &ItemID2, 4);! p( A3 Z \" S7 W% F
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
$ r: {9 W, m6 a$ _6 q, U& i D2Net::D2SendToServer(17, 0, aPacket);
" E- g7 R1 W3 W return TRUE;; i& \+ p0 H! h4 m( j" N. P% h
}1 a% V2 u8 k) P% d
1 X( \6 e, y' f/ P. j J) o/ A r static BOOL Transmute()
4 v+ p- f" p8 J! L% G {0 U/ A! s+ c" D8 y( J
if (!(*D2Client::ptPlayerClient))return FALSE;
$ v, o9 h5 q8 x: X7 C6 p& |4 W- y7 a; q) G4 g) }: g; s% G
if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))2 _0 Q$ ~7 Q8 Q4 X& @
return FALSE;
( u8 K! F U4 O: _3 F! w& B* K. `" [' ]8 |0 g6 @
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);6 T$ f8 K6 K Z/ k& c+ B' z @
BYTE aPacket[7] = { 0 };; F4 _- j- F" [' [; G. F4 w
aPacket[0] = 0x4f;
- D& G" K& n' d5 M0 M8 V% ^ aPacket[1] = 0x18;
* z, ^7 U2 I! S D2Net::D2SendToServer(7, 0, aPacket);
: @5 R3 F. @ V: b6 n0 W7 H5 C9 j return TRUE;
: q, l4 c- o: h* i$ p }
7 N/ t- ^. [) f6 A};
6 y1 ]! q; p$ u5 ?% R
6 P: e$ x% p0 i4 F |
|