|
|
源文件中_Interface文件夹下WndField.cpp文件
; c6 h) W r5 q- W" L搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )+ h3 a; w( g6 K0 M+ j( s' C
2 u' T$ u4 u# P8 s7 bstruct sItem
" U7 V7 \! l B( Y{
6 m& z8 @! y0 x' p# g' }DWORD dwId;, v6 C9 F8 A7 @1 m9 q
DWORD dwKind2;9 D3 I1 r# r# L4 |9 _; ]
DWORD dwItemId;5 s. K5 G" P3 Y) f% F4 y
BYTE nIndex;
6 M. }4 c. `- `$ NsItem(){
9 P" w3 m. `4 Z8 o2 ]' p dwId = dwKind2 = dwItemId = nIndex = 0;
" V4 y, a& g6 ~: v- D! V" W& Y0 x6 ^+ F}
* x5 f+ C6 Q( gbool operator < (const sItem p2)( B) i. X1 @4 R, C8 I+ v
{
) c8 v6 W- ]# W E& O if (dwKind2 == p2.dwKind2)# D) T3 i6 ^3 |/ g) a
{: Q/ E" m' p# x# s9 ] \
return dwItemId < p2.dwItemId;, k& B, k. {. ~; n* c* o
}else{( c& O& P& h) R7 }; ?
return dwKind2 < p2.dwKind2;2 O) k" O- V7 Q; p; v3 r9 ^
}
5 U: v; y! U9 h& @! _/ k, j0 m- d}3 h: c5 D6 r8 M d4 q2 D
};. u, Z8 }5 D% h2 Q
class CInventorySort- J/ I; q+ t4 r3 y1 g. |; h
{
+ B' T& t2 @) k; t9 J4 s& npublic:
9 O: ~* L3 k8 x4 ]CInventorySort()! p* N6 E& Z1 O! o" F8 S
{+ X- N5 \% C% ]9 X; ~1 p \
m_dwPos = 0;* E6 x1 y2 q* y3 @
}
% a7 ~' o. m& `4 L0 _~CInventorySort(){}
! S# Z* |; e N* b; x3 [private:
7 C u- E; P$ q6 C3 GsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息3 b4 D* B$ f4 G/ z! z$ ^
DWORD m_dwPos;
) w8 U" F2 ?( e# O% zpublic:$ s7 |" B; m$ |3 y1 N
void Add(BYTE nIndex)
9 n! g$ o1 `4 v, ?/ d{9 t: F2 E8 i* n( l7 t! E: f, B
if (m_dwPos >= MAX_INVENTORY)
9 [, N1 k3 W% x) y {, \% a) z9 S: r' Z" o' D, u( @# U2 `
return;; A" n* C& n, s
}% U f. D4 Y' W! D- b
m_Item[m_dwPos].nIndex = nIndex;
# m Z1 G1 S( f m_Item[m_dwPos].dwId = m_dwPos;
" e' x$ l' }" F/ N m_dwPos++;5 R. ~" ^+ V) i* R' }9 ^( [" q
}
1 E" ^) `0 y9 [; U: q* |+ zBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列2 c, m6 {: s2 S# p! s* [( n; a
{
% P8 {* a9 B4 r' v* M: l for (int i=0;i<MAX_INVENTORY;i++)
9 i" n' {. `+ f6 e* m {; Z u: h! N( |2 k# |4 v
if (m_Item.dwId == dwId)
1 @7 G* h1 {$ _# ?2 O+ A {
' ?7 [+ j" _% e return m_Item.nIndex;- H4 {0 X/ m. f
}
5 Q9 J* r* c! @: C }
! X* q' o$ @. [4 _9 y' u4 I0 L8 E( N return 255;
( I. H# R9 X* ?7 y j}
4 n+ m" d9 |9 Y4 l+ _void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
3 r/ ~5 C( G* i; `* D9 I. a& I{" C& q# o* [/ I9 O. C% n; h
BYTE nTmp = 0;
) c. W: C4 v! I) \ bool bDest = false,bSrc = false;
: v) b0 R& M, V$ S; A9 ?" W for (int i=0;i<MAX_INVENTORY;i++)
% _ D0 e* M" V' n& E2 J ~* ` {
# z6 \6 c, [9 V5 h- [0 o if (dwSrcId == m_Item.dwId)! R* d: h' V2 h9 F6 b8 _
{! U! }' u$ N5 x- i+ `
//id相等 则 改变对应的dest和src- f* E5 D. G' s6 O6 E! Y
nTmp = m_Item.nIndex;) l+ J5 w! Q+ H! G
m_Item.nIndex = dest;8 J! {* U7 ]- J. B2 @" j, I
}
% g; l- S0 r! g }# p. F! W. l6 `4 {9 u
//临时数据保存完毕,交换开始
+ z& v5 ]9 g9 s for (int i=0;i<MAX_INVENTORY;i++)0 e7 U% Y* C* Q& {! A
{
3 q: c) C* m5 N+ L) D+ s# f if (dest == m_Item.nIndex)# @/ b* y, N# t. S2 F4 p2 i A
{; X( k1 e5 J" l# S8 y
//id相等 则 改变对应的dest和src
3 |" X! @4 P4 k% E m_Item.nIndex = nTmp;, @& A$ {6 |# A) `9 Q" k; L4 D
}$ D$ C4 s* U! f3 f2 M4 m4 s7 Q
}* h( Z- X5 ?& a6 R! D
}
* r& K/ L) p) d6 b};: p4 {/ t, u- W/ F2 F( w) |
-------------------------------------------------------------------------
5 \) Z9 @( Z% Q* w依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )4 {2 F! G6 l6 @: |2 }
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
! ]5 M& F8 o. t1 c# M' R, [紧靠其上添加:
' r* h6 g4 P e" I! U+ d1 Xif( pWndBase == &m_wndMenu )! O) u4 g: F6 v2 k& Z& b
{* M, J( d2 P: k0 k( O' v
switch( nID )
1 Z" Z6 ]& K7 q {
0 J: B, `; ?2 e; T1 P2 c$ z case 2:7 G/ r$ q6 |4 d9 J3 E9 [) f
{7 c! U6 ]& h$ N' _3 m
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
n: g: l7 _( X% F `" ?5 U if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)). e5 j: p6 J9 h2 X
{
% p3 \7 x# e5 l% v- _ break;
& G. g$ U. Q7 |4 a7 { }
z- y# }% p5 j- Z7 T for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
N3 |& W" k2 ?& B/ A! ?# j {6 b$ i' T c" Y* ^& z- X7 A7 o
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
- P% X7 ~5 [; B9 X if( !pItemElem )
9 _8 @5 O4 Y, N( @ continue;
: F2 _8 w6 l+ S9 H if(pItemElem->GetExtra() > 0)2 U0 a4 N# e! e( r9 i
continue;/ Y8 {2 ]! a! I; t1 f
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
9 A+ h; e# C) R- v0 l5 t+ R$ g- m continue;4 J* r2 `5 M) P" }: }: F9 o% p/ t
if( g_pPlayer->IsUsing( pItemElem ) )
q0 v9 P/ a! L g7 b" _) R ^. a2 {1 E continue;
D/ m+ e. Z7 @- S# ^& J if( pItemElem->IsUndestructable() == TRUE )
5 K/ @! Y; I6 d7 o0 f$ x {2 E/ y& @$ j; I
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
\9 j4 C; J% G" b/ m continue;$ }8 z9 |7 z6 j) @; R9 W7 w
}9 G! P( `2 U0 a5 {% V9 i0 [
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);9 s9 A3 g! \) I- I! U5 w |
}% C2 S& u( U: {# ~8 N2 \+ ^
break;
8 ]$ q" y5 d( v4 p }* S( X S' c+ y7 x2 i- `% C
case 1:
) G* Q% O+ A) K6 T {
1 I& {1 Y, V" A w# s, F+ j% _, O- g //整理背包
% _) V- d$ ~6 q3 F# {3 { //////////////////////////////////////////////////////////////////////////
( a: P% c+ T& h+ ^$ i' q //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) ); |: H; i6 q5 @. Q
//////////////////////////////////////////////////////////////////////////! F S2 X, @# i+ p0 d, A* a8 A
//////////////////////////////////////////////////////////////////////////
5 u/ g" U( L/ N3 v CInventorySort* pInvSort = new CInventorySort;1 Y0 t6 |0 N3 z+ Z' V
vector <sItem> vItem;
1 j/ X; A9 U- u9 r8 L vItem.resize(MAX_INVENTORY);//初始化大小
L7 L' C, `( L5 m% P //////////////////////////////////////////////////////////////////////////
4 ?# v1 x7 H5 q; V //填充数据
- I! T; M0 |( z2 a for (int i=0;i<MAX_INVENTORY;i++)2 H+ [% z ?; U
{
; d4 {- f' o+ x, Z$ X! m5 {% R$ B CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
+ @$ c* v. E1 F) I. b; _8 b if (!pItemElem)
/ @5 O$ A) j+ ~5 A* N2 H {0 F8 j: a" Q& `# F3 m
vItem.dwKind2 = 0xffffffff;4 ~) D+ e- B. z4 c- z- v
vItem.dwItemId = 0xffffffff;3 e: E v1 D3 D' ?
vItem.nIndex = i;
J! C- y2 L5 B5 m: N }else {
% S8 h$ Y9 r! T- |# f. x/ M6 g# A: j ItemProp* pProp = pItemElem->GetProp();+ J3 m% U/ N- W [
vItem.dwKind2 = pProp->dwItemKind2;
- {% p {! H" {2 J+ f1 U( q0 |3 B vItem.dwItemId = pItemElem->m_dwItemId;
# H) |! ~7 y4 Y1 c vItem.nIndex = i;$ l H% x3 w' `$ P
} F& @/ |) R6 H; m5 x7 x6 d0 u/ Q
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
7 c7 f/ A% D. v2 X! s4 y }
3 p, R, R0 K4 Q //////////////////////////////////////////////////////////////////////////1 N# ]- X' M( V" F) z' f' u1 R
sort(vItem.begin(),vItem.end());//排序
6 o4 o# A$ m5 m; E) X5 K, g //////////////////////////////////////////////////////////////////////////
& N( E* W6 L7 m& ~% o //交换
7 u, a3 w* Z. O. q ]0 p for (size_t i=0;i<vItem.size();i++)
' H+ E7 }9 j' G {
" P6 c- u# N* Q: B3 ^0 }, v2 l4 h //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);8 U% I. a, y3 U' |+ S. o- J1 _: m* t
pInvSort->Add(vItem.nIndex);
: n6 T8 K/ s9 l/ E( e# e) D8 q }9 H% A0 F: h) x0 {# p
BYTE nDestPos = 0;
! U d9 O+ f% m for (int i=0;i<MAX_INVENTORY;i++)( u% O; f9 j/ l; w
{3 |/ U, w: {! c
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);$ \0 F# ?4 I& o
if (pItemElem)- b1 A! S; w' j1 m
{1 C; P$ x4 i" C
if (IsUsingItem(pItemElem))- y3 R4 x% i) w/ j
{
6 B4 ^1 L) g$ Y% C& P' u //这个位置无法放" L2 y1 b3 k. X* b1 ^, t
nDestPos++;% ^+ W4 e9 F' Y* [* s! x
}
7 Z& N7 j: C4 z9 N2 Y6 l }
/ j B- Z" T: `' z! e BYTE nSrc = pInvSort->GetItemSrc(i);9 Y. k0 Q0 b% |
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);. f: _( d( O+ G. J1 Y$ T9 u1 _3 N+ N- x
if (pItemElem)+ g |( |2 A4 t; \1 s
{
! R/ a& a" `% N; O8 z if (IsUsingItem(pItemElem))
2 V7 G: [' `4 U% I; |$ D {
|. o/ j0 \# ~) u% j- M# u. o //这个道具无法移动,跳过8 z' i) `9 M! i; k. h! Q1 K$ t
continue;
7 C. f/ a7 o: K, z }
4 Q$ s6 @( k& K A$ u' v5 Q! R }else{
1 M. I* T- c3 m9 U //空位置 不用动0 m" p7 T) J. d: j% i: L% k l
continue;
2 W8 m3 ]" V7 {) N; ~0 [% _! ` }( _5 U0 U5 V' L$ b& A( Q" a
//////////////////////////////////////////////////////////////////////////' \2 b6 [9 t+ s" e# H _4 i
//开始移动
9 T5 R! ]! `/ O' \0 w0 u if (nSrc == nDestPos)
1 d6 v% \8 v v) I( d1 S {7 A% J. Y) v4 @8 W- z( r
//原地不动
9 Z G% T0 d( D( P* ~1 x nDestPos++;! c+ B. ?% ^8 ~% \
continue;
2 n7 r' G' l- [) v2 \, b/ g' m }9 O9 ^$ i# N- G$ ~% b/ j/ g
pInvSort->MoveItem(i,nDestPos);* J! ^! @0 b3 T' R
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
. |! U0 R: e0 Y6 C; G8 _ Sleep(5);
5 J0 \9 S5 C% X: d9 v //Error("移动 - %d->%d",nSrc,nDestPos);3 _' j1 h, F1 X$ c& Z: {
nDestPos++;# B- q9 |& T+ z" D) o+ ~8 i
}6 `. o1 Q8 w. t- L! f z
//取第一个元素的信息
. b* ^7 a( l9 p# W& Q0 R /*' B: C+ M# h' |& q1 Q
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff), s+ }- \: D1 u: L
{: E* { S" t# r2 A! w) o$ Q( h
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
, `6 Q( O A9 X' R g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);& k$ l$ |7 y! W1 [6 Y4 v
}
; V$ a% Y. q2 H/ k. `2 P */
5 u, M ~5 L) v( X% e( H# p8 g2 U //////////////////////////////////////////////////////////////////////////
: q0 X% r/ J, `8 [1 g break;
0 b1 L2 ~ {* b9 [$ f' Q3 P Z: X }
2 {) B4 ]0 r6 y4 n! C1 X6 h, U }
- c6 i9 P5 |5 W7 t8 L$ D) F! r) e}2 @1 B' b0 w" _) @# h* L H
m_wndMenu.SetVisible(FALSE);( D! ]. _; t5 y( t b
$ f1 n/ j2 a% k. Y
--------------------------------------------------------------------------------------------------------( g! U4 l( c' M$ E9 n* }" [( n
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
) P% j/ i/ B* S5 _0 @( R* B{
: i. `" U: u7 |% cBaseMouseCursor();$ p0 g6 P- c, y* T! c
}
& M7 e+ c$ H/ I2 f7 ~在其下添加:
* R" W5 F/ q: e6 q9 u8 G" { R, jvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
0 z( ?; N( g2 w" c{
' e5 ?6 E$ {, ^2 A$ f) sm_wndMenu.DeleteAllMenu();. S w$ [2 [6 w8 O! Y& _* v0 j
m_wndMenu.CreateMenu(this);, V* C* o# X1 o7 @; U2 ^9 a
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");" m& k9 |8 E7 g. f; M' x, v& J, Q
7 F3 O e( g2 D! E
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))9 f2 C6 {7 m P) ]) v+ w- P
{
- I7 S7 `8 |& `2 ~ //P以上级别才可以删除所有道具: u5 ?( E( g6 V( K$ K. h/ C
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");$ {1 O5 i5 i7 _
}
! U& D- o# r' Xm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );; O7 m1 J, x. ?, ]
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );- }) ]) U9 e8 I( f2 f- J
m_wndMenu.SetFocus();. r1 P2 [' u2 ]* C% A
}; o5 Q4 z h. l8 q6 L; Q
------------------------------------------------------------------------------------------------------------
1 S. p* Z" R: o0 J* b) r! O2 _, x*************************, u: m( P8 W' @( y8 j
WndField.h文件' [; t% m3 {0 R, u
*************************& ^6 ~6 D# C, K+ k7 q7 X$ v
搜索:BOOL m_bReport;
$ X: L# ~7 {( r+ P! N' k3 f其后添加:% S+ @% Z8 W5 z4 \8 Z
CWndMenu m_wndMenu;8 G$ f0 V3 [: W9 ?: n( f
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);+ Q) H1 w5 n7 s8 [
其后添加:. q; |3 K5 }- U
virtual void OnRButtonUp(UINT nFlags, CPoint point);
2 b( r1 V0 Q" {4 ~# |6 L
. u4 D7 I5 C9 r2 S
0 V9 {2 ^5 _. o- Z |
|