|
|
源文件中_Interface文件夹下WndField.cpp文件
& J! R6 z7 p% `3 F% R* q/ {搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )7 [, e6 Z2 z/ j) B- z
7 {: p& `: ^+ {: H$ @
struct sItem9 n" Q3 J, z+ g p0 z# Z
{
4 d7 _8 N, X hDWORD dwId;
% o( F. o9 ?* F8 G0 K! yDWORD dwKind2;: y% k( L% z9 X% }
DWORD dwItemId;
/ K( l6 }1 w" s1 |0 S7 ABYTE nIndex;% t$ L9 F- k& ~$ E5 ]
sItem(){
% N+ L3 r3 K$ Y! E dwId = dwKind2 = dwItemId = nIndex = 0;
* R2 y- F, f3 ^7 k- \3 y}$ q* a V* _+ g" p/ x
bool operator < (const sItem p2)' O$ z5 _( `# x% P& A$ ]
{
* M, z9 [: {( j/ ~* m4 R if (dwKind2 == p2.dwKind2)
! K! f a( B" n( c( Z {0 J ] X4 W0 {# W* S! E
return dwItemId < p2.dwItemId;5 o9 `! f* e O
}else{
8 b7 N9 ]) _# \, y1 N' d( X& z0 C D, X return dwKind2 < p2.dwKind2;1 Y7 \' p& q& K- u9 p- K0 ^
}& z5 p" s3 G! _' |5 j, t
}
& A+ J3 R) @* |8 G% A" s. y};( I" s& J; u4 v' m' f9 t' s8 b& b+ r5 Q
class CInventorySort
, h; m) @% R( S9 g{
9 X! e8 T d; H- Wpublic:6 e. W1 a: O3 `3 U
CInventorySort()" e, j; t4 s* r
{7 {9 ?* L8 D3 F5 K: ?
m_dwPos = 0;2 H% @5 y$ K+ f H* M! T
}
, X0 X$ ?1 R: M% M, {1 k# c~CInventorySort(){}
7 b4 s3 _- N4 Qprivate:
# _ o( U! ?# S2 a- u7 U o* O0 ?sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
3 z7 W" c! _& b% y9 dDWORD m_dwPos;
. W/ q/ L* Q! @# Spublic:( Y) {( m2 A5 X/ E; n/ a
void Add(BYTE nIndex)
' t# e2 I- p3 C$ n) X8 g* Y( \{* b5 _- A5 n- t1 Q
if (m_dwPos >= MAX_INVENTORY)3 L1 a# P2 h# v/ Q# u
{/ d- l) l* b$ ~/ P1 `) o* m4 b
return;
; ]0 I8 i/ |! X }5 w% a% v3 C5 _( N) S1 ?4 P
m_Item[m_dwPos].nIndex = nIndex;
( Q6 u+ v& S& g( E. S m_Item[m_dwPos].dwId = m_dwPos;
) c- H2 w' N& O* A4 r m_dwPos++; w& @7 F% m/ x$ ^! }
}
7 D& K; v l! nBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
# s) I7 a2 T. ^# T* @( v{
& _% i% s- Q/ z" U/ i for (int i=0;i<MAX_INVENTORY;i++)$ A% o$ V- o7 i$ Z; l" a
{. Z/ U+ ^( x6 G
if (m_Item.dwId == dwId)! h' U0 Z( z3 U# X' C
{0 O2 Y- {5 @; R: g! C0 l
return m_Item.nIndex;
) x9 H* k) t* R% j. Y }
1 J' Y3 O* b, W) g3 U# v5 W }8 D7 V0 W" t- I/ ]( }, |, J. T& _
return 255;* \7 Z* d) f8 Y" |4 Q% B, b
}
% G% c- c. k+ {) rvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置- f/ ^, f" ~8 t( H6 {* g U( w- J
{3 v% o* n7 s' w
BYTE nTmp = 0;- U( G/ r9 D5 T( ]
bool bDest = false,bSrc = false;+ _+ |- y* |# U* S
for (int i=0;i<MAX_INVENTORY;i++)
1 x0 o1 u7 e% w4 X {
, Y2 H- I8 T4 o8 Z; t' @& w2 g if (dwSrcId == m_Item.dwId)
+ R4 ?6 O! D' M3 S {1 v; }' c3 F: K' ] F
//id相等 则 改变对应的dest和src
4 {3 B W* L4 m- P" ]* u' f nTmp = m_Item.nIndex;
6 S. D( J! ]6 P8 T6 H m_Item.nIndex = dest;; x# H2 @( W; E6 X
}0 T9 i) o0 x/ J4 ~ U( j
}
' X P7 d: @! A% G( L, U' u) R% S! P //临时数据保存完毕,交换开始
) M0 l1 s( u% w; P8 U# Z3 ~ for (int i=0;i<MAX_INVENTORY;i++) N( b" s' h& S$ y/ G% c7 J& {' x
{
6 t: q4 C5 i. M3 B' b$ a) Y if (dest == m_Item.nIndex)
6 ?2 q- {! V1 L, u/ s r {
. i4 g- M% t- a3 H1 q0 n2 k //id相等 则 改变对应的dest和src/ Z& P( K4 v( J0 s
m_Item.nIndex = nTmp;
/ s" `7 e, |0 G2 L- U( f* ] }; Q' G# Q5 i* p2 b. r7 @
}% n: I6 w6 D4 B' i
}9 r2 Y* s$ Z) M
};% [# t) k9 W) H. ?0 K5 d
-------------------------------------------------------------------------7 Z$ v. G* f2 R$ B4 C" m
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ) Q4 r H2 k- }* t9 z
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
) k7 W9 X3 W0 x1 B( a0 p紧靠其上添加:: {; c( X" n% t r& t+ k
if( pWndBase == &m_wndMenu )
( w3 V: ~1 S) l{2 H' c s3 o# D1 ^% z5 E% l$ k
switch( nID )' _; X, t% [" Z, G
{
' d) k' }1 E2 } case 2:
4 r' Y7 B5 v) ] {
' L1 w0 l8 m$ H //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);+ g# N+ b' `3 }0 |4 W9 ]
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))0 n4 a( O0 n7 ^9 B
{
7 i$ G+ _6 d! U8 t* ~ break;1 r8 n4 H. ~7 b7 M9 f
}
+ ]% @! \# F+ x6 O, h' z% } for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)/ t6 r7 S0 s4 ?# j Y
{( K2 v6 p' r0 A$ c
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
. m; [$ v7 H% l# G& h( Q/ n! a! b if( !pItemElem )4 P! w3 u; E5 s1 j# U- h+ J$ n" G
continue;
/ Z( {: Z7 ^! s8 S% r5 H2 ]/ i if(pItemElem->GetExtra() > 0)& \3 b/ i. h' N% J* [# P
continue;
# L8 \1 p4 d' x) c2 q if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
: m' i/ z6 k/ s" T continue;
$ g# W/ Q6 f+ m: ?% r: X if( g_pPlayer->IsUsing( pItemElem ) )5 E2 z4 S: v5 r8 U
continue;
* Y8 I0 J& T C/ e! l if( pItemElem->IsUndestructable() == TRUE )
* L) x+ q% R* N: H( s# k" m {+ G8 z) a( I' Y7 B9 N! P1 N; P0 b
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );4 Q2 u1 @; D% T" t! w0 B
continue; K' b$ u" E+ }2 o4 ~; G
}
, f% b* X" V% M0 B( Y g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
9 l3 z, H8 a0 f6 y4 r3 w }8 x$ T# G) M( o( d* |2 c. m& e
break;
i0 a- L; s& K4 O }. u. N5 R3 Z. ^% F$ K/ S
case 1:
J1 o4 |. B2 d+ @" I# _1 q6 w {8 J' X+ h' a" i0 O
//整理背包
8 f k( \7 x1 j0 ^, T4 B9 S //////////////////////////////////////////////////////////////////////////4 `2 d3 A. I. ?; a+ d" m6 v
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
% _0 A h' X0 S- `2 v' [ //////////////////////////////////////////////////////////////////////////% s" O4 S. j$ H# W
//////////////////////////////////////////////////////////////////////////% e, l- p* M- s* W
CInventorySort* pInvSort = new CInventorySort;7 k3 h3 b& ?' ]2 G1 \- d
vector <sItem> vItem;
; F8 m+ [' e0 i* Z! _ vItem.resize(MAX_INVENTORY);//初始化大小
& O* O! W- M. _+ q1 Q //////////////////////////////////////////////////////////////////////////
, K1 \3 D n3 Q% G //填充数据
* T! K y; A9 _/ f5 H for (int i=0;i<MAX_INVENTORY;i++) J( s6 N6 w6 m+ _8 i* u9 u; g! o
{* ^. D6 H4 y3 s# b
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);( F! m- F+ V2 f8 A( H$ h) G4 i
if (!pItemElem)/ y' I' p$ Y+ o# R* s
{" C! E+ k4 t5 o( c& b- C# |
vItem.dwKind2 = 0xffffffff;4 W, j7 o8 R- C2 y% o
vItem.dwItemId = 0xffffffff;
3 V6 N2 T$ b$ m/ |6 p4 T vItem.nIndex = i;/ h3 b. _) e Y8 s
}else {
3 }$ p" u1 U$ a5 w; U ItemProp* pProp = pItemElem->GetProp();0 U+ R! k- b6 d Y, H9 e
vItem.dwKind2 = pProp->dwItemKind2;
; ^; _! E1 _4 X; F- u vItem.dwItemId = pItemElem->m_dwItemId;2 k9 U3 n0 d' ^. i% u: R
vItem.nIndex = i;
& l1 v( o) T' B3 |4 P! u% } }- q) c$ F) B/ Y5 j9 l
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);1 N+ q- e' c. [$ t
}
4 W! \6 E9 u" H& j8 q. |2 R9 k; W! k //////////////////////////////////////////////////////////////////////////7 n( O$ L, W* K) w9 ?$ b5 X
sort(vItem.begin(),vItem.end());//排序
3 [* |4 ]+ C% d. O# ]# |7 p4 D: i& [ //////////////////////////////////////////////////////////////////////////; f, C* t1 t0 N$ D, B: F: r, @
//交换4 c0 J9 m7 t3 h6 f
for (size_t i=0;i<vItem.size();i++)
3 P1 F. ~: i9 q5 W {
" r+ h3 H( K: n+ M //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
. W$ f6 I6 ?) D& {. f pInvSort->Add(vItem.nIndex);
1 l* `0 V: R) L u- n: Q1 g }# N' K9 g, F$ `; v6 `
BYTE nDestPos = 0;3 w2 G' G; h0 `6 X! i' ~" y
for (int i=0;i<MAX_INVENTORY;i++)
$ G8 K( Y' J4 n3 q {% ^# R6 e- r1 p0 e* ~* Q/ j9 i; B
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
8 D) y! x$ {+ d( D& ^ if (pItemElem)% |* C: ]; A+ E* I1 l
{
; j4 ? Z+ H0 l if (IsUsingItem(pItemElem))
- g+ F/ G3 L. K( c {
* V& v# l; ~* x- P; ^$ j9 V3 F //这个位置无法放
4 n0 O! ]0 L- \& t2 {7 h& B nDestPos++;
2 c0 x$ b1 B2 K1 C$ T; [" Q }
8 q. v6 J' m# m1 O8 [ }# v# P& F. B" u; c5 C, e2 r- r C; g
BYTE nSrc = pInvSort->GetItemSrc(i);4 N, B, O G' j) B
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
! Q" Y/ f. O6 t7 Q% K5 h" ] if (pItemElem)) j! Q9 g; L4 p5 e8 F1 s9 @7 y4 N
{* K# K) Y+ k9 n/ S0 g Y; M( A
if (IsUsingItem(pItemElem))
: U& e/ v4 F6 L$ |3 B {
2 A* S* d" o* @! u/ ] //这个道具无法移动,跳过
! A' f1 R$ g9 d- | continue;% J4 ]) b/ l( _1 `
}
2 [ R7 a: \; O7 f) h }else{
' T# r: x9 f8 c //空位置 不用动
F# f. n9 G7 x8 d1 J2 S0 [ continue;
( K5 j4 g# Y$ y o7 [ }
# x _+ h8 \% Q" J //////////////////////////////////////////////////////////////////////////; F. i8 k. D% L9 u/ f
//开始移动
. Q! t7 V0 R8 ?9 D if (nSrc == nDestPos). r& t6 f o! S( Z
{
2 o+ Q+ U N1 n, f% l' C, n //原地不动/ y& N' }( M, e- i$ u, ^: b1 L4 X
nDestPos++;
& j5 B3 m4 v- i7 j4 M continue;
. W W( U; K1 R9 }8 t }
% {3 N$ Z$ O1 F2 a" t pInvSort->MoveItem(i,nDestPos);/ y7 W- q+ y0 h) q
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
' _! ^3 S4 p T I, _/ ?' v Sleep(5);
; s+ v/ q8 X9 d: ~ //Error("移动 - %d->%d",nSrc,nDestPos);
/ ~* o! \+ w" B$ g% | nDestPos++;9 T7 r% q9 X9 h/ Q( {3 \
}. F% G, ]+ T2 s+ |9 I, G6 L& m2 H
//取第一个元素的信息
/ w$ Z1 `: `1 ~" Z( ~7 ^9 F /*
+ ?2 y' q; T, E2 h8 \" q+ l9 O/ [ if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
& J; ^2 z( F4 o, g1 E {
% J5 S k7 M. O3 G1 B Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
* s& D% b+ H3 Y% ?1 E* w2 } g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
6 I) h7 J: J3 O9 {7 j- \ }
" ~6 H% g9 C* c* @) ~1 ^ */
3 k3 ~3 X- t% c, {- z; f //////////////////////////////////////////////////////////////////////////; W. y1 u: E! M6 A( A1 U$ q4 Z' g
break;( U9 r8 C( G' O% ^$ A+ Z+ X
}
" G% e" b' j! Z% \ } , ^ j; i8 A7 V8 S- n3 I
}
' Q0 c( F# F! ]7 ]* A M$ r# Gm_wndMenu.SetVisible(FALSE);+ f% j# k1 G( [5 i& R$ e
" X4 I& {" ~ Z$ J) P o0 Y* K--------------------------------------------------------------------------------------------------------$ X& J4 w% M5 @8 Z: s4 d! D# n5 n
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
" E9 H4 ?1 l- I# l% U{
' X$ H( h) y; k- xBaseMouseCursor();
, X& P5 d8 ?3 O3 v}
/ W- q% z. ?9 M2 _. x在其下添加:( j7 W) ]2 F' C8 z4 f7 l a4 ~+ r
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)4 W# ]! q9 \3 M! b
{, ^1 a* r6 P8 i& X: T; E
m_wndMenu.DeleteAllMenu();
4 l. b: \9 w( V. R2 w K/ }; Z) b( `. Om_wndMenu.CreateMenu(this);/ w7 o8 v6 t2 Y# j
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");, t% u: W: c% F3 \9 g: ]
; q* R# k7 l7 J. H5 }3 N
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
- I$ C9 h8 x$ I O{% |3 ]7 |* j# J+ T$ n% w
//P以上级别才可以删除所有道具
V# n! {5 }1 X+ x+ w m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
# P% {6 v* z6 l}
0 ~) K6 l" @& _. }) |+ i. \+ [& X% um_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );( I6 c* x/ U, W5 ?: k. ?
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );. I% d: k" g! q K, f6 @( u
m_wndMenu.SetFocus();
/ j% S% X, M3 r# q5 M( k0 W- _% x( P+ L}
0 t2 b7 m2 Q0 ]& \2 k7 a------------------------------------------------------------------------------------------------------------
- ?" Z* u: X% p/ p* B*************************
4 e& @8 p* j, j) Z v7 ^* FWndField.h文件 V, \+ B8 y2 y" C/ B4 F- x
*************************- l* T1 c) h2 e4 l. E+ j
搜索:BOOL m_bReport;' n) V6 a- x" p4 c' @5 I3 d; O
其后添加:1 D" H) O0 R# Q. s# c% P0 S
CWndMenu m_wndMenu;
1 O% T+ V \+ W. }+ n搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
# N" q- w! e4 q5 O5 l/ t+ V+ B其后添加:
" M, w8 x8 |$ t3 R+ @) ovirtual void OnRButtonUp(UINT nFlags, CPoint point);
# [) T2 w7 V7 U C& z' Z/ ?
" o& \, b* G5 E# g: u- X
, z- K! j+ X- u' z |
|