|
|
转载0 }6 o4 E. t7 b1 ]6 w
自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:
[, }: @3 G& _- X* XD2Client:
. g t/ t1 {2 r+ Y0 ]# o2 c5 u6FB20AE1为拦截输入框(用于获得命令)
8 N A, h- Z& g% C: G1 L: X# Z8 {6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发
4 Z/ t7 Q' P# B% z6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发
" I% R* B/ }5 s0 U2 f6FAF4230为hackmap的loop点 我用的hackmap导出位置
3 V6 I3 X; I) W7 Z. a6 [% |% A: K, z" y- ?
% ?% L& J0 F/ S) `发包函数:4 F9 ~ u, ?# q% W0 u; R3 U
class D2PKT_ITEM
+ h2 v# W2 n2 G. j4 R' g{
2 x5 F9 D& p- E7 q9 @8 u* B; n8 L#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上; h- x( o4 K# h- E/ t+ X' ]
#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多
4 {% v% g: {/ p. ^8 b#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上
0 G9 j- a6 D$ Q4 G#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上0 }+ Q- u3 h/ U2 r' ?, F
#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH
/ E9 Y8 ~+ U7 O" q1 z& x3 ?#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上
! h4 b: T! F1 X! n$ m" U#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏- [# E# Q( W. V( Y# f% E9 U
#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上; N$ |+ N) C: U9 X/ |
#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -
8 R! o* s* V8 W$ g B#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店1 q' q9 o2 w# \9 U5 W5 c* _
#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV4 d4 Q' x+ z8 h" j1 R3 b% n
#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道 1 J }1 E8 B7 s6 g4 y1 `$ k2 S$ N
#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带
; d: t* n$ x1 M* L/ C#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上
* y9 v7 p3 F% p* s" o& A" I# K#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -3 j8 T! k: B, ~+ s7 @' z
#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上
+ a. e5 U& f9 i7 `9 [6 _#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -
3 E, T6 l" f0 x/ g# t# X- k7 P
2 r J' y [4 d" c2 Z#define PacketItemMaxTick 150
4 E6 F! ~8 v9 e, R/ u#define PacketItemPickUpTick 20
4 K; L# X# h I" P- Z$ m( A2 M$ Z' T5 S& B; Q
private:
7 s5 T/ L) L7 K6 O* {* `. ?$ I: Y static DWORD _PKTItemTick; d* t) i! B1 S
static DWORD _PKTItemAction;2 J- Z1 _7 Y7 l. H
static DWORD _PKTItemID;: E6 \4 `8 j, B- D& B, v
static BYTE _PKTPKTType;
# Q: k7 u$ x* f( Q3 V; O* c+ y0 rpublic:' d4 o5 w% ]+ D _* F
static DWORD PKTItemGetTick() { return _PKTItemTick; }2 L+ S D$ E/ u
( h# C( _$ Q4 J D1 N5 G" R! l
static void PKTItemRelease()
8 n: m, ^5 P( v6 J2 L {1 E+ h' c# Q& A6 `0 i6 x- U# v
_PKTItemTick = 0;6 K; P6 C( B# s' ?
_PKTItemAction = 0;9 S; a$ a/ o+ U1 I
_PKTItemID = 0;
8 U& z, w+ [- ?# b# c) Z _PKTPKTType = 0;
% i, o F# b1 |! P, W }3 G n- }/ F, v: S
9 w/ _" k! P+ y0 B I5 b static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick)
) d0 [# i/ e9 q' n2 R+ Y. d6 | {
}/ j9 B) d% b* Z2 E) @ _PKTPKTType = aPacket0;5 ^$ b& {# X7 ~ E
_PKTItemTick = tick;
2 N# ^8 g) h+ j' w# ?8 o Z _PKTItemAction = ItemAction;
L; n3 d8 J: s' ~3 L. y1 i: M _PKTItemID = dwItemID;
# Q& n# ?; l+ \6 c, | }
9 ^; Y" e2 `& _( i: m5 ?8 z# |7 B( x$ g5 \7 B
static void PKTItemTellW8(DWORD tick)7 b' o* h e' v% V* A3 ]
{
0 w/ G. \% C3 O8 h4 @6 h- { _PKTItemTick = tick;
3 j8 s R* c3 T& {8 g* `& X }; l: l6 [ B9 Z
: X Y: {- \5 O% g0 d. C3 T
static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor
! c, |/ n$ S5 ~/ s {5 y/ u! f( | y3 Y2 K
if (aLength >= 8)7 }$ [( i& \" Z1 Q5 X$ e) [5 \% x
{
& `1 V- ^1 j& T DWORD dwItemId = 0;
0 r4 b* C! i; [9 y memcpy(&dwItemId, aPacket + 4, sizeof(DWORD)); m% ?' W& ]; B% z+ z
if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE2 b2 E$ X5 y/ D
&& _PKTItemAction == ITEM_ACTION_TO_STORAGE5 i3 z/ `8 ]8 v' y
&& _PKTPKTType == PACKET_NEWITEM
7 M; s4 r' Y* w y$ n; ^ )& P2 {" t& [! i" d" E( j7 ^# G+ Y) y
{
% F$ N W) Y% z- |; X* i' W if (_PKTItemID == 0 && _PKTItemTick)
2 Y; B* i8 `; y' ^ U& J {. O0 O/ z* Y$ m2 K' }1 u' u
PKTItemRelease();( y) D- A9 i4 B7 e! A9 y8 ~
}
3 b$ F" ~2 f) E- H7 H* L else if(_PKTItemID== dwItemId&& _PKTItemTick)
; U& a3 {0 i, r0 `3 C {& ^/ ?7 R0 n* Q' }$ O7 ^8 Q
PKTItemRelease();
4 s/ j' v5 Z1 _, i5 d$ y' ~ }/ C1 K3 A2 v, m+ H9 |
}$ f6 n+ U) \/ {4 o6 J2 I3 k) o
4 H# u) Z% N; y% n4 t
}7 Y; {+ n% R4 n" F2 Q& @/ P* E+ S! A
}7 Y" |- @0 p- S
, H: b8 z& o: z% B" C/ E1 G
static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored& O! N; d" ]5 q& G; l. o9 ^: a* f9 }
{
$ z o$ F+ \# v) j: ?' ^ if (aLength >= 8)
+ x, e( ]) g3 Y* y5 M {" Q( M) C3 d7 C# k7 E8 d* I# K: b
DWORD dwItemId = 0;0 l; x" E1 f/ @* g, `7 o
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));( r- N, j# |9 r% D% U
if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE4 c& Z5 T' i. K- m6 Z# y
&& _PKTItemAction == ITEM_ACTION_FROM_STORAGE
8 z4 U7 t6 n0 g; ` && _PKTPKTType == PACKET_ITEMACTION: h2 `% Q. _/ \3 S# s
)' n0 ?) a8 L! g1 K- C; Y; _" F
{3 z6 a% h) Y, F8 W( ^' B' i
if (dwItemId == 0 && _PKTItemTick)
# S6 V7 @1 {- ?. ^ {9 r7 A4 Z$ ^$ ^6 v) y5 T
PKTItemRelease();
( v! `# Y* t7 ~7 s* G6 | g+ Q }
! X* q0 v( b. T" i# @, J else if (dwItemId == _PKTItemID && _PKTItemTick)# w: p" o- b5 u" I
{# c; A! S8 [, I( F/ q2 o
PKTItemRelease();, I: {# c' V6 B; I1 [* g+ O
}
/ \9 a$ k( J$ M1 p$ _- |. q }
0 U; @( A$ t6 G B; u
8 }$ z1 y5 m- p2 h/ k( ~% K" } }
|2 s1 U2 \ L9 G$ ~ }2 A! \, x$ Y: T3 \/ t# Q
" B2 S& z" t5 \ K" E- R/ n) o4 G9 z static void PKTItemGameLoop()
, q' g; U0 d2 P v2 p9 ] {3 R! d9 Y" n4 [
if (_PKTItemTick > 0)
: A% M+ ~" ~- o8 \* L _PKTItemTick--;
% Q9 J0 A, {. c; u3 } else if (_PKTItemTick == 0) {1 A; [: O4 ^$ ]* e" x# m
PKTItemRelease();
/ h4 X' j* W6 D) F# C# y }+ D$ [6 U' ^2 j4 P4 J* ]0 u+ J
; `- U: n9 \ M, m
static BOOL PKTItemCando() 2 z' y; S& T7 K K- M
{8 a/ `7 `$ r9 q: g+ N1 V8 ]; A" \
if (_PKTItemTick == 0)return TRUE;
' u/ ~) b5 K5 H) _ return FALSE;2 ~1 v7 y' Y9 l9 }% q* h
}/ o' I5 m f# P9 {9 y
1 h$ H; f+ G9 Y" G9 q. \2 z static BOOL BuyItem(DWORD ItemID, DWORD npcid)# B! y% Q& I# e1 n0 f
{# h/ m! I! U" v3 X# ^
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
( F% i5 l. d v; U/ q% N% P1 e) w BYTE aPacket[17] = { 0 };6 J- l4 ]- `( ?1 E" a4 w* o
aPacket[0] = 0x32;
; u! a. H5 q8 l2 ~ ::memcpy(&aPacket[1], &npcid, 4);
; E9 l2 X$ V. a ::memcpy(&aPacket[5], &ItemID, 4);
* Q$ w* Q4 Q; K$ y4 h //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);1 Y, m) p' Q4 V3 j- ?
D2Net::D2SendToServer(17, 0, aPacket);
" o" e/ a1 m8 T& }" J" i2 l return TRUE;
* C1 E/ S1 t4 f" N5 t" K }
" h# h( C( @8 J) w* u9 F$ Y
7 Y+ R6 g: d+ F! ~" C4 X! t static BOOL SellItem(DWORD ItemID, DWORD npcid), h: w( }3 c X: [* G6 ~; [6 L
{& n1 u' a6 }- I! r( ^! s- c
PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
2 ~. b6 u8 J8 q& w BYTE aPacket[17] = { 0 };/ L7 {! u5 S3 `
aPacket[0] = 0x33;& I5 \/ O2 f7 D' s( U! m
::memcpy(&aPacket[1], &npcid, 4); E7 S R: }# J
::memcpy(&aPacket[5], &ItemID, 4);* C7 m' q, v. f- f; W% w
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
7 E1 n/ w% u( L. a5 q8 P" k! J8 ?5 j, z D2Net::D2SendToServer(17, 0, aPacket);9 y+ Y4 I# [2 }$ r5 a+ }, |. Q2 L
return TRUE;! V) ~( b( y; `
}
! e# L8 O# Q3 m3 @7 ?: D, W1 F
/ t# Q& i) X) y* R1 K+ ]$ G static BOOL Interact(DWORD nUnitId, DWORD nUnitType);0 I4 x; J" A) K- Z2 G- g
; d4 s5 Y2 r1 Z
static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);5 R! m3 Y- u* h% [
1 N6 a5 Y6 R6 J" Y' u5 @ static BOOL OpenCube()
5 H& p) F J. i. V: a {
9 r+ Y6 V) j6 P R& q+ b0 Y if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;+ n$ M! N( B) r- h
7 F# H. O2 N" y/ O- _% e9 a5 y) P
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
1 g/ }) a7 Q7 j if (!pCube)0 G) }# {' U0 ?: b
{
7 }$ c4 F* F0 c& e pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);3 M; r( H2 W) O+ b" k
if (!pCube)
/ }) ?- f' o- |) ?6 F return FALSE;6 K6 P9 d; H# b) ]. R/ N0 V* N
}
, K) A$ `6 N6 F5 O0 n8 W PKTItemTellW8(PacketItemMaxTick);
' |$ N6 x% Z9 @# z8 V
# L' _+ u/ U! G( D2 _6 F D2CoordStrc mypst = { NULL };0 P1 ]7 r/ q. r. q' [- L9 B
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);/ `" E; G7 G1 s# D& d$ z
! U8 D$ ]7 T Z4 J3 Q$ O/ c7 B: @ BYTE aPacket[13] = { 0x20,0 };: h/ j4 J5 Y/ [
::memcpy(aPacket + 1, &pCube->nItemNum, 4);
/ A2 n0 Q- K% ]4 u ::memcpy(aPacket + 5, &(mypst.nX), 4);
$ ^. x0 @! A( S: G. A3 F) U9 o& \ ::memcpy(aPacket + 9, &(mypst.nY), 4);
3 |8 j2 b, T0 e# ]. s D2Net::D2SendToServer(13, 0, aPacket);
: Y# a- u! O) D3 m6 R return TRUE;8 @; R( c7 ^. F9 {
}( h& h, F6 P8 f! F, }
1 @0 s% p, E& k$ X3 Z+ J9 x) K static BOOL ToInvxy(DWORD x, DWORD y)
1 ^7 {4 p6 d% `! a6 P# x {
, r. [0 h/ f9 ~* q- Y6 Q UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
8 |3 ~5 A m7 r" U, K- u! c" e) q) c3 e7 i
if (phand == NULL)( y" g* j9 A- u7 A" ]
return FALSE;, c. W. M0 p( I/ q
- G U6 v" W1 J- A% S3 [ n$ ]
PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);. ~* X6 ~+ n/ x v
" E! {3 y8 i# |. ]! W- J7 D
BYTE aPacket[17] = { 0x18,0 };0 K! L& }( w7 A( ~! b+ P" Y# C
::memcpy(aPacket + 1, &phand->nItemNum, 4);
6 G+ X& X3 V, @! s; t ::memcpy(aPacket + 5, &x, 4);
( e9 u$ Z# S3 s6 n ::memcpy(aPacket + 9, &y, 4);
* Y- S: A |) ?4 K. E0 Y- D' o D2Net::D2SendToServer(17, 0, aPacket);
5 p O/ H Z K- E6 g+ | return TRUE;8 d8 E. m/ x4 B4 E; r) F; z, m
}6 K% R# K S! h
' O6 H8 D6 g7 t
static BOOL ToInvRandom(BOOL bBagFix = FALSE) % L/ f: t8 o1 d* ~ |
{
j' x3 P2 g( \6 @, j" _+ D7 s UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);5 ~6 K {5 O# |1 B. g
if (!phand)
$ i7 }5 N- X. x% K9 k! A return FALSE;
8 w8 j9 U$ r0 D/ E$ s0 L int desx = 0;
h- t3 Y% F' c+ S int desy = 0;
. j' |" B9 u6 K if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))7 @$ K' l" ~* |$ S/ G" v
{2 b. Y" |& o: E
ToInvxy(desx, desy);2 [, p: v1 I, Y! `
return TRUE;
0 W/ ^% ]& T, X4 G }- \, G8 C8 J" w* x
return FALSE;
! `! Z0 S/ J P/ a }, z. J5 L2 R% h
( w* c/ i( _6 G8 m5 u ]; i- Z static BOOL ToCube()
8 @6 @" ]* ^0 O. I5 _8 I; g2 X' ~ {
0 _/ x; a# t& M+ z7 r$ F if (!(*D2Client::ptPlayerClient))return FALSE;
) k& e f, F: j/ [! U1 B+ L0 C8 E9 ?8 p8 y9 S, D5 F" e& `) }
UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);9 G4 D! B' |4 g3 E
if (!phand)return FALSE;& w! B0 A' ]8 T$ U# b
! }: b! O& m; P$ Y. Q9 a) W
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块% b8 O' f- F8 ]5 S& h2 O' Q5 F3 u7 Q7 V
if (!pCube)5 r2 g7 i# l1 i5 Z+ V% n* v. q; X
{+ o. h* T$ K# m! h0 Q
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块
- B% ?0 R' c9 F" x+ ] if (!pCube || !pCube->nItemNum)
1 I/ x8 O1 K# {% C return FALSE;
9 ]7 m" u4 Z% e- D1 i' R }6 }5 L$ J$ G9 G" y9 Y5 U
} w6 C) \- R1 i& N/ B2 z$ w& }
if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))
4 d8 ?6 M6 I6 H return FALSE;
/ d) U- r4 T) d; F
, B; ]0 d/ ^. u5 e# v; H; [: P PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);; \* m$ Y. M* {9 h5 s! ]
6 X: t% Y9 G0 ?' m1 e9 p BYTE aPacket[9] = { 0x2A,0 };# @5 b% ~. ?% W: ^& M% E
::memcpy(aPacket + 1, &phand->nItemNum, 4);
! o: k2 d0 r1 p7 u0 y ::memcpy(aPacket + 5, &pCube->nItemNum, 4);, T; m+ Z& m6 Y# R' z
D2Net::D2SendToServer(9, 0, aPacket);' Y/ I" n5 [& q2 v8 f
return TRUE;
0 z3 E/ |, n8 A: O5 A7 C; f1 z/ y* D/ C" ]; a: j# I) ]/ d
}' v4 J1 w/ t! L' Y# E1 r/ X$ K3 u5 f
k' s1 N( Z% z4 ]' X static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);. C" q8 J4 h8 h4 N( F/ j
& L; Q+ a2 `9 K: x* l" v
static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存
: d8 x. K( {) r. Y# _0 J {" }/ f, H! V: H. B* o
D2CoordStrc mypst = { NULL };
' c) q) g6 j' c* c D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);7 x' F: H) Z, ]) _
* S' }& x* {; C3 y/ l if (!mypst.nX)return FALSE;
; B$ z* |, L2 \2 o ' c: U: w* N2 `. v% z
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
# P9 B. O' N: X. G, ?5 V# W3 e" v4 }1 g( m2 [8 n$ n
BYTE aPacket[13] = { 0x20,0 };+ m3 D( ~' A& {# M
::memcpy(aPacket + 1, &dwItemID, 4);
. K5 d2 I4 |8 k! T( U9 p$ J ::memcpy(aPacket + 5, &mypst.nX, 4);8 b/ f$ S1 n( b" }$ o s
::memcpy(aPacket + 9, &mypst.nY, 4);
& W4 g* E: J2 i* h, c //return D2Net::D2NetSendPacketToServer(0, aPacket, 13);
( ?7 S, @: x$ P6 e( D$ k8 v8 @% n D2Net::D2SendToServer(13, 0, aPacket);
9 g! c7 E! Q; X+ j return TRUE;
& ` C7 n$ x3 G: c3 Z! \; M+ Y# | }
4 N$ H& ~( x7 T1 p+ D2 M# G `, z8 w7 t9 `/ Z8 i
static BOOL DropCursorItemToGround()
+ z0 y' C7 K+ ]4 Q0 @, P7 D6 \3 K {; N: S/ A3 ~# ?1 L% y) j
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);; E5 o4 L, u& T1 h# J+ {2 a
if (!phand)4 y& c/ c9 x3 S" \2 w4 L
return FALSE;; r; N' k5 I/ h. t
I% n4 d2 X& ^' F PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);
( k0 f w% D, R3 m3 m; R+ ]+ Z8 K% p8 P. G& P& L8 @
BYTE aPacket[5] = { 0x17 };' f2 T) [- ]& [1 n5 v+ p } S* z" t
::memcpy(aPacket + 1, &phand->nItemNum, 4);
0 }) {8 ?' ^% j$ Z* d' I D2Net::D2SendToServer(5, 0, aPacket);. j3 [" X D6 B5 D% r
return TRUE;
" U @7 j# R1 B2 Z+ L+ ~9 \+ S; ]- I
}% R+ A* [0 _* [ a8 j3 j5 X9 G
: [; Z$ h7 M: N1 Z) S static BOOL PickStorageItemToCursor(DWORD dwItemID)' \8 n( m% E/ p3 U" c; ^. g& W
{
- ~- U$ n! z: y' V# X6 Z- ^ PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
# I n7 O0 K! ?0 u6 z
8 D/ l6 _. V2 Y$ F2 |+ w BYTE aPacket[5] = { 0 };
. D3 C$ |: H1 _- I3 n0 Z aPacket[0] = 0x19;" \9 _9 Q; ? A% `8 w$ Q
::memcpy(aPacket + 1, &dwItemID, 4);
/ g3 _! l. S' f# F //return D2Net::D2NetSendPacketToServer(0, aPacket, 5);( b3 g% S+ v. X( B
D2Net::D2SendToServer(5, 0, aPacket);
$ {! \" C0 g) w return TRUE;6 E/ n* ]# P3 d
}5 T, j+ N9 j, T
T# b3 i( E% u7 W( g. V+ e( _
static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)
0 `; P+ T& Z2 r# g {
, {; c/ [* R% a0 w( s PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);0 j4 q9 u; L, k/ z3 m) D \# X
BYTE aPacket[17] = { 0x1f,0 };
. s5 P3 ~9 E* c ::memcpy(aPacket + 1, &ItemID1, 4);
7 C( W1 ?% y" T' H1 \ ::memcpy(aPacket + 5, &ItemID2, 4);$ Q7 v; V' ?1 e; R1 @/ [
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);# `& x. }, v" u3 ^2 Y
D2Net::D2SendToServer(17, 0, aPacket);
7 e+ V7 q& K6 n3 R- S return TRUE;2 |! I7 w: s0 X. p
}
- X$ p- A$ a7 ^9 m# V+ e- T- p+ _: Z; Y5 F5 W1 A L
static BOOL Transmute()2 k. R; x; X! T2 W- j' m! c
{
3 u3 m2 z7 d; Y/ i$ R if (!(*D2Client::ptPlayerClient))return FALSE;4 E( M& X. t- x4 d6 O: @' a, Z
, f4 }: ~0 f) Z; n* g
if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))
2 b: H- w4 B* R! e return FALSE;
! g! R$ L; L. r- G) v: D8 }/ F
- [+ x5 u( S3 m/ [* J2 _; b' m PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);: q+ v1 `$ t* c5 Q$ {6 I6 v0 r
BYTE aPacket[7] = { 0 };7 w# R7 I2 ?' o1 N( ^: |& p
aPacket[0] = 0x4f;, G' G% u2 _! [, Q- m% c' P
aPacket[1] = 0x18;4 j8 R5 L4 A! x
D2Net::D2SendToServer(7, 0, aPacket);
- f/ J7 H1 Q) T8 U) t5 T return TRUE;" ~* r1 K4 J x" P* O( g
}% ^ ?+ r, m+ O/ r' p" T! v7 u# C/ C
};
z9 X0 N+ H8 I V+ b9 b7 G* B! n0 ]3 I9 q
|
|