|
|
源文件中_Interface文件夹下WndField.cpp文件
\, d5 R/ H+ r搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )0 `& |6 p+ G% ?6 ~) Q% G' ^
b" x" P+ |" K4 {
struct sItem
1 l2 ~0 c" ^# J+ |! A2 `* R; l{
8 ]- M+ R9 S& W ^DWORD dwId;2 ^5 N) m9 l9 u, E# O, r9 _) u
DWORD dwKind2;
6 O. X& C7 u; G" u) ~* A2 hDWORD dwItemId;( K" t4 O; Q4 D9 N0 I
BYTE nIndex;6 {4 i% ~" T) | F
sItem(){
/ T* I( [& g/ v* a! L+ ?# u, R dwId = dwKind2 = dwItemId = nIndex = 0;3 q# H) Z# q- ]1 Z
}
7 R1 ?6 \' H, e& x) pbool operator < (const sItem p2)
" h+ Q& d. ]$ j{
+ J4 l4 X8 T5 i# R; G if (dwKind2 == p2.dwKind2)
# i% V% T: {1 o) j {
1 t4 g2 C% ], | F; } return dwItemId < p2.dwItemId;" w+ z. [0 T9 l' U
}else{* S8 ]9 Y5 a- i J: l9 k8 Y2 y- p8 ?
return dwKind2 < p2.dwKind2;
; r1 P; {9 ^# }, O4 h }
4 [$ t1 c8 A' ?6 J}2 L, y) K; z* I _: c8 }- e
};
" T" e1 v4 l2 Q7 C2 ]* C. dclass CInventorySort
/ F1 Q1 z/ V& H) U# _ Q{
7 p! A: g( h3 U( cpublic:
: k# p# _! A3 t1 z1 XCInventorySort()
8 `0 l, S4 r/ N* b+ Q{1 B, ]' g7 A! ~ r- ]
m_dwPos = 0;' G4 ^9 i: q& ?( [
}/ I- N' F& `9 W( z
~CInventorySort(){}
5 e- O0 k+ ~: O0 L, B9 @private:
+ z7 r# w+ ]4 V4 V- DsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息# D) ~3 |" G! ^% u* Z- i" L: o. }
DWORD m_dwPos;
3 v+ l A2 F5 Y' a7 ?public:
& |# X; Y6 l/ P, I. g( @void Add(BYTE nIndex)( r: @" b& Q9 W5 |6 v4 ~
{. ^; F+ t6 {0 f. i
if (m_dwPos >= MAX_INVENTORY)* Z+ G I5 ?. k. s+ q9 z6 K' i, j, ~1 O
{8 l+ E9 d9 _! ]) x
return;
; T5 [8 `" B, P; n* ]& m0 U }' a/ \6 T1 ?5 V* J1 D
m_Item[m_dwPos].nIndex = nIndex;
1 H& b/ ~* u/ t/ g* l% Q m_Item[m_dwPos].dwId = m_dwPos;
. L5 E5 b" T# p! E2 m5 d m_dwPos++;
% `! y. }' N9 a6 \9 s}
+ I- n. Q ]& t/ v+ DBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列$ x `+ r2 \) g9 _
{; o' b' v0 s3 r. J; b- w
for (int i=0;i<MAX_INVENTORY;i++), s: u% ?/ p; J+ ?0 x
{
( y7 D2 Q# G. j1 F. b2 K if (m_Item.dwId == dwId)
4 I( F* {" e. L" e {
+ @) k+ P. e* h2 Q( f: ~$ y+ X4 V return m_Item.nIndex;
# `- h' c8 D2 i$ V" B2 \ }
! m8 o( A5 `/ W }
. M$ V. B8 }4 }: e5 X return 255;. {) W' }9 }5 Q. I7 X
}
7 k4 M/ s9 }( |$ |6 ~void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置/ X' }6 m% @) j; |3 F
{
* L3 g* F( v4 w BYTE nTmp = 0;
. K6 Q! ?- ~; \. K3 a bool bDest = false,bSrc = false;
4 S- y: p4 q) P for (int i=0;i<MAX_INVENTORY;i++)
. B3 ~( M( @- t8 o6 B z {# H* Q% @& `2 i, e% n
if (dwSrcId == m_Item.dwId)& r. C5 b9 i2 v' g
{" j- O% d# C' I) {% K4 m
//id相等 则 改变对应的dest和src
3 B# O8 L7 L4 I I W nTmp = m_Item.nIndex;
- N) A& y R! g9 b m_Item.nIndex = dest;! i! F! [' I' `6 x. |" f; w
}! p# O3 D, C. T8 t- @/ @3 |
}
! t/ Z8 L) ^6 p: ~ //临时数据保存完毕,交换开始
2 u, w5 E. W Q% ` j: j% a3 H for (int i=0;i<MAX_INVENTORY;i++)% Y4 T& r0 L5 @
{
7 q5 H8 m5 s1 r' l5 d0 R1 n/ h if (dest == m_Item.nIndex)9 S& m& P: y. P( r1 B. R9 u
{& \; W7 p6 D, C0 A# g
//id相等 则 改变对应的dest和src
5 E# x) C( {, H9 w/ ^- X( F# ~5 M m_Item.nIndex = nTmp;2 y3 S( r$ c3 \8 }
}
4 T) B/ J! Q8 r8 z7 {/ f' V }
- \7 j8 M/ w1 M4 q4 t$ K}
, G+ V# K) \) f" y};
8 n4 f9 Q! a) r% D# P-------------------------------------------------------------------------
; h1 h/ \8 |5 _3 D# R% z依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ); `# W6 d7 c: g" @- E
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);7 D) s7 l& A, P3 H% c- c" j
紧靠其上添加:9 ~/ B5 o/ N; ?$ K
if( pWndBase == &m_wndMenu )
{) i, X( H( C5 v- t{
+ a Z% y, R6 p% x6 v( q# j switch( nID ), l# o; [/ o# w7 @
{% B+ S" E& [6 Q1 t" h L1 W
case 2:
% I( g5 A* a4 ]! B: B" M$ Q @' Z {) K5 P1 [8 ?* p: T
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
) j4 Y; i; O W; B; i( Y+ r if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))$ B) Y% I( s: l0 L" V% \1 ^
{
, E+ K( J( T# C3 [# H" d break;
, m5 |' R2 s% D* l: n4 X }
. O' @" a$ @9 E+ P, w- G4 t for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
2 ^# Y% b+ h! F5 o {/ I0 G" }2 b1 ^; W3 x( }/ x: [
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
2 ]5 M/ j4 n: q5 R# ~' k if( !pItemElem )
7 J7 d: Q8 R0 z# A4 \; B continue;
4 A8 _) }( Y% }" o, _1 x' q if(pItemElem->GetExtra() > 0)
) v1 _1 E! `4 n: D& P continue;- E& P! e8 |2 U$ B6 R4 D9 ~
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) / ^. {/ z l+ b/ P* ^
continue;% a6 w. A h3 k, u8 L; z
if( g_pPlayer->IsUsing( pItemElem ) )4 B3 R+ E2 R6 y& d
continue;
6 |. A) ^, k7 p- [ m# r x if( pItemElem->IsUndestructable() == TRUE )" |' i0 o. `& G) i7 o/ c* b
{0 T9 g& R* A$ k( i5 ]8 \4 B
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );" e. K" _8 X' [5 N( |6 X
continue;
+ o% s- g' T7 H$ p4 Q }
# t5 ?) T$ ?3 f& k. L' _; G0 X g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);; Q0 E: w' p, Q! a& L& o
}
( K" |$ l9 D2 t: ~3 ^# C9 m0 D. ^ break;: u+ b- G4 ^9 ^1 J/ I$ f4 G9 C
}
& h% G4 W+ g1 q case 1:5 f% `& M) a0 z; B
{
* ]; m) j3 g# i5 B //整理背包5 @ ^. `* N* K- ] `
//////////////////////////////////////////////////////////////////////////% O) k. G$ Y7 r# H- f
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );( K' [! n' b/ ^- a2 a
//////////////////////////////////////////////////////////////////////////
0 z$ H; i& L/ v5 a+ I/ M7 [' N$ i( W7 H //////////////////////////////////////////////////////////////////////////
& c* ^% U( D% Y4 y0 l+ t* {, F CInventorySort* pInvSort = new CInventorySort;9 I8 E, S7 i3 v5 t
vector <sItem> vItem;
/ E+ |7 P2 h; G& T/ z vItem.resize(MAX_INVENTORY);//初始化大小
5 p- [" y8 s5 Z5 m //////////////////////////////////////////////////////////////////////////- H; x, I# x5 |6 _9 T7 b
//填充数据* M2 [7 E; x; l# X7 N
for (int i=0;i<MAX_INVENTORY;i++)/ N* ^" I8 q2 w: q; {8 T9 o) G/ m
{
' e; G: i# v+ Y% n& N CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);) O [( E8 P. c. ~
if (!pItemElem)/ R5 E: y- m) A. P
{
* Q/ m! J& L8 P% C+ w' ?! { vItem.dwKind2 = 0xffffffff;
5 q3 V+ N2 z; V5 r0 k vItem.dwItemId = 0xffffffff; e% C: l" ~- @( X" ~
vItem.nIndex = i;
4 m6 j3 U7 H5 X% D7 |: d' P+ D }else {
, i$ z" L6 @2 E) s1 I0 J) e ItemProp* pProp = pItemElem->GetProp();+ }; ?8 H m* ]. J; \! L, H: {
vItem.dwKind2 = pProp->dwItemKind2;
" R& u. J2 q7 T# n0 ?* x/ [" F vItem.dwItemId = pItemElem->m_dwItemId;
8 \2 e/ c, t4 e/ O3 j vItem.nIndex = i;. W1 q2 {/ r* v6 q0 _ | G* D
}- Z3 y7 r+ @ n) A
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);' j0 [& ], H8 @. D3 g; G
}8 W9 D+ J0 T; ^
//////////////////////////////////////////////////////////////////////////7 K" W2 j" B; p; v
sort(vItem.begin(),vItem.end());//排序
9 u, v v0 P* y T1 t //////////////////////////////////////////////////////////////////////////
8 E; ?8 ]8 t/ n1 p1 D( j* P& Z! u //交换$ k3 j% V0 k3 M+ O5 n/ h2 ~. w
for (size_t i=0;i<vItem.size();i++)2 T4 g! \( U7 R5 R( v0 x
{, T$ I8 g4 y9 q6 q$ j) x
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);4 g- m1 a6 G1 p+ O2 X
pInvSort->Add(vItem.nIndex);4 Q. @5 B \" o1 L9 V& B2 }
}
8 Y1 ^4 ?1 q: j" d- f3 w BYTE nDestPos = 0;5 e7 o5 r% ?. x& Z! U
for (int i=0;i<MAX_INVENTORY;i++)) [/ E! @) S9 w) T, f! y( \
{" A# i+ B% K- B9 G' m, c+ ^
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);7 [* j L; B: g0 q# D( [5 S+ G0 N8 J
if (pItemElem)& O& _. ?+ r% u9 l# i' e/ \) z
{1 b- O7 F5 w, Q0 k
if (IsUsingItem(pItemElem))
7 j+ X5 n* ~/ m$ z5 z# S( z {
$ y$ S% ?4 X5 Q+ M. c' Q2 e8 W; u //这个位置无法放
+ c0 y9 T: ]+ F/ | B& H) w- O nDestPos++;
0 j# |' _9 a" k% D }0 ?* s4 ^' W. V; i! H( c& d
} n3 J" F7 S# H$ Y% g/ F
BYTE nSrc = pInvSort->GetItemSrc(i);
" P: m& V8 M2 ]) {$ D- }* X( X pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);! ?& a. M! U; u" P z$ w- C( w
if (pItemElem)
0 A! G) z( k$ S# z: ^2 c$ U& T, C {
; o) H, c' \ R l1 l2 S if (IsUsingItem(pItemElem))
8 P. i$ V+ T) C/ `. b {
* E& ?) B2 x# i2 ~ //这个道具无法移动,跳过
! ]1 ?/ r a; z y7 v6 y continue;
7 h w! e) d; B' I6 ?. P& j5 d* d9 v }2 y- e. i: J* U' r9 J! l- ^! R
}else{* ?1 e7 r* N: ?% W- q1 V9 `' [
//空位置 不用动# P" |/ }6 k, v+ ~( H1 m5 J* D( i
continue; H$ f; |# ^+ X; f% F
}
9 q( F& k% J% r //////////////////////////////////////////////////////////////////////////
1 ~2 v: ]* i1 [- r3 ? //开始移动
" V' A& b; L8 W+ q6 s if (nSrc == nDestPos)2 i5 r s$ W4 @. n0 [
{
& c0 @2 Y" ~0 R8 S( K2 l //原地不动
) {8 ?5 c4 }0 ]; P! [+ _3 E nDestPos++;7 e- W. k/ y- [! m& A7 o
continue;2 y7 v5 r8 K/ b0 \6 ?% C$ J
}6 _6 G. L: F1 ?% G q& B" f
pInvSort->MoveItem(i,nDestPos);! @: N: s4 o2 {
g_DPlay.SendMoveItem(0,nSrc,nDestPos);8 | Q' M7 e3 J7 \
Sleep(5);3 w# K4 m. Y5 k% e- } V8 g+ v6 F+ P
//Error("移动 - %d->%d",nSrc,nDestPos);
, u) @, t! C2 \7 \ nDestPos++;8 i0 m3 q! d4 c
}5 \% U \7 j* K7 U" z- A8 |7 y+ d
//取第一个元素的信息
) s. a8 z. x& c% W. g /*. t. A- U, K3 H1 f7 T
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
& H- X) ?( I- S. X0 h' o I1 O {7 ^6 G( U: \! B
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
0 v* N" q. ?1 R* E g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);9 f. k+ S% J4 C m
}# h% n% h( G: H& p, Q9 l K
*/0 l) ^( M6 m) `) c9 ]% A
//////////////////////////////////////////////////////////////////////////& f$ t3 J" S# Z' ^0 [1 A
break;2 g( j4 O0 J9 B- |9 |
}5 u. o8 N( z6 c! s) q1 A4 r2 v
} - W9 x$ {* A: |9 H5 ]
}
7 h/ }. Q6 c$ Y8 v$ am_wndMenu.SetVisible(FALSE);/ Q7 k% b W8 s" S5 V. [2 R
; d- W' ]; C* b5 S4 m2 `
--------------------------------------------------------------------------------------------------------' ~( g8 [/ z( s
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)# `+ K4 \9 ^/ z
{
; ]8 j/ h( h' PBaseMouseCursor();
+ A$ n* q+ S" v1 P5 Y! k3 U0 H5 B}
# q1 C1 P* j! V: D在其下添加:* K1 Y" \8 C( Q7 ]& X/ Y$ m
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
" e5 v2 L& N4 l! \. t1 P, z{. U9 C8 ]0 |( o
m_wndMenu.DeleteAllMenu();% j; H+ w9 V) Y1 Q- A
m_wndMenu.CreateMenu(this);! ?4 G: t* L' Z6 W0 h$ H
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");! _, a; p3 X5 X$ r3 ]. n2 b5 o# _
2 d% J$ U1 P3 ?% ^- ~8 T
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))1 L4 I/ [" V5 C; F7 F0 \
{; s7 O7 t- o; R5 x- g( q3 [
//P以上级别才可以删除所有道具
5 O1 ]' Y. q( M4 e$ _* L# P m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");* |) v' O% V4 z9 H9 t
}
# E) G/ A7 V3 Q3 W+ |m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
1 n. ]3 K- J" r: }m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );0 I3 M+ z: o0 N) q, a/ w6 v$ y, ] O
m_wndMenu.SetFocus();2 E, ]: d5 K* B* a; J. s
}% |# Z" X0 }! b& X. ^- {7 p+ A
------------------------------------------------------------------------------------------------------------8 Y- E& } c1 ?2 D2 q- Z! J
*************************+ B, O1 m3 g2 f4 D, C& m8 f& c/ U2 U
WndField.h文件7 y1 i$ G/ w/ o. H- r1 d
*************************
. b4 \% _& e, _% ]) M- B& z: f搜索:BOOL m_bReport;
8 I1 v/ v: ^7 v+ I4 d: W) G4 Q其后添加:
7 {) B' m4 Q' L. B7 eCWndMenu m_wndMenu;
1 ]) g& q! `; n6 A+ q; c5 ]搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);* x/ z1 O" R4 [& G
其后添加:
/ X9 a7 z- M% V6 p; bvirtual void OnRButtonUp(UINT nFlags, CPoint point);
% a, H2 ^# Z0 c4 |
6 r0 j: ?" v4 F6 Q! t4 ~& X* E7 \: b
|
|