|
源文件中_Interface文件夹下WndField.cpp文件
; V$ H; W Q/ Z$ S0 f1 G搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
4 N, G6 @" I9 N$ k2 M" }) D: L' _) D# M' o" P9 h+ ^
struct sItem2 ^" l$ H( A S& b* o% G
{
. D2 P( r% R- j% l/ N( fDWORD dwId;) j5 W% G2 r; |' Q+ w% L
DWORD dwKind2;) ]* h1 ?4 `7 n
DWORD dwItemId;
! Y, h% i _6 O3 @: |. A9 VBYTE nIndex;* x# c# m7 Y% F i
sItem(){& h, v m# u R" i& j
dwId = dwKind2 = dwItemId = nIndex = 0;
u% H* h C# s}
# p# n- R4 C" m6 G6 p8 j2 ]3 T6 ^bool operator < (const sItem p2)
" F* Y+ \ O: S/ E; J{
" Y9 `7 e* V+ [' k7 q if (dwKind2 == p2.dwKind2)
5 p- ~" g3 J+ ~" f& `5 u {& Y b9 E8 ?. D
return dwItemId < p2.dwItemId;7 H9 J6 N. ` _5 ]: E C9 Q
}else{
) O* ?- t) g. T9 k: h return dwKind2 < p2.dwKind2;$ o8 s: v J/ x& R$ r: m9 @
}( ?) m3 l# _; n
}
5 V' L' l; c7 [- q};" `9 m4 _- i. T
class CInventorySort
7 T6 Y# O# q2 J2 O, r{
5 `: a9 k' b3 Lpublic:! m' q B% S, |8 V" y$ h7 F
CInventorySort()! I; H" k- s9 Y. W
{
6 x/ a$ D+ J1 P2 P m_dwPos = 0;
3 i6 s4 J% M, ~. N+ [: _8 Y}
/ U( N9 C8 Y$ E* O~CInventorySort(){}3 |5 @- ^7 K0 m2 }
private:
# D5 s+ s* N. l( NsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息( [9 k$ r. f3 o% B7 a( Y8 V
DWORD m_dwPos;
1 N8 f J1 ?2 R" F# z, upublic:6 v; |) l7 r/ |. }0 \0 m* K
void Add(BYTE nIndex)
- R2 h7 V, ^ e$ d{; n( d: D" H9 A
if (m_dwPos >= MAX_INVENTORY)% x. K6 y) n$ G% E ?
{6 a" Z$ k' q- l% r0 H" i
return;* f+ [8 ]2 Z- b
}$ h& S) P6 A6 J' d3 V( b8 u% f
m_Item[m_dwPos].nIndex = nIndex;- j1 \8 o' E, M+ O8 r0 z
m_Item[m_dwPos].dwId = m_dwPos;8 f( M) ]' e3 [4 z& M! h) F
m_dwPos++;9 H8 W! ?! ]* n* o7 u1 q+ m
}
( m' {; @& Y1 L7 Y PBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
) Z6 I! P* X8 B0 S{
8 S/ `4 `+ X% g7 D for (int i=0;i<MAX_INVENTORY;i++)7 K- X0 f- O5 S) x) z* w0 O' Q
{
" U( z; N. @- X0 t4 r: { if (m_Item.dwId == dwId)" x8 b& |" i+ z7 c9 ^
{
3 n$ [0 Z1 T5 w6 u- J return m_Item.nIndex;7 n# c# q9 ]6 t8 i/ @& `
}
X: K2 C) ~! j3 r' Z+ |! z: P+ C }9 t2 G3 T) q" \7 v, z; h& r/ K* r
return 255;5 H5 e0 b0 H2 i% ` z1 N. \; V; i
}
" h3 r; Y' P/ H! a% Pvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置5 \$ M, \, h8 C
{
9 y6 Q3 Z( p! J6 \6 W3 U BYTE nTmp = 0;' k8 u2 e/ V. j9 _9 _3 |
bool bDest = false,bSrc = false;* G9 J5 G7 n" x6 e# p
for (int i=0;i<MAX_INVENTORY;i++)( n6 `6 I% \- J% \6 e
{! R4 X, p1 m1 c5 t6 C# g
if (dwSrcId == m_Item.dwId)
/ j8 R7 A5 F: X: y% p3 l% e* Z {
: z5 M o9 W: T2 o4 a; O //id相等 则 改变对应的dest和src- w) M+ q( t; O# c' m: M) z
nTmp = m_Item.nIndex;
' ?) p g+ ?9 { m_Item.nIndex = dest;* r/ v# \5 I7 G7 P$ ?& c- T0 b
}
3 b& Q7 N0 @$ v } j" O0 [, J8 m
//临时数据保存完毕,交换开始& S6 R3 R& b, J$ i
for (int i=0;i<MAX_INVENTORY;i++)
/ P$ g1 j8 R \6 d3 ?' f+ y' b# m {( {% K6 ^) f4 S, L1 G
if (dest == m_Item.nIndex)4 p2 m% {1 G2 c- p5 W* x* [
{& n m! ~/ M( B; G5 A
//id相等 则 改变对应的dest和src
2 I1 X2 I9 |% J4 B8 T9 _; { m_Item.nIndex = nTmp;
& O* g; ~* M- F: e" y' c& T7 m }
* b8 R: J: `$ h7 S0 A* \ }
4 u8 ?! {" w0 o3 m) b' T9 e! M: J/ j}& d9 v* d- f$ W. R# ?9 W% ^, J" f# b5 V
};1 T. w; i+ m5 e* W* B0 P3 b. U% ^; P
-------------------------------------------------------------------------
& v& K) O- {- v( t; U依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
: M; Q+ @. k; X) }" k& s; Q搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
( o4 [4 T- z" W0 y* L/ X0 ~( w3 J紧靠其上添加:8 _" \, K4 V7 G1 A) A" M2 j5 p; E
if( pWndBase == &m_wndMenu )
: H+ ^5 h$ C, H1 }( G- j/ E% {{
, Q+ i$ I! ~! }; p) ~2 l switch( nID )* [* j' Z& d% e" [) s7 e3 ~
{
E ^6 c; F/ d4 I9 T. | case 2:& _' a- |) G; P
{+ l6 [- j+ m% D6 u! n; J5 x
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);& F# R, _0 {' F- [
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
, H" S/ k* P" { {1 \9 J( @3 v" n" T
break;
" ?# l0 T1 I1 k9 | }
, ~' j# E% t( B3 {) H0 l/ s, b3 T for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)) v3 y! X. H' B8 l5 x s& |
{- i* [2 h* C2 y4 S* p& L
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);# [. f8 j7 Z: K7 I7 v1 y
if( !pItemElem )8 u; G5 G7 X7 P* r: [! h
continue;: R5 J7 p; V) [# V. m
if(pItemElem->GetExtra() > 0)
% N* G M x, M/ a continue;
- ?# o) o; P9 K* m) [ if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ( E6 W# k c1 N
continue; X Q2 [) ^9 e C! m
if( g_pPlayer->IsUsing( pItemElem ) )/ a2 C. A( q0 Y2 F
continue;
/ d- t: C. i& \3 r4 ?4 u if( pItemElem->IsUndestructable() == TRUE )$ Q/ m0 x' W1 g. m3 \% l' F
{
$ R) `/ p6 ~7 S: w' j1 ]) O1 w g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );7 s4 E0 X# i/ |6 J A
continue;
# i! f/ {1 L% Y }
+ t8 Q* ^3 ?+ L w0 R g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
/ T1 c1 b% t: w. ?% A2 {$ v2 h }8 L( P% Z9 |3 T& Y2 k- x r) B
break;: @/ s5 g" j, }$ G5 m. |
}
9 N: B8 J9 ~) j$ L# L case 1:1 R. V/ ?7 d* A, F' T- n
{
( J% E5 ~8 N/ J. }' C' E //整理背包$ Q* `2 a+ r* z8 u
//////////////////////////////////////////////////////////////////////////( j1 J6 D- V/ A" s) l
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
3 S" T& g9 y8 F7 S; v2 L9 L //////////////////////////////////////////////////////////////////////////
1 b. c" Z y8 c* k4 @ U5 g) @! r //////////////////////////////////////////////////////////////////////////6 S) t/ P& V$ ]/ S4 f6 _7 z& s
CInventorySort* pInvSort = new CInventorySort;) [! g4 v( s y" g! T: { J8 `
vector <sItem> vItem;
8 X: B- }0 O1 S vItem.resize(MAX_INVENTORY);//初始化大小
* `( `, h" B# g //////////////////////////////////////////////////////////////////////////$ H; i K" p" _3 _$ N
//填充数据
* [/ n( } E$ B; l9 y for (int i=0;i<MAX_INVENTORY;i++)
; X( {, v$ X2 L" a' A' d5 p; V8 M& I {
* ]8 O/ N- \3 n7 G: j9 y( ~% i CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);& ?+ A5 t* Y& `* K. r
if (!pItemElem)
, H5 J1 q% L1 f( e& l% C$ x) s {
: X: m( r; y& _1 o) G, v vItem.dwKind2 = 0xffffffff;
7 u w8 A7 J) V( o( J, J vItem.dwItemId = 0xffffffff;0 c( G" @- G; j- `& z
vItem.nIndex = i;
9 N- E& \/ W8 f1 f }else {
5 E/ `( s! A/ E- B8 O$ o6 [ ItemProp* pProp = pItemElem->GetProp();
" h: r+ A8 l5 o. {2 Q vItem.dwKind2 = pProp->dwItemKind2;
' P m( ~. l$ g! F, S vItem.dwItemId = pItemElem->m_dwItemId;
, i" F% Q6 f, g' }* H$ D vItem.nIndex = i;7 u6 \& Q5 \! K D# K6 q
}
: g% R1 y3 f1 Z" V3 C1 w2 U8 \ t+ h //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
f2 {0 A5 ~# e( o } v+ C# u, _9 y& c' q' J: p! C
//////////////////////////////////////////////////////////////////////////
- s2 X$ L/ J' k' U6 E' w sort(vItem.begin(),vItem.end());//排序
* Q1 U6 V; ~( A' t4 B5 F //////////////////////////////////////////////////////////////////////////
/ B5 }/ \( @% e9 B; R) i3 F8 K/ h //交换" d8 ~* Q/ W6 \, ?6 u5 X7 y5 R( H$ M
for (size_t i=0;i<vItem.size();i++)
v8 t1 U! l) y# n2 f9 } {
5 U0 j2 L" l7 X4 F" s //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
' c# g" T0 R# a pInvSort->Add(vItem.nIndex);
4 }/ T, g* m" a/ N }9 c* ^: c0 D2 b2 v# H% j2 d' M: @
BYTE nDestPos = 0;
( Z8 k; S r" Y# _ for (int i=0;i<MAX_INVENTORY;i++)% E! V( F9 M1 U2 c1 U
{4 N: w+ {: ~' g- Q& U
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);! p6 u0 e) J: p; r7 @# {
if (pItemElem)
! n8 ]) _, }- E {
# b6 Q) v: R) K" v$ e! \1 q1 j if (IsUsingItem(pItemElem))
' W* r: z. i+ B {0 c+ q9 Y( H( o6 P0 F3 ]) W
//这个位置无法放
7 p6 X- C- G6 ?4 p nDestPos++;
# {* c4 s* a9 ~ l* h* Y$ I }
7 z) B# _) P0 w1 R5 I' e }, v! z' ?; T ]& N( S
BYTE nSrc = pInvSort->GetItemSrc(i);6 y3 w' L- d. {$ @9 L
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);: U. Q$ D% b% ~* n. S# H+ G
if (pItemElem)
- k* B& K6 f$ f' Y; y' h+ i8 w+ H+ [0 ] {! s. p' c1 ?2 H9 s. _
if (IsUsingItem(pItemElem))
5 g. I, T; S: |; Q {/ ?1 S- l4 f) x
//这个道具无法移动,跳过' K) G* D4 z# o" M
continue;% \8 |4 o# C+ _& u5 n Y
}) S3 G% v+ Z& X- H! D O2 Q6 s
}else{
. Q; j& v4 F& Z$ S2 m. k1 V8 C //空位置 不用动% @: V) n3 v: p, {% J' O L* `" B3 o
continue;2 H' K' o+ n2 d8 G; r
}
! o7 c& _9 X% d0 ^ //////////////////////////////////////////////////////////////////////////
9 J9 }( P1 ] P2 D! k //开始移动
3 `, j+ `! u% B$ i e1 Q if (nSrc == nDestPos)
, ?/ o. g" I5 n+ f6 [( X A" y3 C$ F { Z1 [8 M4 k) H2 w' T
//原地不动0 D% F/ ^3 U5 i8 w: Y
nDestPos++;9 H' K3 }: Y/ A
continue;
* l4 G0 ~8 Z% a" R& g; A9 I5 B* x }
( g% Y1 q" I4 E0 |: P7 F: G% Z pInvSort->MoveItem(i,nDestPos);5 L( w8 G$ k' u4 T
g_DPlay.SendMoveItem(0,nSrc,nDestPos);. }$ ^1 @+ c, Y% x, I
Sleep(5);9 x% u6 y, j! N ^/ e
//Error("移动 - %d->%d",nSrc,nDestPos);) a/ Y1 X0 k/ I6 g
nDestPos++;
/ s6 K, o4 ^! _8 E& v }
4 a/ f& R0 U2 [) O; F, o" H //取第一个元素的信息
8 x- C. o4 R8 h /*
: f: W4 \$ r( l; v" A3 l if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
& N! t, }4 t+ n/ h {& A8 I2 F& P, Y, x' E; F: d
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);4 \) Q$ P- @9 I# C
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);8 K$ R, ~& D- j! H' _, t
}
* M; ]3 e) q, R! U */
, l- D0 V5 T+ f! R t0 X //////////////////////////////////////////////////////////////////////////- ]- @ O: b4 N4 e
break;8 q: x6 F- f. N" o3 O3 a: P
}
4 C& _+ L: p b; O( ^ } . ]) z' I; }5 q/ L& k: z$ k8 `
}% q s6 r3 W$ i9 y0 W1 A
m_wndMenu.SetVisible(FALSE);
! Z6 _8 Q: g9 ]6 f# n
3 G1 }$ H0 B4 Q; ~" l--------------------------------------------------------------------------------------------------------
! J: V' _! r2 d Y, D- t搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point); v2 R" a! F) x5 x
{
: t7 G4 z5 u; q; T. E* a' z. ZBaseMouseCursor();
/ w+ p0 L/ R! y. |5 y1 D}- g, s4 I; }4 K4 z8 Q
在其下添加:( [& H, d3 I9 ^/ k! K; ?
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)! P( J+ {$ P1 s* I; o
{) |4 k$ ], Q! z
m_wndMenu.DeleteAllMenu();4 ~; L6 d0 h/ G" \0 p
m_wndMenu.CreateMenu(this);
$ M( C% {$ ~, L* am_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
/ e4 {" Q% N a# w @" ^8 i# _/ j
7 x' N% c' u% U. d8 h' V Xif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
0 r! V }! L! r$ l{
/ I' _/ E& G3 \( `- \ //P以上级别才可以删除所有道具
' q# ^2 d0 \* ?& i m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
1 S2 L+ I5 L% C- T- d/ _1 J4 N}
( I: W7 ?+ k: U. I, N( R3 l/ t0 R6 _m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point ); R" `* x, B" l; @
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );& e4 G; x6 f. \* E5 x' s
m_wndMenu.SetFocus();
+ q! V: ~. c/ y1 t* A1 y}& d: ]7 N. z& R1 Y
------------------------------------------------------------------------------------------------------------
6 m0 m6 E$ U; x( `# G6 {! L7 q*************************3 r( w& |1 R9 u3 S- E; [$ ?
WndField.h文件; J: @/ W6 f; a+ x' [' g" F% P
*************************1 P# u& F" \# B5 |
搜索:BOOL m_bReport;2 N5 G W# q. s2 J7 A5 f
其后添加:
6 y* `6 a: [& L. {- D) M/ R! B1 N PCWndMenu m_wndMenu;
! e9 z- I7 y X9 r5 ^3 p% y/ t+ k搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);7 R; j1 Q/ B @3 N0 {. M) R
其后添加:5 x( a8 H: y/ o5 U- u$ W9 D
virtual void OnRButtonUp(UINT nFlags, CPoint point);
0 t; F- T( z( c! J) t1 {6 u+ l$ m
" j3 ?* h$ ~" f R2 H0 y4 M( Z) f
|
|