|
|
源文件中_Interface文件夹下WndField.cpp文件
2 J. |0 [/ E0 U8 K' Y搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
{: \# ?# s3 p, f* x9 y' S( |0 r/ J4 o7 _
struct sItem
7 c7 d+ G2 n/ ~/ O! W1 f$ X{
$ I& S8 n [2 Z4 C3 }3 T" [DWORD dwId;
, [) Y3 @% _4 v6 s4 J! WDWORD dwKind2;% b1 b: x' ~; }8 j
DWORD dwItemId;
1 u5 v: E6 Z) l, D' }( K6 a- GBYTE nIndex;: E* c+ O, ]+ \! |+ }$ w3 L& F
sItem(){ K$ m8 F, ]- T
dwId = dwKind2 = dwItemId = nIndex = 0;
$ V# Q1 Y7 K* n* f5 T}
2 A- ~+ n2 T2 L, s# E- c- }; Nbool operator < (const sItem p2)+ ]$ B8 B. n6 t2 ?% L/ V
{
% x$ R* k6 r+ k0 U& g; z if (dwKind2 == p2.dwKind2)7 i6 v* L: L L
{
) R6 |, X& R# d3 c8 i3 X) k return dwItemId < p2.dwItemId;
8 N- o' {8 G f1 F& V, G: ~ }else{8 `$ [9 H/ C. T) [4 ?- h" G6 A
return dwKind2 < p2.dwKind2;
B0 U3 [; n- r+ Q, g; Z. \/ ^) Q4 I }
* c1 x0 [ d3 ~7 L- ?9 j3 v}- m6 h6 K; P |/ f
};
! \9 e. {5 L! j8 V/ F) Wclass CInventorySort. l- S! W" ?( g0 T
{5 y! m+ Z6 R' s: X
public:
$ i( {3 ^! c3 _' v$ v. ?, WCInventorySort(); E p4 G& P- [9 [4 ]
{* c0 r# E ?) t6 v& D
m_dwPos = 0;
* T' A2 _6 | _* @* N+ _$ H}
. g' G7 | f5 |7 O8 x' j& h~CInventorySort(){}
) @& v) e/ I% S4 s8 Rprivate:, i5 V: a* w- v" w- I
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
. ? Z' J! t1 ]. h f$ V8 YDWORD m_dwPos;
3 Z( S0 d$ d+ g9 p& npublic:
; ^5 e0 K1 a9 T2 C" {, }void Add(BYTE nIndex)
% {; G; @% p x{ `9 i: B* b3 @. X) r
if (m_dwPos >= MAX_INVENTORY)1 c' Z5 ~( x2 h& Y. o" j- g0 Q
{
# ^ g0 q. e0 E. p) j return;
2 b; @9 i* u. v/ x4 d/ l7 N0 ^ }8 @! s* d4 t' O6 c7 v x
m_Item[m_dwPos].nIndex = nIndex;
1 U+ u" ?4 t! l+ \( l m_Item[m_dwPos].dwId = m_dwPos;3 m9 I& T# ~" k& f" O
m_dwPos++;8 [* n! H$ z3 N E+ a
}7 {8 F4 c% C' o+ `# B6 u
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列$ `6 n" X9 X! J2 J; y h
{- k/ i1 X# U' z' M
for (int i=0;i<MAX_INVENTORY;i++)
5 j1 j2 l- F! t7 s- p0 c {
9 N0 ?6 I' E5 M9 O! F if (m_Item.dwId == dwId)0 M# q$ g% \7 W# C" b1 n
{; e ^* [& g7 c: ]+ T" } b% t
return m_Item.nIndex;& }$ ~) @0 H; N6 v" s u
}
6 ~) I- V, M4 ?5 o }
/ ?" S" b ~5 R2 ^7 m0 o, H return 255;( X4 ?( z1 \- m& Z
}4 L7 W* j/ ~* t$ ~2 O
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置2 n' |5 F3 a; l$ Y
{
6 H) b* O1 b% C1 [+ _# e( c3 U$ { BYTE nTmp = 0;
" Y, i- w8 `: V. f0 W bool bDest = false,bSrc = false;: _1 i! {4 r1 ]4 P$ z
for (int i=0;i<MAX_INVENTORY;i++)! l7 G) t. F0 c6 K$ o
{- s: H' a* Y4 L
if (dwSrcId == m_Item.dwId)
8 n7 [2 K; `: V3 c, v$ z& q {
( q2 [8 q0 r5 I6 B8 L; J //id相等 则 改变对应的dest和src6 T4 K. j* d; f+ x9 J5 T
nTmp = m_Item.nIndex;4 N0 [# `7 Q& v y. q7 i5 w" G6 }8 ^5 j
m_Item.nIndex = dest;8 x3 R" k- [6 f8 p4 i4 V1 T
}& a% `7 c7 Y; J$ r
}
+ z& j) v0 b( w+ A2 g' T //临时数据保存完毕,交换开始
1 V( Q/ U5 @- p# T for (int i=0;i<MAX_INVENTORY;i++)+ h8 D- S0 y+ V7 {0 |0 c1 ~; e
{
2 g$ ^1 K* F' K0 O6 m0 o* b if (dest == m_Item.nIndex)' {0 G3 e) E3 { h' X! s
{
9 o! }7 B9 A* Y+ ~ //id相等 则 改变对应的dest和src
0 \( q9 W- ~5 u8 A2 C m_Item.nIndex = nTmp;: F @8 }. A' L v1 [8 }6 i# U
}7 R5 x5 E+ f9 w# A; p% q6 u
}
l& ^$ W" z! T/ e) [} B R/ K. W- c" U# h- i
};
' z4 b+ X% y7 V. o-------------------------------------------------------------------------8 S6 V! J/ W/ o! b
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
0 L' z$ ]5 A2 {7 r搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);9 h( q2 {" A- f; E7 k
紧靠其上添加:
2 {( Y& w+ C8 S7 d& H3 v* E/ _" w" Pif( pWndBase == &m_wndMenu )0 G0 u' `* w2 c- H) [* V1 F
{$ L3 |2 M1 \7 y0 ?+ Z
switch( nID )
& @+ w) ^, |8 Y9 ~ {
! {: ?* i9 w' t9 |& U% g case 2:
, J$ M. U/ n! P7 B: ` {0 s9 _2 H- L3 [0 a
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
! F2 P/ V' C; O+ O) w I if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
2 k1 o) s/ j; c$ ^( J {* b6 [# W8 c$ w+ { M
break;
; [$ G. f! u- G+ U! O/ r3 i }/ ?" S/ W( {3 h- F# D4 I0 X
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)3 p* ^: @' F# {3 O; V" J& c
{. q/ y7 g% h% Q: f9 u8 w1 ?
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);+ M6 S9 m; a" X( _
if( !pItemElem )/ V, B: B0 w5 R$ |
continue;9 i+ e' e' Z$ i( O: |; o) l0 L, \
if(pItemElem->GetExtra() > 0)
% }( H) I/ ^5 b- ? continue;
9 d) Y4 h/ E1 `1 Y& ]4 E/ A9 K4 P if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) & I, p7 w) K0 L; U
continue;
0 c, p" |6 O8 [( M if( g_pPlayer->IsUsing( pItemElem ) )
7 t5 w, q4 e5 i% U continue;
3 t3 D$ ^( M6 b4 n! e if( pItemElem->IsUndestructable() == TRUE )
H" i& v# |% ]; t! \ {# x; }2 G; }* E* N
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
7 j$ y# V* X9 D4 x* N* S) z5 F, r continue;1 T' s9 _2 \2 Q( p. }) Z2 j
}+ l* A7 e4 z% M) a
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
1 ]) W6 b+ H; u }
9 U7 P5 j3 L9 U break;
7 e% l' i* Z J; j) y2 c }- u/ B" [8 `: t; h" X9 `4 Q- J
case 1:
$ s8 I0 k) A- K+ q {- g" e, G; X1 } p" H' T# V- F
//整理背包
+ b7 W6 L* M' F+ U3 ] //////////////////////////////////////////////////////////////////////////
5 Z0 g6 a% @0 i- o! `3 q- p //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );" B& e7 w- u2 Y/ l+ ^6 O1 G
//////////////////////////////////////////////////////////////////////////
3 }( X! f4 `$ @' o# i, k //////////////////////////////////////////////////////////////////////////# U1 O4 v: y2 j) i" E3 H5 s& H
CInventorySort* pInvSort = new CInventorySort;
7 i0 g/ y5 E5 y$ \, p- H vector <sItem> vItem;4 f6 L2 y: d7 w0 x
vItem.resize(MAX_INVENTORY);//初始化大小3 m' x* G( p: ?* t! U0 J
//////////////////////////////////////////////////////////////////////////1 T6 P1 ~- y( I. x) a
//填充数据; P4 K4 ]8 M b- X7 v. J& v
for (int i=0;i<MAX_INVENTORY;i++)
- a& ^3 ]. N7 i. p: g {' s6 l0 }# l2 Z. F
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);( c" F8 {0 q8 C1 \
if (!pItemElem)
- L% e* ~& \2 V/ z {
* a4 H5 \4 w; i. O0 c vItem.dwKind2 = 0xffffffff;
* J6 {( l7 [% M" P6 G: A2 S vItem.dwItemId = 0xffffffff;) G5 X# S, z5 g5 A+ T$ r, \% H# @
vItem.nIndex = i;1 u1 w* w" z7 Z. M! p7 ^1 }
}else {
8 G+ G( p$ U2 R) i5 y" l3 a ItemProp* pProp = pItemElem->GetProp();- ]) }8 J: p0 t: D+ p& L0 @9 C
vItem.dwKind2 = pProp->dwItemKind2;
' s( k; W* t9 q0 u+ F* Y7 Y3 I vItem.dwItemId = pItemElem->m_dwItemId;
5 ~& A r/ ~7 J5 X- _3 i c. a$ c% y vItem.nIndex = i;
3 x4 i: n0 z3 R% I! E1 ~$ V }; B2 C- M( E7 Y" U
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
% |. e' i4 k, V/ H }
! j4 p/ t% H! M3 B7 e; J- r0 G$ I //////////////////////////////////////////////////////////////////////////2 A' p. h) n7 q, V
sort(vItem.begin(),vItem.end());//排序+ ~* X5 \$ ^$ v
//////////////////////////////////////////////////////////////////////////
) V; L0 o5 U( c/ d: M //交换
0 x$ a$ j% d8 ]. W, y/ F9 z8 M for (size_t i=0;i<vItem.size();i++)
9 {0 P( j! r% a6 O {
( R# I/ L2 u, U; Y- j$ Q7 J //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);. s' L" h1 I. Y. _& E# G% _
pInvSort->Add(vItem.nIndex);" L- o# |6 v0 @: b0 \) K6 c
}
' k2 Z& l. W' C3 k" p& ` BYTE nDestPos = 0;6 o: d3 C4 a3 ^& E
for (int i=0;i<MAX_INVENTORY;i++)
" H% W$ I& y+ U+ l x7 n3 ~- U$ K5 l% ] {: U! ~, S5 S0 l" x
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);4 D3 l6 ]4 X# T" H2 _
if (pItemElem)
6 R. a; l+ L- A# E) ?, J {
) ^; G1 G5 ?; p& G; d7 B* v if (IsUsingItem(pItemElem))4 W1 [7 r+ P* w( M2 f) z" a. w' r
{: d* i0 X' {1 @7 E/ V3 ^
//这个位置无法放
2 b& d& q) v; _ nDestPos++;5 {4 Z8 a4 d m/ p
}
* U: E. ^# F8 p, s( v/ \. ~ }
( b# t. ]$ T5 S$ s* a m+ m BYTE nSrc = pInvSort->GetItemSrc(i);
+ J0 ?4 @. Q* ]. u1 C* x* {+ J pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
0 t8 M: ~" x, T$ R1 y7 ]# A% v! L( R$ P if (pItemElem)
3 C2 ?# C: X) _' J0 z& x2 i- | {7 ]( u- A& v$ i# \ i
if (IsUsingItem(pItemElem))
( p/ N4 y8 F4 |( z( l% a {: |; z" O* \+ G! { k
//这个道具无法移动,跳过+ r, C/ D4 D0 V
continue;* ^2 R# [( ~8 Q5 m) C. [# p
}
I ]1 E8 p% k }else{/ M( Q. e# Y3 T( o5 p- U. x
//空位置 不用动# c5 @. r/ E. D( x/ `
continue;! S) e3 s' k( h5 C
}
# W v5 A# F: z7 @/ m- {; a8 m //////////////////////////////////////////////////////////////////////////3 M2 y; t! i3 A7 I7 G& C; q
//开始移动. r. s( N- L3 A
if (nSrc == nDestPos)
6 j4 |8 f4 g& Q) i {$ f5 e* y) H3 a
//原地不动
* L! T c5 X; s- W* ^ nDestPos++;8 i/ V; W( c( |$ b
continue;
: x: ? R9 `. y: W8 Q }
5 _ I% O6 E$ S6 G1 \& J pInvSort->MoveItem(i,nDestPos);
' Z" j3 W% k; n+ Z; W7 i g_DPlay.SendMoveItem(0,nSrc,nDestPos);
& f5 w" P6 X. ?+ {3 o( M7 J8 E Sleep(5);- j! t6 a2 y6 [' n7 M
//Error("移动 - %d->%d",nSrc,nDestPos);2 t( {6 }& |2 u! I
nDestPos++;' G5 ~( B$ R$ K/ A
}6 G7 e9 o- [) s% [2 |: V" K8 B
//取第一个元素的信息5 X# D5 U5 x. U- i+ z' g
/*) A' E9 [7 }; N, ?: M
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)- J; h+ |4 I' d+ n; N4 |1 `3 E
{2 J8 _! l& s- s' w8 W) y$ V/ v( g
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);7 O" I$ ]% a1 V; P
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
6 Y3 V2 {8 s; v; k7 n9 a; | }& G# W' b5 S3 i3 _: |+ b7 `
*/1 l6 r3 ?+ k# v# u: Q- ^/ |
//////////////////////////////////////////////////////////////////////////* O* \; H& z2 k: Y+ C
break;7 f) y2 p% ^0 q; M; T* q/ z' N6 t
}: @6 ~) J- M' j# J& V
}
1 o) J. _+ z4 g- V! x' Z5 h7 E9 |}
8 P$ y$ x: E6 u$ [1 Cm_wndMenu.SetVisible(FALSE);
1 s# H- g- p! c* d
' r) e6 B2 q [% h' M# _--------------------------------------------------------------------------------------------------------! L6 Z; w9 J2 q9 k
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)/ w+ @) h" N, s! H5 R1 v0 b6 E
{
9 `3 @4 ]. _% P, |% `BaseMouseCursor();
3 H0 s7 |+ ~8 P, [} M3 V7 s7 A2 E+ f& T' k
在其下添加:
9 U3 Q8 _; M8 v) Evoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
0 j* Q- M8 K; ^( y5 U2 p{; a1 Z9 `& d6 n
m_wndMenu.DeleteAllMenu();) s: ~: m8 S- K+ j
m_wndMenu.CreateMenu(this);
+ H: d0 y+ O" p* e- rm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");& b3 Q; p5 r9 h" i3 Q5 o) w
8 J: T$ }$ t9 \/ S4 H
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
% s# _ R; \, e{
5 H% b8 ~! |5 X //P以上级别才可以删除所有道具
( H' s; K2 r1 |# I m- m, X m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
$ x9 ~0 M- L$ R3 Z}
) z! N) Q- U& f: C$ G3 {m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );* W4 O: r% M0 [( R' s- A9 S" V0 N% `
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
0 k, H r, P7 p1 a% {m_wndMenu.SetFocus();
' i$ N- ~8 {' i/ E& e( M}# T( ^8 T$ _5 O8 g. V
------------------------------------------------------------------------------------------------------------9 j3 k. @( ~4 J0 N( O) A# ~* G
*************************
0 ?% y) E5 s( W2 V v5 SWndField.h文件6 R1 W8 E1 s% B9 ?
*************************
# B7 G1 b0 Y% b搜索:BOOL m_bReport;
8 x8 V/ }; q# b6 x! c4 a4 _% F" a其后添加:( Q6 J0 k9 B( ^
CWndMenu m_wndMenu;9 [" j/ W1 w% P- \8 ]0 C! J l0 H1 Z+ O
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);1 E7 q9 v- m& T3 R5 t
其后添加:9 f7 B6 B* {% ^6 B7 C3 ~
virtual void OnRButtonUp(UINT nFlags, CPoint point);
: Y! H- |, K1 F3 a1 C& X
/ \1 w! ?" |8 \: M3 U
! g! J1 S5 Y( c* b; y& J |
|