|
|
源文件中_Interface文件夹下WndField.cpp文件5 j9 b' K! \9 A
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
/ `9 C% d# _* {3 Z; q8 J/ S2 |5 w/ U' \
struct sItem& u; V- X" E( j- R) m, w
{) B+ }# K( R, V0 Q. {1 S
DWORD dwId;
* f" @& a) b2 @8 R$ n3 ~DWORD dwKind2;2 m4 Q4 D& k) K* O
DWORD dwItemId;* i% B1 h: i9 Y. \& G8 z9 P! H
BYTE nIndex;
+ H* o3 G1 v9 L! R: m; G3 a7 UsItem(){: [5 S3 O' J4 M5 B9 ?* K0 F7 o0 ^
dwId = dwKind2 = dwItemId = nIndex = 0;9 U: ?& V6 D7 q2 [( }/ Q s
}
; u- k3 D! @! u* o# V" [8 Qbool operator < (const sItem p2)# P l% C, w* `8 M( n! A
{0 E, L# D8 {8 k
if (dwKind2 == p2.dwKind2)
0 r1 l/ t7 M/ o4 k$ a4 |. W1 i {
7 W! e2 J/ T1 [$ a return dwItemId < p2.dwItemId;( L, M6 x* j5 k9 \
}else{+ n8 U; \* r4 a6 U1 S
return dwKind2 < p2.dwKind2;
% g9 U; \$ }1 e: F }+ ^9 |8 w( T/ S; D- q( F2 h" f
}
% B+ w# W" d* ^! Z8 r- i};
0 b6 K, \. P U7 J1 v5 j/ kclass CInventorySort+ N1 R7 [7 _2 ^3 m7 f3 u% A
{
. }' O1 \' k2 q+ U; S& j8 Y! ^public:9 y+ r) j0 q8 |, G
CInventorySort()6 a( Y y7 _* z* k S
{: `" U% B6 \7 @& a
m_dwPos = 0;2 Z# }6 b9 g% Y) G, I/ n
}
: `- F+ Q- u# c~CInventorySort(){}" h1 b/ X/ [1 Z; n. B
private:) X, G" T( l2 L2 X$ a
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息$ L4 O4 A! U! T: Z$ Z" @
DWORD m_dwPos;& c+ ]: K/ `$ q2 Y3 ~& {
public:
0 e6 } A" Z0 Fvoid Add(BYTE nIndex)
. N. s. Z4 g* `7 N- O6 C! d{/ Q5 G- ~. [8 s1 {+ A
if (m_dwPos >= MAX_INVENTORY)
' k* H2 c- x# A2 A1 {6 P {5 p- U4 w) j: N; b
return;% f, |2 h" f1 R6 G7 M% e
}+ h t* _# T7 m. U, u x
m_Item[m_dwPos].nIndex = nIndex;
! x8 V, ]. N" h' Z/ \) f5 H m_Item[m_dwPos].dwId = m_dwPos;( F* a* N1 p: H5 y
m_dwPos++;
5 H& M+ ~' d4 O8 y% \% g2 j}
, ?( u3 X; g! xBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
! w- M8 I7 l+ @# c/ K{( k$ ?! U2 L8 N- H1 R+ S2 A( \) |
for (int i=0;i<MAX_INVENTORY;i++), W. W1 `) K# s: r3 g
{. h; ^! ?) ^0 _" I: H w
if (m_Item.dwId == dwId)
' n: `$ T- j/ z0 w; T {. l. H( c/ n8 a8 X" V7 N
return m_Item.nIndex;( U+ Z# L9 q: W6 h
}
" P9 I! U% R7 c" e6 W }
' }8 L1 F, N7 }, q) `: V; B' [ return 255;% O( D5 P+ D J' l& i) o- m
}# a W; g0 M7 S
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置. j* h- e7 s. r& u$ d
{
8 u/ m) v( A( c9 e BYTE nTmp = 0;
4 X8 t$ |/ b0 V9 k+ j% c7 h5 q bool bDest = false,bSrc = false;- Y0 [2 e. D+ d4 y7 D1 @9 l
for (int i=0;i<MAX_INVENTORY;i++)9 O' b7 `4 p( T' v" K5 z
{% p4 M8 ^0 g5 U9 Z4 v
if (dwSrcId == m_Item.dwId)( A7 C2 V9 ~( L& x+ m+ ^
{+ x Q$ u# ^! G* p: x/ i
//id相等 则 改变对应的dest和src
6 n8 h [" V% U! A/ H nTmp = m_Item.nIndex;
6 l& Z- ~1 g: v8 Y7 U: v; N$ v1 O# u m_Item.nIndex = dest;( L% _$ `0 }0 k2 j+ \! h
}
- O7 k6 g% o, B' J. j5 g }
$ M! i; u% ] h5 B //临时数据保存完毕,交换开始
+ \+ L9 ^7 i: O0 K m+ r for (int i=0;i<MAX_INVENTORY;i++)
0 d8 O( O! o7 E+ g: M S; a b& M5 R {) D2 Y, B6 j0 ]- g9 M, b8 H
if (dest == m_Item.nIndex)
! O/ h+ F0 v- L W8 E u& P {# F) B$ Q& B- W5 l4 m
//id相等 则 改变对应的dest和src
+ J( D, e4 H8 h m_Item.nIndex = nTmp;# t' w6 \" _, D" x B
}4 d+ |( F' C$ W) Q# T! d& m
}7 ~# m5 S4 S( a0 y0 p- A% K
}" d5 a0 R# D" ?7 P
};+ K3 v8 H' P8 s$ B3 a7 z
-------------------------------------------------------------------------
1 i& P ~; @6 @& T C6 d依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
/ _, ?; l* O e/ P4 a搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);: e7 B, |+ `; k& m3 \# ^
紧靠其上添加:- Y6 z) K% G4 h! j5 B6 ^" x
if( pWndBase == &m_wndMenu )6 n" v: T/ _3 N ?3 H. h
{
! X* T" T" q4 k9 Y2 Y switch( nID )1 ]2 A" J' w; |
{+ A9 F9 T- g1 _( w
case 2:" t3 f1 G1 q9 J R8 R# ^" c+ P
{; H) A5 {- ^8 V
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
* c: k, M2 _3 e; d2 P6 W if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)): c' z& ?, @6 ~) V, o. l7 e+ }4 J9 W
{
+ O, J6 ~6 C, r: k1 _ break;
7 a8 w) k4 h7 E4 ~2 k: L. p) N }
& e8 i L; x) ~9 G) x for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++): ?, b M. X& Y0 F% t- ^
{3 @( t0 R; X$ W2 c) u! E$ R0 c+ K
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
, L* ]; o& J- ~, X9 f if( !pItemElem )$ E, c% I* w7 r- s/ p. m
continue;
" S8 o& _6 Q3 x, M$ x if(pItemElem->GetExtra() > 0)
8 k% u) \8 P5 V continue;' A9 U( j3 T$ R& N. Z# E
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 2 u5 m! |, M- h$ s) l/ q5 [
continue;3 H% p$ d3 i7 k0 R
if( g_pPlayer->IsUsing( pItemElem ) )
0 E& D+ G' f0 c) g- I continue;1 v: n/ y) g' A' x
if( pItemElem->IsUndestructable() == TRUE )
9 V- ]" I! x6 |% B2 ~+ i {
" z' X, A. ~" g4 `+ R4 n g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
# Y6 p, O9 s8 e9 c T, R continue;
: Y- X7 c1 T! D- s# X/ z }- R! i6 k0 u- J! o$ T ]& i
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);$ J; X+ J q5 U: z( B' M9 X% u3 L
}$ x0 e* R2 v" \) C
break;
U6 u% r( E2 K+ [& h& l2 q( `. _: P }, X% Y; t% R9 @$ @$ M# I
case 1:. V5 P: a Q% x. s
{9 E* m$ }% `( e6 r( W
//整理背包, Y* P( q1 a7 M& q5 a/ M/ G8 E
//////////////////////////////////////////////////////////////////////////
! `/ R5 _5 n7 N5 I //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );) S3 t+ h; ~& a6 r; c6 g
//////////////////////////////////////////////////////////////////////////1 _. A8 n% x3 N% u1 R$ Q$ V' R' W
//////////////////////////////////////////////////////////////////////////
1 [4 j( Q8 n. \; f' A CInventorySort* pInvSort = new CInventorySort;
8 I3 M. g9 I- K) x2 ? vector <sItem> vItem;
% f$ }; \2 G0 X/ r6 `! u vItem.resize(MAX_INVENTORY);//初始化大小
: z3 }8 G% b& d3 \2 i/ z //////////////////////////////////////////////////////////////////////////
/ ^, N" |" G' e7 U& Z //填充数据! C& P# V/ u# i/ C2 O- M. a
for (int i=0;i<MAX_INVENTORY;i++)( T/ r' w2 U8 l( h8 @
{
2 E% ?+ L5 `( g( V% Z8 M, b CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);% U: S/ c/ H+ E L- F8 \* C
if (!pItemElem)& e$ K- V. w/ \7 L! u
{2 Q- z- k9 u7 T( \) T9 O
vItem.dwKind2 = 0xffffffff;
( X. F+ d4 e+ O, } vItem.dwItemId = 0xffffffff;$ ^- y+ Y% Q4 ?- u/ p" r( F
vItem.nIndex = i;: h g% f+ j" v
}else {
* ~4 J7 t5 T0 ] ItemProp* pProp = pItemElem->GetProp();; R& ], q: m1 [+ I) z2 l
vItem.dwKind2 = pProp->dwItemKind2;2 J( Q5 y; x- h) d3 v# C/ a
vItem.dwItemId = pItemElem->m_dwItemId;
2 T& `- B+ \- F4 l. c6 m. b5 d/ E vItem.nIndex = i;1 X1 m8 p; x" s) S4 s {1 \9 A
}
3 u8 R( h* M4 j3 R% P9 J- j //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);2 Q7 C" W, _) c' ~3 J
}4 j6 s- R0 _$ K& [) Y# O2 e8 O+ [
//////////////////////////////////////////////////////////////////////////
$ a* q* R3 J7 n/ Q6 O sort(vItem.begin(),vItem.end());//排序- [# q) m" @( q; F& ~$ {; f
//////////////////////////////////////////////////////////////////////////
/ I$ J( Q, V; D0 \9 } //交换
# K# D s2 Y" J6 a for (size_t i=0;i<vItem.size();i++): p$ p3 f1 X5 M) i* q6 S: z) `
{5 K( Y5 ?, a0 l& f7 j1 b
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
! C) r. ~1 B8 _: I7 t4 k+ z( e pInvSort->Add(vItem.nIndex);
6 `+ s T) B( h( o \ }0 X2 k0 K c: b( A8 e. |8 @! W( F& ]7 |% e
BYTE nDestPos = 0;' M2 \3 S/ Z- `5 P( m X' m4 p
for (int i=0;i<MAX_INVENTORY;i++)
' X8 `3 n6 ~; `& R' b1 u {7 ]8 \0 b) Y4 J! U
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);" w1 ~% ?/ ~) L% W
if (pItemElem)
4 c( h& J1 h; Y {
# ^' q9 o5 |4 w) t& O, n if (IsUsingItem(pItemElem))
' O) W6 L9 n) N3 Y8 l2 ^8 k8 s: [ {. o& u2 P$ [8 n! D8 c- \+ u
//这个位置无法放 }; ?8 Y% D7 b% B [
nDestPos++;
3 S+ D* c/ ^. C }( O( h, h0 Q0 T. k
}
# t4 g+ n3 z" q' v& j& k BYTE nSrc = pInvSort->GetItemSrc(i);
( Y9 L. t0 i( f" Z% @ pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);. U- O% i: V5 b+ P6 H
if (pItemElem)4 x2 t8 C; x- o0 L) W& V
{. N+ n, C0 K1 s( a% o6 k2 n
if (IsUsingItem(pItemElem))- Q4 c! U1 f8 U. ^1 x, k: e
{; J9 O2 o5 T7 g7 a& ?9 A
//这个道具无法移动,跳过 L! \; O; A9 r7 L/ p$ P
continue;* }/ m0 {% f. N
}
: r$ C P, l6 l5 @" q2 ]1 P$ H, v }else{4 a d$ T( ^( {
//空位置 不用动
: ?5 I8 ?7 y2 X continue;& G; r1 b- B! q" {" x W8 R/ J$ Y& N
}0 N: j) \+ }6 @' S
//////////////////////////////////////////////////////////////////////////- l k! Z/ D* Y* x% ~/ C5 S8 |
//开始移动* W. m$ d' G4 X: m' o% o4 n4 R, S- W8 g* s
if (nSrc == nDestPos)
' ~ @: W- O1 i3 j5 U6 x {
L/ O4 [4 b; m7 |3 x$ A //原地不动# z2 S0 n0 \" m% ~7 y% w
nDestPos++;: l) u2 b! @3 d
continue;
. v3 A6 u5 R' r+ p: F5 _$ I0 k }
% Y+ T2 W, j T' }: c pInvSort->MoveItem(i,nDestPos);
B3 M' @9 Q% j+ A( r% @. X g_DPlay.SendMoveItem(0,nSrc,nDestPos);- r4 [" p1 K3 W$ Y
Sleep(5);
6 x3 j/ G- R& [* Y //Error("移动 - %d->%d",nSrc,nDestPos);4 Z3 L( ]/ x2 n* C3 Q
nDestPos++;
% a" x* z; h v, D% P }
( j8 G$ p3 t9 M9 C+ c //取第一个元素的信息
6 ^, T; W4 d. R: a; e/ D /*
p1 v' X3 U1 H! B6 W if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)! |/ W; O2 R# Z& B* l% a4 @
{9 I4 V6 q4 a$ Y/ J' W8 B& m
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);$ m3 o U! |# {) @, d- _. \9 K
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);" ]" h% H- S' ~- [* L5 g; w$ x
}
* G2 F# z+ z; r( `' b: _! z# P */; h* S9 U1 N, L% z2 k% c. u/ F
//////////////////////////////////////////////////////////////////////////7 q; h" d% n F! M1 A
break;0 _) \$ H4 k2 l5 o7 H4 x4 {
}" {+ s9 j, V y4 x% P
}
- Y0 w- T& w! v7 B0 D5 }% g9 P}! s' G8 {; H+ ~2 @' O1 c. V
m_wndMenu.SetVisible(FALSE);
W4 `$ M# L9 t' |% ?. u/ Y4 c
) |$ Y% w7 |" L; e" U/ H1 H9 v h$ S--------------------------------------------------------------------------------------------------------+ g$ v& B$ J+ G* A4 M6 K/ {/ d
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
. \2 Y0 u) u1 s2 f& h{7 L6 Q) M2 B0 M4 k
BaseMouseCursor();. `% A; M: t# r- A( A; y5 `
}
% V+ o5 c3 n: o0 i+ G) G在其下添加:' s0 C) H$ a6 Q" C+ S! |
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
% s! _+ |3 B, Z8 ?+ r{
- l7 ]0 ]/ |- }: ]- ]3 [m_wndMenu.DeleteAllMenu();
9 G$ w, _ D. l& lm_wndMenu.CreateMenu(this);( ~, W6 `2 K* H6 F. ]( C# z
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");- ?( s" x# p; t5 t6 T
3 B; \7 H3 x" M$ x/ h9 h- D+ ^. s
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))# t/ O% h# e7 Z/ d% ~9 `
{
9 L6 `4 a) C0 N //P以上级别才可以删除所有道具
2 g' s+ r8 C0 H* a2 L m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");0 h( Y) f" U- @' P
}
G" w$ Q! z0 i! p7 G. vm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );" k) t1 A' Y' P
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
) H, E# s) C0 r; d1 n& dm_wndMenu.SetFocus();( X/ `9 I( ^* {9 ]8 K
}
V. w% B$ H* ~ V------------------------------------------------------------------------------------------------------------! l1 s9 W( e! |2 s: }- f# y1 C8 y
*************************, d, _' D. U. I$ y. ?0 K6 l
WndField.h文件
0 Z! k& i+ `' D. T1 a9 n. q ~*************************( g+ h2 @8 k# V6 Y. A. U
搜索:BOOL m_bReport;* i6 l% b; e5 a- e) l2 s3 w
其后添加:3 b- z( e% K: x4 S
CWndMenu m_wndMenu; u# J4 x7 j$ P: |& K5 v2 C+ |! O
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
$ a, N j. M% m8 t6 Y6 r其后添加:
2 Q8 e6 z# o R& e. u+ x8 L. evirtual void OnRButtonUp(UINT nFlags, CPoint point);4 Z2 a$ P; `) s9 {
3 B; U, n( x: E, A
* M& l. G" L. S |
|