|
源文件中_Interface文件夹下WndField.cpp文件
( ]/ h1 ]; t% y* p: {! F搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
- D% S) I4 N, s& i( a4 z
9 k9 X( R! i4 xstruct sItem
1 U9 n J* B0 `* B{. w: S) w- e% F" r5 b
DWORD dwId;% C3 e, p2 f, i- K6 L( T; R5 D
DWORD dwKind2;
. I( W% ^! w% J* S0 h6 A" h/ NDWORD dwItemId;5 F( X& V3 F3 i% f' B$ E
BYTE nIndex;0 D* |9 ^. A7 s3 E$ Z/ Q
sItem(){& ?' i- d% c' ]7 K3 a3 m/ m
dwId = dwKind2 = dwItemId = nIndex = 0;
" L, A2 w* o$ A2 U}
/ M8 g ^- \% T- Vbool operator < (const sItem p2)( J/ o, ~: J5 o" j
{* s, ~! R9 S# P [7 J7 j* H% ^
if (dwKind2 == p2.dwKind2)
# n k! H9 x$ W N( w% {2 P {
; _* G# M: R* t1 ]- ~1 T7 ` e return dwItemId < p2.dwItemId;0 T$ u W0 _6 B3 r1 u, [
}else{
; l6 H! c7 z! C* F8 } return dwKind2 < p2.dwKind2;
F( I5 i6 k) J6 u% V' V* s6 [ }# w* c9 |# E: N% P# ]) I6 @+ x" S
}$ H) K \" g8 I0 N; E7 ?. X% R4 {) u: M/ B
};
" T9 R; U2 {* q, y" c1 nclass CInventorySort
: X' O3 ?3 Z) L, G8 _( k3 G{
/ N- M$ L6 S% P% Q2 U- |public:
" c3 k3 G: z7 Y( z2 [& P. N7 mCInventorySort()) q: \( L6 ^. ~8 ]
{
4 y+ i' |2 c2 G: L m_dwPos = 0;* L) L! ? G8 P4 P, l
}
: Y! _1 I: Q0 F, Q: k# ]~CInventorySort(){}
: v9 B9 L+ W- ~ \$ d# l3 oprivate:9 b* r- i/ C; r3 f6 `. V. o
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
# z4 V$ o! q9 n8 e& e0 a6 N) rDWORD m_dwPos;0 J- d( g! `' V( Z' d3 `- T
public:( {2 x, l q7 w! A1 F0 I
void Add(BYTE nIndex)4 i( V, T2 P& ?* s: y4 ~
{
9 R2 p- z, r/ t- l x0 G if (m_dwPos >= MAX_INVENTORY)
$ _; L. N4 y7 n8 {! b/ K% y {
( c; P* O5 f9 P7 u7 I8 M return;
" t5 W* b5 G2 k" t }
; b' S- \& x1 z m_Item[m_dwPos].nIndex = nIndex;
# M; a. q5 }6 N) I! }4 g m_Item[m_dwPos].dwId = m_dwPos;
6 h4 E; \7 n- [ x: [, m m_dwPos++;. x# k& f) k3 x* V
}0 ]0 ~$ ]9 A4 B6 [0 h2 K
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
- _- g( D, X! J1 Y6 {{
! A% G6 T7 f) ^% t3 Y0 ~! ~2 N for (int i=0;i<MAX_INVENTORY;i++)* \0 d6 Y5 f6 g+ G, o
{) B8 s" q. G5 b# Q2 N
if (m_Item.dwId == dwId)$ Y- N$ L! o a& W9 O8 s
{8 L6 Q# \9 B5 j) O
return m_Item.nIndex;
7 r& H; _$ w" N- y }
3 o0 B8 ]. D4 e }; e# u% a$ A$ x0 W/ d# N9 O" [
return 255;
$ N( q1 c1 s( ^, {; _0 o}
# [7 o( c" Y: Y5 W5 Jvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
) I1 {. l" K0 D5 `# p1 R% ^7 ]{. y1 s- V/ N" ]; L/ l
BYTE nTmp = 0;2 f- d4 E& f4 M, c- z! x
bool bDest = false,bSrc = false;( J/ g9 D* ]5 b$ x, U: p
for (int i=0;i<MAX_INVENTORY;i++); G5 b; e* v' d6 X s) b* x* |
{
5 G2 x; T( |5 e0 x7 J( ^+ @! C# \. J if (dwSrcId == m_Item.dwId)
* N% L* P; C& J+ ?7 v% D( A {
% k0 W4 i8 f# o: E //id相等 则 改变对应的dest和src
4 F& ~: j5 B2 Y- L6 M! D nTmp = m_Item.nIndex;- j' v; H9 w9 R9 X8 S/ E6 j( U
m_Item.nIndex = dest;
! F; {& | @& y% ~; ~ }: v: W6 P6 M% E3 L2 f- P8 P, \
}
7 U5 f) ^- u- ^( U4 V. ? //临时数据保存完毕,交换开始
2 U" q4 x8 Y3 h. r for (int i=0;i<MAX_INVENTORY;i++)
6 M+ N, V) N+ J0 s2 p2 z {& X8 b& i; o3 g. k
if (dest == m_Item.nIndex)
* R- B+ R' t5 C, X3 _. q {) f3 ]; K. C& I+ ]: \& h. z0 l
//id相等 则 改变对应的dest和src8 i: Y) C. P7 W# m: u1 u
m_Item.nIndex = nTmp; r: H, y9 g9 G7 w9 J6 o6 P
}
& s( X# a2 o0 W }
5 R$ y6 u6 y* Y$ A5 A$ t}" h& `( D# P ?
};+ M5 [" L- X, r# J9 a
-------------------------------------------------------------------------
" T3 v# |' n& g依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )" B- b- b% x! z! h: z
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);0 |) F' ]. U4 q4 G# m
紧靠其上添加:0 {; I! l- m [9 n* _
if( pWndBase == &m_wndMenu )
8 h# o" e# a7 d2 `{! M7 {2 q; [$ R9 m
switch( nID )' c8 m! H, A/ O! f# m; G1 ?7 g
{
" N0 ~* n5 r( c case 2:
% j, t* K7 V& U0 q0 I {
& O0 `- g; [4 @ v //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
; U% w8 W8 m/ o$ G: V8 F# k/ P if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))9 s6 ?2 i9 @8 d& d' X" s- p
{1 i+ I" r) s0 v/ @+ g
break;
1 y8 b3 Y% W9 @6 p) p% \. f }
( F7 g h5 j- ]/ r/ B% X6 d for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
0 k) U2 {( |0 t. b6 j3 _ {5 Z( O/ v/ K: A: r3 t
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
5 h0 r+ t+ ] ?5 ]2 R( Y if( !pItemElem )# N% J8 F2 p3 q+ B0 d( f
continue;' o9 K1 j. S: r2 B& O/ \
if(pItemElem->GetExtra() > 0)
L/ c' R4 W$ A5 X0 l continue;
' f$ K1 E( k$ R0 |/ i* F/ f6 o if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
) [6 q4 W/ N6 z$ I* I- ]/ c) Q continue;
$ h! m9 H0 A* d if( g_pPlayer->IsUsing( pItemElem ) )$ c1 B J# T' L5 E
continue;
: C- i7 M# ]5 j8 q if( pItemElem->IsUndestructable() == TRUE )
7 R/ Q5 \$ \0 ?9 W6 a {+ d. o v8 R1 t# a% X, `; ^
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );5 Z1 Z0 ?5 C5 m2 v4 a' I% ~; }
continue; g& v; d) ]: O7 \, x; F) c
}/ @; W8 }$ h2 [4 t4 ~: u5 K
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);1 \( i2 P3 Y+ a9 ^
}
# g) ?! Z- s1 _$ u" @ break;4 r# j, h3 e6 t. d0 s2 g2 P
}
: s5 H4 M! p$ m6 p. ~ case 1:
Q/ S* P/ l* Q4 w0 S( V }2 [+ J {
. E) G: ^/ k% Z: m //整理背包
E5 J9 Z' Z( p4 v0 t3 _ //////////////////////////////////////////////////////////////////////////; u! C& g. c4 _1 z& c
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );+ ]2 C3 B" S, s% Y* u( T/ I( F
//////////////////////////////////////////////////////////////////////////" {+ t' ^% V/ ] N8 t$ T% I4 \
//////////////////////////////////////////////////////////////////////////) D' r, Z; h7 s* X" N- r/ u- l% [( S
CInventorySort* pInvSort = new CInventorySort;
/ `$ T9 m: E% C4 _ vector <sItem> vItem;5 ^, l. L; D6 C' u! Z% W
vItem.resize(MAX_INVENTORY);//初始化大小1 n) g i' m! F
//////////////////////////////////////////////////////////////////////////# f5 p6 |* [5 Y+ V* \2 r: V6 `
//填充数据
, J) ^+ f. I3 a( ]* V* {1 ]5 M for (int i=0;i<MAX_INVENTORY;i++)% t" f3 u. y, k
{. M8 Z8 O6 V' \/ P% w
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);, z) h8 \ V2 v2 W" [+ U n5 s
if (!pItemElem)0 M: ~) ?* e7 {1 g2 L( C2 f
{
( f' L6 |4 r5 Q7 j4 _( S vItem.dwKind2 = 0xffffffff;1 y0 R' L0 p z! p& v
vItem.dwItemId = 0xffffffff;
6 ^# Y/ R* Z9 H$ D: N; U# x vItem.nIndex = i;6 v" _' }! n ~/ H& o
}else {
. E7 A( s7 e' h# m0 @ ItemProp* pProp = pItemElem->GetProp();
, p4 t! U0 g8 ]% Z vItem.dwKind2 = pProp->dwItemKind2;
( c1 ^; C* M4 e- l4 j2 @ vItem.dwItemId = pItemElem->m_dwItemId;4 h9 r% }% G- \+ W- d( I$ [
vItem.nIndex = i;
- U( H( g. ^9 z- f6 b# v: ?8 t } R# @0 Z) y- R
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);9 r) f' e. b5 I- v" p7 Q" i+ e
}4 k8 Z, m/ M' x
//////////////////////////////////////////////////////////////////////////
0 d4 Z$ v: f$ a* H" { sort(vItem.begin(),vItem.end());//排序& S+ p, K5 p* U- }$ j
//////////////////////////////////////////////////////////////////////////; t1 c% z% D" d" [4 A
//交换
# c- x" {0 A! b: x4 ~8 S$ C for (size_t i=0;i<vItem.size();i++)* {8 h( F7 `# S- A" `, B+ b
{
$ {1 p) W! f/ ~5 m# s //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);# n0 B' l# G- K5 h, M
pInvSort->Add(vItem.nIndex);
) h; E6 f0 J7 J+ r% `- h( H }# P+ P) ~3 _8 `+ L: _
BYTE nDestPos = 0;
4 w5 U' [& B/ ^; |( L) H5 w5 } for (int i=0;i<MAX_INVENTORY;i++)- h f1 _* f# m/ g1 t! J
{, }/ K( F! D, w' v) }8 q( R* F
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
p+ e8 @; F5 y# g if (pItemElem)
+ L$ ~5 ]1 K4 \, O {0 |, P5 ~! g; T0 b/ m$ `- d
if (IsUsingItem(pItemElem)), |9 h, r" H# ]0 Q0 `% L
{
7 A7 w& i; f! w# j1 C. h //这个位置无法放
% u( k: h1 T7 {7 v$ G: S$ G+ ` nDestPos++;
: a. q! Y: U, f7 o) `0 W8 c. O }
6 S! x0 P. j. f: p }
?" m, C9 K& p" S" A4 F5 i l) g BYTE nSrc = pInvSort->GetItemSrc(i);3 e4 C7 T8 O% s, g2 U
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
$ n, s8 E0 l) ]& X2 s if (pItemElem)( Z( W+ m, W- u$ p. X( X
{
/ D% E9 M# h b. |- d if (IsUsingItem(pItemElem)); Z. ?3 Q8 Y% t+ |, Z$ D* r& v
{
/ b) d/ q3 e3 g# n2 h' Y; ~/ _ //这个道具无法移动,跳过4 b- E% F _, j/ p
continue;
/ G3 l7 f& g% f' { }1 J) P; E. W' ]+ l3 _6 m6 D
}else{
+ H1 e" B0 S# x) z; N& E0 L //空位置 不用动
2 r# f4 R' p7 T1 z5 r/ J& [7 ? continue;
' c ?9 a# N! z. r: p" f } n6 a! e) X7 w9 c& t% ]+ F
//////////////////////////////////////////////////////////////////////////
0 K$ k* m- q! R) H! F5 G0 |5 k //开始移动
- A. S) d/ a2 ^2 Z% b: K1 d if (nSrc == nDestPos)
; Z, t$ E0 X7 X. V) ~4 X2 M& w* Q5 O {4 i$ w" X5 s* a: E4 _
//原地不动. j9 {3 x d& ], I# V Z
nDestPos++;
$ }$ R$ C( p9 O1 W continue;: Q+ S5 q- p' c& f) o) O
}
# ^" z2 s7 h) l0 [ Y pInvSort->MoveItem(i,nDestPos);
& R% p+ T' v$ K- I g_DPlay.SendMoveItem(0,nSrc,nDestPos);
" e! m' w! Y5 U6 k Sleep(5);
$ X- c0 T! D3 d% a* E& Y; h$ k4 L //Error("移动 - %d->%d",nSrc,nDestPos);- m, R5 g& l1 }7 E, M
nDestPos++;9 |( c( e5 L/ V
}( [* Z: p. w0 E0 f, C2 P
//取第一个元素的信息, F3 V; \5 _* ^
/*& y! V% A1 U# Y' ?2 R' o
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
# E9 b. p3 ?' v {
$ x! p" a. g( G6 u Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
" U% D8 C( n- ~2 z g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);) n' [% G7 _! m8 G6 ?+ B) q( S
}
/ p. W' k; c8 I! G7 u */
# }% h& t4 W! R# B9 {( p //////////////////////////////////////////////////////////////////////////5 j5 b8 t( Y! }; u. ]
break;
9 b- J5 F, G5 z }) X* y3 U+ W( r
}
7 \/ n, R! M' n}
! b. C, n, |9 N7 D! r# om_wndMenu.SetVisible(FALSE);
T- [1 I$ j {. U5 q) z8 u# D# ]+ i: f* F
--------------------------------------------------------------------------------------------------------
# Z7 g* J1 z+ z& }% L搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
) z) O% r1 F' e{; o5 s1 n* P' o' N1 I- G. P( y
BaseMouseCursor();. S5 s! [8 R: I0 d: j! M" g$ t
}
) k6 e+ p4 R+ r2 ^/ F1 A& L2 b在其下添加:
5 e, h2 J/ `2 [8 P1 ^void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)2 K; T2 c4 D" J+ s X
{" `9 Q& L7 m6 B9 N0 ?/ {
m_wndMenu.DeleteAllMenu();
) G$ q/ J+ [2 dm_wndMenu.CreateMenu(this);
! j( K; m3 k, r1 f8 R, \+ um_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
. X+ l6 z ~+ v# e; ^6 g/ o. F6 c o0 k
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))/ o# x' S/ @9 F- E
{% m5 C) r% E1 w# N$ F# o3 K
//P以上级别才可以删除所有道具3 D* P& `3 }7 D2 X0 l
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");- f6 A% y& }3 G# e
}2 x% O7 V! e' C5 o. w& N
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );( O( i" n8 A3 J" ]+ D; u7 R7 a; a
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
6 y9 P/ g, _6 [m_wndMenu.SetFocus();4 _6 A4 v+ f2 t( N" k
}
" e2 ]; u+ d1 M( B------------------------------------------------------------------------------------------------------------
) O2 l, Q: p) Z& V0 z8 H! ~; e*************************
5 U2 m) Y1 F) U! ZWndField.h文件
3 d. w/ `4 m+ }; P*************************
& Y9 F% f0 T0 C" R4 n搜索:BOOL m_bReport;7 {% v( K4 F2 D$ ?, K0 G
其后添加:
0 X6 G8 ]# ^) H& J* g7 Z# CCWndMenu m_wndMenu;4 L! z& U% M! U3 U2 X' g$ u
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
6 c, g1 p4 W( j2 {; a: g其后添加:9 X5 P9 v- \; `! c7 d: g
virtual void OnRButtonUp(UINT nFlags, CPoint point);
, i* i% |2 k: d4 O* B/ B% g$ {7 [$ D
2 p% a. X) {" o/ t$ b& w, h
|
|