|
|
转载/ p6 j$ z# ^# v& _6 g
自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:
6 K4 }5 V- U/ F7 W; pD2Client:9 B9 }2 d, N% m x
6FB20AE1为拦截输入框(用于获得命令)5 S) W6 J$ x; y( w. u9 Z2 r
6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发
/ S& ], C2 w, x& l- @0 M! I6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发0 p O" Q0 c# B* p
6FAF4230为hackmap的loop点 我用的hackmap导出位置+ A( D# A, |: {4 {+ K; u
9 r# x K; [/ b" B: t5 b* V7 V
3 I/ f8 i% `- g+ B' [, b% d0 B发包函数:
) j* _, F4 v; }1 sclass D2PKT_ITEM4 J% [- y) m* d8 T: o) }
{# S& j" M: A$ ]3 C5 V
#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上: R b- U2 Y" @, |" i/ X7 \
#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多
' s1 w" G5 F2 f# S% ?#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上0 `7 @1 \; K, T7 _
#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上0 Y& Z' A; K+ H" X# k) |
#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH. u% |3 U; z% k( m
#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上
7 F) z( B U4 G/ {( n, c0 L( _#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏0 _$ Z# p$ g0 ? O# y
#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上& u: s& D: s& A
#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -% Z) M! x. |0 ^1 a1 Z4 c
#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店+ v$ [' {' S4 N o
#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV( L' V! S0 G2 ^# k6 f( ~* A
#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道 . c/ d% @4 p: F0 a) `/ M
#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带
9 _5 B, B5 h3 ?* E- j#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上
U4 M5 z1 F& N: `: \#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -1 m. n* O' E1 S1 b- r! Q0 u- ~
#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上
5 F+ y `2 Q, V#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -$ ]% `2 J6 L9 f6 |6 g7 m6 V
' a" Z8 R; u: A- @0 e5 P/ b t
#define PacketItemMaxTick 150- l. r: t: Q* Z! X. j+ d9 G
#define PacketItemPickUpTick 20& M4 N, }" ^. Q: ]
, f' A! a# B3 M8 @% {
private:1 j S; Z1 N* x$ @. q* l
static DWORD _PKTItemTick;
5 Z- w2 V0 M/ N static DWORD _PKTItemAction;
6 N& s! e* r2 K# g. g: y& c- ^ static DWORD _PKTItemID;
1 E, n2 R( B6 t2 e: x static BYTE _PKTPKTType;
+ K0 i8 B! k! e% z* T+ Ipublic:: }4 ^- V+ O+ p' v
static DWORD PKTItemGetTick() { return _PKTItemTick; }
+ Y! ^9 a3 t, L3 H- d
4 ~8 m+ P2 q2 |5 e static void PKTItemRelease()
6 J# M6 j8 ~3 z& {* V2 |* M {
# ]1 m9 ^; o7 R. j _PKTItemTick = 0;1 V. V$ I8 @& T7 D- B
_PKTItemAction = 0;
! v4 y) i' W& O5 N. G4 {2 T1 e _PKTItemID = 0;/ y- u4 ~ v4 [" t1 i, {
_PKTPKTType = 0;
) i* g. Z: L- ]; P }
5 l6 O9 G, u, K) v( Z% L1 S& s/ K5 s+ N$ {& ^/ y e
static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick) * g( l% m3 x2 B: B
{% U4 d9 G |" n) ^9 U
_PKTPKTType = aPacket0;
/ b" z) G' z* \8 d' |3 W _PKTItemTick = tick;9 j/ m* d: \8 u _ {7 j8 s7 G
_PKTItemAction = ItemAction;. b' T# B; y4 U" |
_PKTItemID = dwItemID;2 A1 D, s; Z4 Q# f
}
1 ^: K1 v: J2 z! P: v/ r# w& N' T7 P+ l( F/ F6 E' u( G* C
static void PKTItemTellW8(DWORD tick)! a0 c* v* `( `7 w$ F
{
; k. v7 g W7 ^9 o' e5 K _PKTItemTick = tick;
& `: A; u; ?7 x% h: t }5 A* g: m$ s+ r' b) i& [' \8 g6 s
# r) s0 g, t3 ?! L9 Y
static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor
9 |0 p& ^+ `6 y5 C( t6 Z9 U8 V; G {
* Z& j- n& h# m+ P% \ if (aLength >= 8)6 x5 d) t7 g' ?4 S
{
$ S) Q/ E3 G0 f% B0 D% n ] DWORD dwItemId = 0;& J. m$ J3 a3 X: {. N/ E
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
& }7 p+ U9 \9 A' V if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE2 @+ w, ?/ T$ A6 F/ R+ l$ e
&& _PKTItemAction == ITEM_ACTION_TO_STORAGE
- H/ \3 }" p, S! u. I && _PKTPKTType == PACKET_NEWITEM
1 ^1 A K* t$ u+ I )+ g& l) K. H! |
{
7 Y! t+ k' G) O( B" {$ ~+ @ if (_PKTItemID == 0 && _PKTItemTick): |. A3 Y4 o+ W# y6 Z4 k
{: c3 I% [( u( O u& [
PKTItemRelease();/ A. D' Q1 J' a
}, j! w6 E: n4 N3 {( @
else if(_PKTItemID== dwItemId&& _PKTItemTick)! q P8 }0 ~* o
{
3 P7 H. X4 C+ `" h. V PKTItemRelease();
" q9 A7 K* a4 }' r }
* H" E, u' A7 M }
; k, ]7 @8 c1 F1 p' z' h
5 h" a( N( `- l( o$ _; O }. H0 g1 v3 h7 X0 x; E, v
}
% D1 @2 R( x( Z8 @+ D- ?9 D
, n& F% j) Y1 c1 Z static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored
1 l3 s3 i( [. f) I) ?9 l {
) @. v j7 [$ E3 A# S+ G if (aLength >= 8)
! _- a J6 B1 R {
) w& |1 @/ p% t) e' h% O+ o! N DWORD dwItemId = 0;9 A2 b3 k$ |) Z* `
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
2 {( z/ j- a6 }6 n4 n9 E" _ if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE1 N0 ^2 z/ g1 L3 G5 ?/ Z0 `0 u* D
&& _PKTItemAction == ITEM_ACTION_FROM_STORAGE g; }3 |. i9 ], A4 {. I1 \/ h
&& _PKTPKTType == PACKET_ITEMACTION _/ X# l1 {( W2 e _5 k
)
7 n) q0 T, v2 P6 u3 \7 F* _ {8 U$ n0 @4 m7 c! C! f6 [
if (dwItemId == 0 && _PKTItemTick)
2 f; j. M$ B8 _0 U/ ~ {
; n% s/ O) m8 F' C- S PKTItemRelease();
; x- R' l) {5 b+ m V }+ ]0 \5 Y/ s+ W; D5 f
else if (dwItemId == _PKTItemID && _PKTItemTick)
* I6 y$ O* ?8 _7 G {
% y* F' `! g5 B0 H4 f- z* Y PKTItemRelease();3 N$ |( J* a/ }5 I$ _/ R% ]9 r6 T. J
}
6 |8 Y; ?2 Q8 ~) C' J& Q$ t }" Q8 R1 D s% t4 R
4 V& |, D3 r# x; e3 r* V
}4 Z4 L7 G: u! d! M9 u! j
}
' w" }: U0 }0 E# m# s% e$ c7 U9 n ]/ i. P: B; D- w
static void PKTItemGameLoop()
' C) F, p+ K; G0 Y$ } {
' n8 d" J6 B4 U) _! r if (_PKTItemTick > 0)
" V4 j" {) o- j S8 i, A, I _PKTItemTick--;- R/ p" ]$ ]% w) Z1 S( D
else if (_PKTItemTick == 0): O! Y/ N7 ]: \. a7 b
PKTItemRelease();
C2 |$ B- w- U }
, d$ s5 v+ T. h. X
, K0 \3 a+ ]/ J8 P% Z static BOOL PKTItemCando() ) h, p5 U) @7 e1 f: m
{
# t( c! m# {1 d. p. @3 o T if (_PKTItemTick == 0)return TRUE;
. H3 u6 G3 I) c/ S) k3 o- x return FALSE;8 Z! w) ~' B: i6 n, m
}1 _$ i& b6 [- p
/ B$ E# \ |+ o$ s' j) D7 g
static BOOL BuyItem(DWORD ItemID, DWORD npcid)3 A U. f0 R7 P
{9 R" Q4 I. D% {& d$ G' C
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
* ^& ~* |6 T* h4 m6 k BYTE aPacket[17] = { 0 };; S$ D$ S; Z& y0 }6 {. m
aPacket[0] = 0x32;
+ k9 D, m) G! b ::memcpy(&aPacket[1], &npcid, 4);0 j" _8 ^3 B7 Y0 T; W% y/ E) i; F5 v
::memcpy(&aPacket[5], &ItemID, 4);
- T0 s/ C1 Y# H //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
9 B, ]6 e* H, o& L: X2 w D2Net::D2SendToServer(17, 0, aPacket);# d% A9 h5 A- [& F3 d' W
return TRUE;
" y8 }6 b/ u* a: D( o* u }* V( D0 r& F' V
1 _: t' ]* r& f# m: e) O: x5 y! V static BOOL SellItem(DWORD ItemID, DWORD npcid)5 O. P: V: w; ^" U5 i
{
' f# ^" Z" d) w# q3 W% b PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
# _" ~ w8 @0 g BYTE aPacket[17] = { 0 };! o% T, ?; t/ E! K$ }4 l1 K; ?& B: k4 }
aPacket[0] = 0x33;6 J5 W, q) w+ H' T% [
::memcpy(&aPacket[1], &npcid, 4);
8 P$ m5 y$ E; C- v0 v ::memcpy(&aPacket[5], &ItemID, 4);: J5 |1 z' J* n( V1 E0 s1 g
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);7 Z1 s& d8 ~/ S) F' A% H5 ^
D2Net::D2SendToServer(17, 0, aPacket);
+ \- T1 }9 @2 i# `7 H3 M# H4 V' `3 R return TRUE;
8 G" t% c# {6 }" Y6 U* N1 T; F }
. v; C. ~! p' k& S% J! E& b; z4 F' @4 [ e# f
static BOOL Interact(DWORD nUnitId, DWORD nUnitType);; x' T' U6 u4 K5 z
9 `6 A y, n0 R& j static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);& h: W. l4 d) H3 T
/ W5 ]2 n/ B$ Z static BOOL OpenCube()
) }! O0 s, q8 A0 _, F& n7 L2 ` {( o3 `! c5 F' @
if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;
5 K& Z' {# w8 u, ?! {: W6 U3 E7 P
0 L+ W6 p6 @. A0 @+ U UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);& w7 W1 B" X! F# v% D: B7 x
if (!pCube)4 w" X/ _& r' z
{
7 P* l7 A! J7 t% ?8 {! w W pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
( l- K3 Q2 h# A) w5 j, Q if (!pCube). Y, i9 m! E) p2 Q& B
return FALSE;
) T$ G. y3 b# C% H }: W4 Y' U$ c, _$ D' {
PKTItemTellW8(PacketItemMaxTick);
4 i2 R- v5 U2 v8 u/ i: q
! Y* r: f+ [, T: Q% }; _) n5 z D2CoordStrc mypst = { NULL };2 a [7 \' h6 p! J! @
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
. i6 _ ] g2 I* O- r, ]; `3 J: h4 p5 o4 [- W1 Z+ C
BYTE aPacket[13] = { 0x20,0 };
1 a- P2 z9 F7 a6 s& S- \: _4 Y2 h ::memcpy(aPacket + 1, &pCube->nItemNum, 4);
( c* i$ r+ r9 D* k6 b: R6 N# H ::memcpy(aPacket + 5, &(mypst.nX), 4);; v# \: i' S, s* ^0 }4 r5 s2 j
::memcpy(aPacket + 9, &(mypst.nY), 4); y% D( v; t/ r* [
D2Net::D2SendToServer(13, 0, aPacket);
* X* l, F1 a8 U/ V7 Z' o return TRUE;3 B( V( Q4 s" T$ B
}
8 G. c% m* U8 l! f
$ Z. H. m, t; f+ {5 { static BOOL ToInvxy(DWORD x, DWORD y)
4 N0 m+ K9 N) [% Q {
/ c5 s2 H$ U& E, s. }! X- U UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);0 `/ |+ T' [! k6 ^) L L. t
0 A8 Z4 g" M: U9 Q; d u8 A if (phand == NULL)
5 @# P1 ^3 e i9 O, _- u, a5 f return FALSE;
4 j3 y5 X2 Z! {3 G+ H
2 }2 p# i3 q. D# t3 ^+ }3 s, J- ` PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);& C- D" _$ H W d9 f- W6 t
' U+ P6 E: V& O( F* \
BYTE aPacket[17] = { 0x18,0 };
3 N. E" H# W; P$ G9 G. } ::memcpy(aPacket + 1, &phand->nItemNum, 4);- Q, f! |$ e# @$ m L* e( Q3 R
::memcpy(aPacket + 5, &x, 4);
7 |6 p# \* @) X% D; H ::memcpy(aPacket + 9, &y, 4);
* E' L. c) _- A2 E9 j, w: w8 O D2Net::D2SendToServer(17, 0, aPacket);7 |+ D( {; j P
return TRUE;. X5 r m% l; ]# I1 f
}
) v+ ? M& `: h3 Z7 O% S6 X @7 X2 x" q+ d7 I& [4 A C& A# ~
static BOOL ToInvRandom(BOOL bBagFix = FALSE) ; X& i) F, d% p' ?0 u- n
{
% \6 P; w7 G1 L5 J9 x UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);1 A% j5 \/ R0 U8 x: |$ N, t
if (!phand)
# }% S) ?' O" W8 C$ y return FALSE;* ~( D) h' P$ l5 l
int desx = 0;/ f1 ^: w- Q# z) l* L# ~$ E" a
int desy = 0;
# q5 u, P3 s# k, Q, {! Z/ b if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))/ _1 N" x9 |, Z: p' |/ k8 b
{' `, f* z5 ~2 O# R: K
ToInvxy(desx, desy);& \2 D# o- M9 A6 [1 l( X9 |
return TRUE;
9 O3 y7 H' ~$ P4 q2 y' @ }# ^6 d% Y1 s& y) v7 k
return FALSE;
' M3 p5 w2 k' t( ~1 r }/ c# {. o; ] ~
+ w+ B$ \) |; I* G9 `& N
static BOOL ToCube()
6 ` m2 {% Q7 V5 s+ \7 {" p e8 l, J {
4 W" D" E2 V _; I& L if (!(*D2Client::ptPlayerClient))return FALSE;9 L, q- q. N; m* `) ^2 S- R
* v" \5 o4 l5 _
UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
% I1 U# L& N( A# N, Q, f8 X if (!phand)return FALSE;
4 o8 k( W6 O: {. ~$ [
/ k8 r$ }7 K9 ?+ y$ X UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块
2 G L5 f1 k( c; p if (!pCube)
2 s6 Y* w" j% P7 w$ k2 G {2 c5 H' W* t P* _6 p; d
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块
0 j9 x5 t3 M) Z6 a: ^) s if (!pCube || !pCube->nItemNum)7 H( i4 L/ D2 A) n; T2 T
return FALSE;
0 _0 _, @7 N9 M( ] }
9 u5 e* l6 f Q; B# ?' u$ \% F A2 D1 p+ R5 y0 ^9 v: T; B
if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))! d6 v* T/ A2 _7 j- q/ M6 n9 ^& m
return FALSE;
5 T/ w& ?8 p+ F8 D( |, l8 u8 N0 E: D& R
0 P; y' H" G) a/ Y, O+ O/ D PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
- ?/ H: w& P* V( @+ ?# a, r- R* {- D9 K
0 e4 n' I2 K6 j' h2 R2 V% g1 Z BYTE aPacket[9] = { 0x2A,0 };) b; e' b) _) ^7 D* M' D; P$ w4 _
::memcpy(aPacket + 1, &phand->nItemNum, 4);
$ j. Q7 u6 w; n7 q ::memcpy(aPacket + 5, &pCube->nItemNum, 4);
. Q- f9 ]3 j/ j* o D2Net::D2SendToServer(9, 0, aPacket);3 Q7 {3 o: E/ _' k8 [4 j- n' |. R
return TRUE;
, L: E6 @0 N( b7 p3 b, C# d$ k; M% U7 M
}
7 Q7 `, _: b2 f( K( z0 g* m( @7 [( v3 `9 k1 N( W; A
static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);
; r; D8 D* m; _& V: ^ }4 N6 b) Z; w6 o! m9 x2 V
static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存
$ l+ c0 f% y1 v {8 B' m: d4 S2 h; m7 E" f! p
D2CoordStrc mypst = { NULL };
6 @: ?( G9 o3 d# K3 X D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);( }- |4 H( n+ _; g4 u
9 b2 T% z! r8 D- B& ~, T5 @2 {
if (!mypst.nX)return FALSE;: |0 `9 b, s! l$ F( B# y+ @( R
2 { y* j$ W0 g. e8 t& a L PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
, X( a! D+ H7 L# T8 f9 {0 l0 T: L* f5 G- y6 ?
BYTE aPacket[13] = { 0x20,0 };
3 P; M4 q' G* `2 \ ::memcpy(aPacket + 1, &dwItemID, 4);
; G5 X5 P {8 o& {& k2 |# x; } ::memcpy(aPacket + 5, &mypst.nX, 4);( X2 ~8 R/ L; A7 s8 ^
::memcpy(aPacket + 9, &mypst.nY, 4);
1 |' j7 Z, t4 f5 Z# n$ N& |4 B) ~ //return D2Net::D2NetSendPacketToServer(0, aPacket, 13);
) Z( B( W* e: S# F! ` D2Net::D2SendToServer(13, 0, aPacket);& A3 j. D! {; h( l# C( Y
return TRUE;
$ W' D. y% K" C* B' m( s }
- J9 ]3 p) _/ u5 L" a
3 n" a3 r6 p/ q static BOOL DropCursorItemToGround()5 _& \* ] I4 C
{
9 k. Q7 a( t& e6 X, G UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);5 w2 q* Z/ s8 f; x7 V- A0 t
if (!phand)# o5 f9 |- O6 k" J
return FALSE;! A; c6 H% X1 O8 L% m4 ^( e! L
. A5 l3 B1 m2 C0 O: W `1 b
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);; }) w+ `! ]& X: W# K6 {
1 M0 W3 ^0 `. R1 C2 F& `& c
BYTE aPacket[5] = { 0x17 };% C: G W. `5 m! u0 r! V
::memcpy(aPacket + 1, &phand->nItemNum, 4);
* H `# H7 k. d1 m D2Net::D2SendToServer(5, 0, aPacket);' f1 P2 V6 a5 k# i' |, l3 V
return TRUE;7 L' S! ?: t- n/ y- b* V
`! b0 Q& T% d: U+ l$ I, t
}
5 U- C' r8 i; }8 a/ F# N
( O; h8 q% q5 ?2 Z static BOOL PickStorageItemToCursor(DWORD dwItemID)
( R+ P) Z; ^; m$ g3 ~: `' O0 U {
1 z. J& w5 k( n2 X" @ b PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);) e9 z# N" U8 C2 V9 h
" A9 m1 h' b! i8 r7 J
BYTE aPacket[5] = { 0 };
% n2 g% I2 I4 v aPacket[0] = 0x19; V1 e a% d- Y: f& i3 L4 Y
::memcpy(aPacket + 1, &dwItemID, 4);- ~7 J) ^' |) y0 y3 i& }3 G
//return D2Net::D2NetSendPacketToServer(0, aPacket, 5);
$ ~: p0 _/ T' z. i/ k D2Net::D2SendToServer(5, 0, aPacket);: v* w. |) L7 C# q3 u
return TRUE;
5 |/ s+ M4 [6 `/ s" Q& }$ c3 [ }
2 R/ s, N8 M' m5 B. T( h/ L# Z1 [( Q1 `" g5 g
static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)
q# l: U1 n3 ` {; _- r$ ?6 X7 H' k4 ^: V2 p5 H5 R
PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);+ ?3 r$ \+ Z9 x# {, r; ]" c" @; \
BYTE aPacket[17] = { 0x1f,0 };% g b- v& y) |4 t
::memcpy(aPacket + 1, &ItemID1, 4);
4 ]9 z2 `/ K3 X6 M* _ ::memcpy(aPacket + 5, &ItemID2, 4);$ x7 x; w' x9 N" y. Z+ D
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);1 T" d2 t6 m3 R! ~, U
D2Net::D2SendToServer(17, 0, aPacket);
7 K" s, D# n9 h9 R2 }, w return TRUE;% A6 N4 Z# D# ^0 _% l3 t0 y
}
6 x2 Q! x) t8 T& ?, P0 ]2 k) a1 W3 G8 i
static BOOL Transmute()
8 l% q# ~/ E( X: ]. j Y {
- T9 r/ l( I7 N9 S if (!(*D2Client::ptPlayerClient))return FALSE;6 `, f& D' s f! ~
& ?! l7 K g! M9 j
if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))
. i* _1 ~+ g% S return FALSE;$ {0 K/ m1 ^1 y2 s
* l) [' `( K# P: ?0 f. h
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);" E u# ~4 a5 Q5 X
BYTE aPacket[7] = { 0 };
: Q% W7 p6 [& n: ]3 M aPacket[0] = 0x4f;
, Z) i9 U0 l) w3 M; S: M aPacket[1] = 0x18;
! h' ~3 a* @% K$ k D2Net::D2SendToServer(7, 0, aPacket);# A+ }1 P# k. z: d
return TRUE;
% p' u' F3 r4 e' V4 K4 r# v! C }1 B; [0 Y6 K( f1 `7 {* V. j: ?- L
};3 S9 x' g" f* _7 k0 J/ u
! w: a4 r+ t# B* N" F) r5 ]! |4 S
|
|