|
|
源文件中_Interface文件夹下WndField.cpp文件
( [4 }# _ j+ m9 F1 e搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )" Y, `5 X8 z: x' S7 N2 L/ `$ s" h
+ F& H( k6 _0 q1 gstruct sItem
8 V3 {$ C) ]/ S: H' K n3 e" o. b{
) C8 ]0 I( j2 u6 K2 m1 fDWORD dwId;: s9 l" a# R' U* W2 P
DWORD dwKind2;
* x7 `9 b; V* P' }% z ODWORD dwItemId;* M6 m* Y. Q8 @
BYTE nIndex;
) t- P' d, V9 C' a+ m9 G8 hsItem(){5 g5 D6 Q+ M& w7 w) |5 c
dwId = dwKind2 = dwItemId = nIndex = 0;, Z* _: m% ~+ E
}
* Z% B4 |/ y! \4 c. z9 Y( ]bool operator < (const sItem p2)& F- z& l1 Z; R6 e
{
; N. X z/ U( u% R if (dwKind2 == p2.dwKind2)
" h% x; a2 L* M! W" M* {8 O0 x# V {
6 |: ~$ R9 j; _1 U return dwItemId < p2.dwItemId;! \# e- h- }, Q% y8 K
}else{) f0 l# n: J8 C% i6 M# b2 i& b
return dwKind2 < p2.dwKind2;+ l) s% j2 v# w1 x: C
}9 [( {! Q) h1 m+ C( ]+ ^% D3 n7 i9 t
}
O( o5 C$ u* Y( P$ y; O};
' c$ h! j ~) I5 Y8 yclass CInventorySort
, Z* i/ {5 X6 a, {- A+ N/ ~{
; n. w! D! r+ e4 o, A; D0 Rpublic:
+ n% P2 g, k X* l3 v+ X( j0 k: CCInventorySort()$ c3 |- ^4 o2 [
{( I; B# K1 J! v; K
m_dwPos = 0;5 `, o# i9 D$ X8 K) W! f3 R
}4 D. Q, H: A" d, }& p
~CInventorySort(){}) b/ @& q# d, i' |' t( d
private:
! K: i: R" c( k% g% ysItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
4 n9 F/ J# i6 X4 N2 {3 xDWORD m_dwPos;
$ k" f/ C- Q% [6 _! Opublic:1 e+ L- @% L. u* @' L9 S
void Add(BYTE nIndex)# O; C% O/ M6 \2 K- v9 X1 M
{4 j3 A: ^9 Z, Z0 M
if (m_dwPos >= MAX_INVENTORY)
! y9 X/ `5 l7 U: J {7 J0 I) R, F7 O" A
return;
0 L, I9 \7 }. c* ^9 @( { }& n, C3 U: c& v( G/ V1 F9 L1 T
m_Item[m_dwPos].nIndex = nIndex;
) Z' G3 d7 h4 d! v6 _ m_Item[m_dwPos].dwId = m_dwPos;; H% T; t; G* _
m_dwPos++;
, q. K6 Z. Z5 ^8 L) C/ z9 u1 X. d}
& m- N9 R2 j! y9 F3 p L c& sBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
% Z; f) }( _2 W; O& E{
4 }1 ]5 S& o5 ]; _* \2 c for (int i=0;i<MAX_INVENTORY;i++)9 R- U" B: @$ u) A' a
{
5 U% t# X8 Z! F$ m if (m_Item.dwId == dwId) D6 q' A3 G2 E2 {" T9 E" z, C
{6 S u( S4 ?& |2 t3 \4 V
return m_Item.nIndex;
# }: J6 {1 K1 v/ k2 d {% F5 a" G' f }
$ q# f; G q4 h% |% k }& X( @; y; A$ B" ]7 A/ U1 Y+ k
return 255;
+ o$ I7 r' B6 O' l0 T3 i& Q}
" X B8 |: n: p! g7 Svoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置8 C w0 r0 Z+ g D' v6 X
{: W; n' h' x# E# d
BYTE nTmp = 0;. [4 r/ T7 g: z) z" ]
bool bDest = false,bSrc = false;) |, Q: }2 ~3 s
for (int i=0;i<MAX_INVENTORY;i++); g9 N" K9 P( t& q; V2 S) O
{
: K% W5 p+ I; ^3 u5 z; w$ a+ I if (dwSrcId == m_Item.dwId)8 W$ x- \8 K7 `0 f. x
{
, V6 F! u1 \, ?$ C+ d2 i //id相等 则 改变对应的dest和src% B L: G7 e- N9 h
nTmp = m_Item.nIndex;
" P8 v: q1 q/ m8 `# g2 K m_Item.nIndex = dest;! r; `" ]" X8 t
} l) R; |0 ~, z9 @+ W _7 J
}- \, R5 M4 ^0 n- R9 e- v
//临时数据保存完毕,交换开始
, n* U& R& {* p# X9 T' o+ I* t for (int i=0;i<MAX_INVENTORY;i++)
" j( U& A; F6 @ {
$ A" x1 T. b1 c; E* \ if (dest == m_Item.nIndex)) s: y z$ w" T0 A' x: K
{/ _; C& V1 s/ e. X
//id相等 则 改变对应的dest和src
! w, F+ |2 A1 V5 H- x( Q* t4 k6 U m_Item.nIndex = nTmp;- `; `" o8 e% s6 R9 M8 j' [: i
}9 r2 A% r0 T/ [9 q# W8 ]) v. _9 j
}
7 P O4 m1 m& y4 [! f}
' J; J# `4 B2 ~};# P& q7 {6 f+ |& b
-------------------------------------------------------------------------2 i, y& o: Q3 x3 B _8 S* L3 Q
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )/ }: `$ Q; N% o6 _
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);% ]6 T% c, M! B
紧靠其上添加: F1 \( e3 r* h4 }0 @5 G9 P! J
if( pWndBase == &m_wndMenu )
$ L8 W! y; j# M{
2 z6 c$ D' O1 {3 X8 F; I switch( nID )3 w4 I' Q0 |# s" w# H# k; m
{* }. a3 `, d" r. [
case 2:2 {7 `- D2 C- |* g6 G
{
& |0 I& a( B" v! z& K. y& H //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
* L8 l3 b3 |% @, b/ h( R if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
8 ?9 Q6 U& b: I1 N- ~3 p; ^ {+ ]+ Y) @' _7 W+ \) ^# L
break;- B; k3 o' D# Y& e
}* {1 n/ S4 p l- C E% A1 s% A
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
/ G) ~' _- d* d4 ^# B: X {
2 l- q7 `0 g8 u2 J' }3 K0 x CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
8 @+ }, z6 V4 f if( !pItemElem )4 V4 g8 L1 V% p
continue;
1 ], G" j( ~5 f. V3 j) H! t: R if(pItemElem->GetExtra() > 0)0 G2 F. B6 A) x: ~2 ?5 t' Q
continue;, V2 Z+ L8 B1 T9 a# b7 D2 `
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 2 g8 d; V. g2 x r2 K& `# N
continue;
! G `3 z, K f/ E$ c% d4 N if( g_pPlayer->IsUsing( pItemElem ) )( v/ K m) u2 d& g! P4 `
continue;1 S/ F+ T- W1 {6 @5 U
if( pItemElem->IsUndestructable() == TRUE )) c) b e( G+ P+ c
{
" j c9 e: b0 A& ]+ n) l; o$ c g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );( C: _$ p# A5 l
continue; }* t/ u h1 b* }% A0 Z2 |* i
}. k8 V1 Z0 i+ @! Q; A. M: x
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);5 H7 j0 b! L: u9 I1 f
}8 w m; \+ ]0 `
break;
* q @/ s# v, N3 \7 f, e; {# k3 m) a }
4 o5 O$ ^+ j! F; `+ T2 Q/ q. C case 1:% w* w' [( G6 Y' |( ~: C2 V
{
' h: r' f" _6 } //整理背包; M: Y- S. P7 { q1 M k6 m; f
//////////////////////////////////////////////////////////////////////////, r4 R6 M) [% v4 F3 v' e2 Q
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );; G6 [6 w% q7 e2 X: ?
//////////////////////////////////////////////////////////////////////////
& I3 G J7 y7 P8 |/ }0 m //////////////////////////////////////////////////////////////////////////
7 j" ], Y' `5 S" G( _( k CInventorySort* pInvSort = new CInventorySort;* P( E; D3 z5 _# Q$ L/ O& C7 @$ E
vector <sItem> vItem;
. N; K8 A% _) x7 v vItem.resize(MAX_INVENTORY);//初始化大小- C# X) y6 K. E/ d5 w$ L+ E% d
//////////////////////////////////////////////////////////////////////////
3 B3 Z& W; U0 V+ d* o. y& ? n //填充数据
& G0 f0 u4 t& W+ ^ for (int i=0;i<MAX_INVENTORY;i++)
8 d: h- O0 I5 h9 ^9 i8 j1 p$ T& j7 H {9 d$ A1 h, e" i! u
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
6 _! A: N/ a% _7 [ if (!pItemElem)
& Q/ v% o- ?$ j" `% N; f* ^ {
" s4 }3 p& Q! u4 ^6 X3 k* {. x# l, n vItem.dwKind2 = 0xffffffff;5 f0 `! L h, d p* `' s, Q1 A
vItem.dwItemId = 0xffffffff;! s4 ^ m2 I3 k. M3 u6 _
vItem.nIndex = i;$ \, c" j7 g2 E4 z1 A
}else {9 _, M9 X( G% O1 e* n! C: f
ItemProp* pProp = pItemElem->GetProp();
9 \7 j5 x3 i- }, l' ?8 W6 @, \4 j5 \1 W vItem.dwKind2 = pProp->dwItemKind2;2 |: r! |/ x5 d
vItem.dwItemId = pItemElem->m_dwItemId;: }+ ?0 }$ o; ^1 M3 B B6 m
vItem.nIndex = i;2 u! h' k# J8 V: w: n6 }5 C
}
% P5 _* t# C: @1 o" N, v9 f //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
0 v( ^; Y" G! Q8 P% N% k }
+ `2 w$ j: N0 C* I //////////////////////////////////////////////////////////////////////////5 L5 @6 r4 [5 k. X' e, f& {( V
sort(vItem.begin(),vItem.end());//排序
. ]8 U! H; y: u) i% x! ?3 j //////////////////////////////////////////////////////////////////////////' a, p4 h8 Q& D5 F; e4 t7 ?
//交换2 h% p0 Z0 m7 F2 K9 b! N9 N
for (size_t i=0;i<vItem.size();i++)8 Y9 r% L( ^/ ~4 S* }2 k
{/ r% h8 |- @/ R" U4 A/ q( k+ C
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
6 i' \( `- o2 N3 t4 w t# }# d$ G pInvSort->Add(vItem.nIndex);
3 @* _$ O3 ~1 C5 b! p }
2 ^% {# e/ B: G5 [8 b. F# [2 n BYTE nDestPos = 0;# m1 s0 p, s6 B1 k9 ~: x
for (int i=0;i<MAX_INVENTORY;i++)
4 C% K# k- F# g* _$ ]: b {6 ?8 M4 Y; a% L/ M
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
1 I4 e! l+ L( O a if (pItemElem)& g0 T# q! T, H9 h
{
( o' K f" p9 u, t& E) k' D/ r if (IsUsingItem(pItemElem))9 ^$ R- I5 f4 n' r
{
3 l# p2 g5 C- `, T //这个位置无法放1 j1 Y9 O. t" j. O9 D/ e! \
nDestPos++;9 t ^! a/ ]; J2 Q: l( o8 V- }
}2 }' f+ q* h% a
}
9 q4 M: c- s% z' \ |2 z BYTE nSrc = pInvSort->GetItemSrc(i);
, K. S$ d, w# O ^7 G0 x pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
5 d' b! V( a0 m7 X* P: a if (pItemElem)
! o* K, z+ g- B {
1 o8 i0 h- a, m( Y% D6 J5 f if (IsUsingItem(pItemElem)) o* g2 J0 U, O' E
{
" a5 @/ ^4 ~7 F( U5 k/ r$ p) w/ | //这个道具无法移动,跳过
6 T0 x9 d/ o- S4 X" ~% ^: T% x continue;+ I8 Y; M1 ?% K1 |' X4 D' \
}# ^4 I, j: d2 @6 ~# L
}else{
7 L6 U. @% q- \1 K0 o e7 A //空位置 不用动
+ ^! z ]8 O5 E( f" \( x continue;
1 @- |/ m9 h L y% i. a; u F4 g }
4 m, X+ \, A7 v! z2 _ //////////////////////////////////////////////////////////////////////////, v* [' t( l3 f) f( {
//开始移动
1 U* r1 k) L2 Z) `, P. @ if (nSrc == nDestPos)
7 p! Z" [' ?% L9 D% V {
) D' @6 Z3 f4 n# _$ |. ? //原地不动+ S# G5 w( ~+ a& Y k0 j* u' J8 X* `/ p
nDestPos++;
2 G/ {5 J0 m: q3 o( Z' [$ h/ z% [ continue;+ Y! B. l' n, ~, V U* V
}
! c! t) Z! S0 Y: Z2 U" f' i+ a pInvSort->MoveItem(i,nDestPos);
# z; C' K9 D Q* g, M0 {* y- b" R g_DPlay.SendMoveItem(0,nSrc,nDestPos);
$ F' [" h) n( H; ]. v Sleep(5);
" M* d! U2 i$ m! B //Error("移动 - %d->%d",nSrc,nDestPos);
]. |$ Q. S9 e, Q* H9 L0 b+ V t nDestPos++;5 X( S1 D2 n. x) f. U2 c( S
}
- p3 j" {( w6 f //取第一个元素的信息
& L# z B) Q" q2 K /*" q a# k% R- P9 G2 h. v
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
! l: o( z, N+ Z5 S! ^% H4 \8 o {. E7 J) F1 r* Q4 _
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
1 ~' T7 ^5 q$ E$ P/ q. p; g; P g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
1 b# |5 {9 t. Z% L _ }* e& C. y$ {8 I
*/
% w. p8 B. D& C1 t3 z //////////////////////////////////////////////////////////////////////////" k9 P1 f5 o5 A+ p) z4 q$ }
break;
8 B. t$ D0 Z6 x }
# _ V8 x; ]; M } / I0 P& m8 E1 s4 P1 f
}
: s" e. N/ V* H& ]5 q' em_wndMenu.SetVisible(FALSE);( c# [9 e- b L* m8 h( T- D
0 A# z" s4 A1 s: x Y' v--------------------------------------------------------------------------------------------------------) K* M' H2 G7 ^, ]$ o* F6 ]/ v2 k
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)3 L& m* q+ h+ T) V4 E
{& R8 ?' C1 f3 d' v
BaseMouseCursor();6 ?9 ?: o, M3 o" {7 x2 B+ v; G& E) T
}% K2 W' @- G6 a$ n
在其下添加:
, d" m+ b5 x8 t9 Pvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)6 [' v3 D& t. V% E: K: I
{, F- g6 m" o4 Q, D% Q
m_wndMenu.DeleteAllMenu();
4 E8 ] c; y) Am_wndMenu.CreateMenu(this);
" T. L% B: l3 u- Om_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
7 ?9 Y& G7 P6 X5 I0 d; E, {0 R
% H. G2 L6 W; X+ ~ S0 I: uif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
% l( D, |) t; B8 _* N, c{
! T+ w- |1 j6 `5 D1 b; G //P以上级别才可以删除所有道具3 }; l0 c) l3 E7 x' r
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
9 E& x6 [1 ~9 D0 p}
' x' o$ C" b7 F$ v) C+ H' pm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
8 T6 ?9 o- W, D' I* t! om_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
1 m2 m0 j" S$ u6 x( r1 q9 Lm_wndMenu.SetFocus();
/ w' \1 W" v+ S2 z: R}9 f _* A8 l& t7 K2 a
------------------------------------------------------------------------------------------------------------
. H5 t( K T ]*************************. o( K" `1 u5 v; t: v$ t
WndField.h文件
6 x. J! u* y: r*************************0 k$ E# c" x( d& a C: F* \
搜索:BOOL m_bReport;
; R8 p3 b- @" {: A其后添加:
& f6 `8 {2 M- s/ {% w4 }+ A- CCWndMenu m_wndMenu;
3 v S/ C9 ]5 {搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
, L* D( l5 [8 U0 D- m其后添加:' x" `$ j% L! S- b# C
virtual void OnRButtonUp(UINT nFlags, CPoint point);$ S" V4 K' H8 u# C. r+ P( u& ~
0 l) Q2 h- d( j
3 S- M" R" |) @5 ]
|
|