|
|
源文件中_Interface文件夹下WndField.cpp文件
% C4 k8 J) L* `4 }2 h v- X; u5 |搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
( y; M+ j; r; k$ S& l% t$ X/ v3 @
struct sItem) p" j( M. R* I1 g
{
' Q, z- r4 l1 N) n- D; [DWORD dwId;
0 N9 I7 d" v% H1 k6 GDWORD dwKind2;
- h2 s* u0 Z3 F7 a" [+ q% L' YDWORD dwItemId;
1 A# q% Q' L# y' _BYTE nIndex;/ k+ _' Z% L9 g- Q" L9 W. I6 U. F
sItem(){# g7 u! B6 e8 V! w# T$ ] e
dwId = dwKind2 = dwItemId = nIndex = 0;( C; X8 R+ I5 m5 w
}9 i( ~# `# @: _4 K
bool operator < (const sItem p2)% \; Z2 m- @2 i; m: ^+ y
{2 u' o" c+ O$ X0 Q6 s
if (dwKind2 == p2.dwKind2)8 l& d2 |0 H) T8 k) ^6 O
{
2 a5 `8 i1 L2 U- A1 d( H return dwItemId < p2.dwItemId;
1 B# Z* J4 s! L. Q9 x }else{
1 K5 K- D" ?* I& H* v/ p# c7 w; N% c return dwKind2 < p2.dwKind2;
$ T, P; K/ A, ]& h; d }4 j" x1 U" n \$ u( a/ v
}
; Y, b0 t1 \" o) @' e$ B( ^};
* G, w, g' M. i9 b) ^class CInventorySort
: u* v: e/ r/ z" O& m6 V/ C4 r{. x/ M: L8 [% B2 V) V& T% }( C' a
public:
5 a6 C9 ^' U# c+ n' t& T; ?3 c7 S, nCInventorySort()" Q4 h8 x7 Q& }! [+ d6 T9 [/ t
{
6 I' J0 R4 D- ] m_dwPos = 0;. E2 U' v* L w3 W" D
}' M7 `; V/ [' {4 x4 N
~CInventorySort(){}
0 w, j. W; W3 ?+ f) K! n9 n/ Nprivate:
# c: X. J7 M% MsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息5 Z( ~9 ?1 p2 L( T5 J# l1 V
DWORD m_dwPos;
7 D# e6 y9 I% e8 I' D$ ypublic:
o! ^* t) i. ]- tvoid Add(BYTE nIndex)1 x, x0 R9 ?& E6 o/ e
{) U+ K z- `. Q6 ?, i7 R" i
if (m_dwPos >= MAX_INVENTORY)
8 v: W0 m4 r$ W {
) X4 {$ Y& G @+ f$ F4 E return;1 y- @1 C9 v9 L; P' f
}0 ]1 ?6 q" L+ G& @) e8 ~
m_Item[m_dwPos].nIndex = nIndex;( w& j9 I8 o3 c' K0 ?- e
m_Item[m_dwPos].dwId = m_dwPos;5 q: r7 \( ?* `) ` ]. P
m_dwPos++;
7 G3 q n- f- F}' f5 I; @# u* E
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列1 M( {8 ]& P. w5 h" f% ?
{+ b4 K0 _3 U3 H0 H
for (int i=0;i<MAX_INVENTORY;i++)
* Z1 m) g, ^+ [, D; M3 R4 e {% j/ r8 @/ p$ x
if (m_Item.dwId == dwId)7 ~( w" X- y. c" w* s& X2 ^; f6 a; B
{
/ o" s+ T1 P0 Y# Q" ?/ a% m+ O return m_Item.nIndex;& V# V# S5 w. x/ q. J
}
, x6 x+ {% a: R1 z. V }
" e& Z) G2 v- P4 e& u+ e; F8 J% H return 255;
! u% k$ R# Q% w}# ]2 Q: t2 ~7 ~2 m
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置5 D+ o, A1 B& p# Y# q- J5 A
{
# |5 S) A+ c6 D! K; u BYTE nTmp = 0;$ i$ f& Q- s% i$ p) q
bool bDest = false,bSrc = false;0 ` ~* s1 [/ e
for (int i=0;i<MAX_INVENTORY;i++)
& ~8 R8 Z% _. C {
8 C" J0 B; Y% `" g if (dwSrcId == m_Item.dwId)
) U" R% V1 a( {0 Q, s {
# `6 }( I. R2 P. P* h //id相等 则 改变对应的dest和src2 q% R" B+ L# r K
nTmp = m_Item.nIndex;. o2 f- |+ W0 i- O% \
m_Item.nIndex = dest;2 N9 K8 Y( @/ j( i" @8 r: }
}' [% \* Q/ l3 I$ W
}
, Q ]7 P2 _0 H: ] F9 W //临时数据保存完毕,交换开始! K* x+ q# e1 g ], Q' A# q
for (int i=0;i<MAX_INVENTORY;i++). t- L% q+ K1 x; H
{& E" B A1 N5 U' @
if (dest == m_Item.nIndex)
$ C3 @ ~5 t+ T: T# @) I" s8 H {* P% I4 X9 _4 q& n) R3 X
//id相等 则 改变对应的dest和src
5 w5 k3 b; @7 m$ O m_Item.nIndex = nTmp;
" o' t2 A1 [" b }/ x, Q1 y* ?: c9 g5 r# w3 n1 g4 ^6 Y
}1 Z1 Q3 X* f9 {: j
}2 [" G9 p% d( f% h' b0 f
};
3 g/ b' j- u( Q. u8 k4 Z0 a-------------------------------------------------------------------------6 v% V* _& I; ~5 Q
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
6 r/ p5 M5 u P' f W* x搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
$ y$ P, k/ A& D$ E) T紧靠其上添加:+ X9 G5 v+ S4 b3 o4 x" O# ~, ?+ A& G
if( pWndBase == &m_wndMenu ), ]. c" L& j, Q
{
) f, d& g$ D3 _ M' I; T$ S switch( nID )( c: N T- _7 @
{
/ h* S( ?& w/ J' a, N! n# z case 2:
0 ~+ {/ I; N% J0 x) W$ W {7 q( r' t; M, e: x" p/ d
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
$ G! f. O- `2 N/ f( X# f if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))+ s$ S; g" T/ j% T8 X R# @
{, K& E- Q( |$ Q5 ]2 J- j
break;; D( f6 }; b; }. d3 ^8 X" T. r
}
6 Q- L* I8 m" F7 Y$ U$ a1 P4 ^3 L for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
( n. s. q2 h# `4 n2 ^ {3 N1 F: v" E$ r8 Y
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
# Q3 c" W, O/ d( p- u if( !pItemElem )0 n- j. Q! W( Y
continue;
) ?" T: o! z* _' p: a4 G/ L% [ if(pItemElem->GetExtra() > 0)
i s4 M$ _- a( y continue;/ r2 ^: [: H* U5 a- H8 `# t" p
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) / \3 D# s$ d9 _$ [4 Y
continue;
* V& {8 u& K$ t. t if( g_pPlayer->IsUsing( pItemElem ) )
% E: g, o. t# p) |! W6 { continue;% i/ n" D& [, `9 N1 S" g }9 Y
if( pItemElem->IsUndestructable() == TRUE )
7 y+ L& `! w6 d {0 T/ j) E7 |6 K4 D/ S: d
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );. E& O$ O3 O o
continue;' h8 V" U" {& r/ x1 e) t1 {
}
( O( I/ p d* X: W1 k& }2 i* n' _9 | g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);6 g: }' J% O+ I9 V0 s+ X8 K3 f
}7 t. Q1 t9 Y& L+ }
break;7 R7 e$ H8 z0 V) T" O
}# K3 P. [! @/ O9 Q) a# t: A
case 1:1 Z- b# q; d9 H! J8 p$ `8 U* x- w( @" `2 C% d
{
: z9 A( x% ]: w. `5 }0 t; y' X //整理背包2 ]6 z: y* y/ X
//////////////////////////////////////////////////////////////////////////
* b0 r4 Z, D2 T4 a! W //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
1 k$ S4 V* U& L. o, ~, N& j5 H //////////////////////////////////////////////////////////////////////////
3 X ]3 C/ \' e1 X. F, f //////////////////////////////////////////////////////////////////////////
$ `0 h7 l8 N- M2 G9 J2 Y CInventorySort* pInvSort = new CInventorySort;( Z+ P2 Q) U' W1 L: I
vector <sItem> vItem;! k8 ^& j2 I0 K( |9 O6 `# i
vItem.resize(MAX_INVENTORY);//初始化大小: W+ I6 T& z* Y* B8 d2 j& J
//////////////////////////////////////////////////////////////////////////+ d( L! R6 @/ V1 }9 }
//填充数据2 w+ A- i0 M/ Y: W1 j8 f, `9 s
for (int i=0;i<MAX_INVENTORY;i++)
0 B, W) p; o1 N2 }& t) f% j {; Y) S2 o# v7 ?3 f. P0 X4 p
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);0 k" A0 S( w% G$ i* \3 w' v
if (!pItemElem)
! |( I; A1 Z+ k {
- M3 r% @1 j/ ]2 V( [5 C p5 p vItem.dwKind2 = 0xffffffff;" w- C2 n& O8 E# t
vItem.dwItemId = 0xffffffff;2 y# j! M' S* S4 k/ l) Q
vItem.nIndex = i;
6 W/ d3 E4 v% ~. L, Y }else {/ u0 ~" T. I, B: T" \8 t
ItemProp* pProp = pItemElem->GetProp();
5 m- n. ?& e- ^' N( e6 ?, B4 b vItem.dwKind2 = pProp->dwItemKind2;
1 O O6 _ r- f" f F vItem.dwItemId = pItemElem->m_dwItemId;& K2 j3 d4 ~, s8 z: @ {: D) g- i0 {
vItem.nIndex = i;+ u6 \. N# [7 }3 n9 S+ A; U+ A3 o
}1 H/ C* q) e9 L' p
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId); I( g, U5 _- M: H0 ^5 m5 f
}8 m. N4 ^6 s& X2 w% P
//////////////////////////////////////////////////////////////////////////
' x. x( F/ x- K1 J sort(vItem.begin(),vItem.end());//排序
$ r; |) r9 I0 D //////////////////////////////////////////////////////////////////////////' q, r& A# I0 I; |4 P1 A
//交换
/ d2 ~! ^( e4 S/ s8 y0 Z/ d for (size_t i=0;i<vItem.size();i++)
$ s# ` ^/ h A' f4 f ~ {
) Z; p7 f: J1 K, U ~* s" Q5 B //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
/ W) _7 o) I- R" K pInvSort->Add(vItem.nIndex);
0 q6 X3 d6 n& M# l }
+ R4 z, @: G$ d BYTE nDestPos = 0;6 y; U5 g; b$ p, [6 V
for (int i=0;i<MAX_INVENTORY;i++)
9 V" g" T' p4 j7 ]$ {9 h0 C: T o {
t# E/ ?5 z* n u CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
: Z {0 B) X$ A, k1 q0 H if (pItemElem)
& J% Z* A7 h$ t' o, ^ {
/ C: j9 `- _6 ^. {3 _$ ^ if (IsUsingItem(pItemElem))
2 C8 \) J; e0 `+ B {
; r* s$ v, a% M6 C //这个位置无法放
8 l- E0 P0 h0 x2 ], K+ \ nDestPos++;# i, n: J- h" k {0 |! m( N8 A A0 @7 c
}- O* x; A* V' {# O9 @ W7 F- f
}
# [# l0 _, ?3 _& B) ]2 R( ~. n, y BYTE nSrc = pInvSort->GetItemSrc(i);/ x1 c$ H: a' d+ c
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);! m7 H. F. ~) F
if (pItemElem)+ z, V0 h9 H* D7 F/ J% d
{
) }$ [$ E/ G- r0 X3 K9 Z: n( M if (IsUsingItem(pItemElem))
& W- A: r8 x# M {
3 `. m7 h0 @- } L //这个道具无法移动,跳过. }0 k+ ?# }) r3 w
continue;
7 P* Z7 g7 v% B; A$ p. x }& v) B. w% f& H4 s/ i
}else{$ e! l1 ^1 s5 ]1 O- F; r% M
//空位置 不用动8 l) z6 G& o! ?1 c7 e7 P
continue;0 C; c6 s1 W! p
}7 _+ [2 z: \ k: c
//////////////////////////////////////////////////////////////////////////
1 l7 U# V; D5 d$ ?$ @4 S //开始移动$ Q- v' M4 u& R9 l. T5 i
if (nSrc == nDestPos)2 V9 ?5 O8 e T4 q+ O9 a
{6 `$ a$ X" u! E2 `' D8 \
//原地不动3 N/ r A. E! A1 t% H: y! O+ g& N
nDestPos++;
$ W! l$ \$ a+ R. }3 T) r continue;( k. f: G2 m! ?& @- w" ?
}
7 `# `7 g9 x+ E- @ pInvSort->MoveItem(i,nDestPos);$ X( \/ ~. G2 c" i0 k# k
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
/ C! @% ^6 s/ ?$ M& @) Q7 z Sleep(5);6 r3 }5 [# _7 N4 S8 O
//Error("移动 - %d->%d",nSrc,nDestPos);
$ I+ p' C7 s4 r7 F* H3 S nDestPos++;
( h8 @: g3 X) Y/ g! v) I" P! T0 Q }
; h6 f. U0 Z- K( ~, y7 i //取第一个元素的信息0 u3 ^4 |# t" j- t
/*
! }) p! |6 L2 S n" A8 R5 g+ u& s if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)& ~+ Y+ O. U# A6 M2 \
{
9 h L/ k4 y9 H+ P3 n3 A Error("Move - From:%d,To:%d",vItem[0].nIndex,x);, v0 |5 M+ z' G6 d
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);) H. l+ y: I5 [' u5 l
}
G( u' D& t* o; I6 L+ e# s */- B2 ^3 V) R6 ]1 z
//////////////////////////////////////////////////////////////////////////) ?# o' l4 h8 Y/ v' o5 u+ X! V
break;& }- L+ @" r6 o! n+ O/ l
}
/ O( Y7 b& V: Z8 e2 x3 w }
6 o1 f8 Y# R+ ]}. @1 k0 v& D( i0 l5 B6 }! U
m_wndMenu.SetVisible(FALSE);
! W" A8 P9 U8 |( f, h) E' o. w* s8 _' l7 k, H1 @+ a
--------------------------------------------------------------------------------------------------------
3 w: G3 `" g3 e& S/ Q2 D搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)# |+ d. Y& H5 J. s- P; y( n* H8 j
{7 z5 [2 U2 m! a7 {% P0 N4 V$ ^
BaseMouseCursor();" o+ y! C$ n3 V. \" N' V' x
}
X- J& f3 p' D4 O6 I% G9 M" V3 ^在其下添加: v, s; Y! {! X/ a
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
- p M- R0 G) B; N- B1 ?) g+ s Q{
5 Z3 S) X5 _3 o% D9 N7 q [m_wndMenu.DeleteAllMenu();# R! U) n N1 ~& {" o* p, ^. B0 h
m_wndMenu.CreateMenu(this);
. M7 X+ ]; L, ^3 }m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");9 m, N2 Z* g; Q
( P) l; c T, {" k, u( L
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
2 }0 Q/ ~3 F: \' ^{; w8 G, x. W- ? Q0 U( q
//P以上级别才可以删除所有道具: q. R. }' N9 m) d
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
( ]4 w; z- v/ c u}, k6 h+ d' G. X; U% y, V' d
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );, C5 `$ [ z( }. P$ z9 s# s
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );, Z5 M% p2 G- a' ~9 ?1 D8 F& m& k
m_wndMenu.SetFocus();, V) ?' F0 m" D3 |2 O+ C
}
! r5 b1 C$ a; t) k6 N------------------------------------------------------------------------------------------------------------
' i" m& M0 T+ T `*************************
- R n' m& R6 @! ~( `WndField.h文件/ z2 F1 T- n: @3 B# T0 m+ A
*************************. q6 s0 n) i) @; Y, h) [. }$ g
搜索:BOOL m_bReport;
3 O+ c" X; m. }其后添加:6 j1 N4 u6 l& L1 S3 t% @6 X+ y+ [- o
CWndMenu m_wndMenu;4 H/ Y4 U" V0 `. A7 W1 f
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
T& W: w9 i4 |0 g其后添加:
- E9 `9 g" F% ? }; T: Xvirtual void OnRButtonUp(UINT nFlags, CPoint point);" F$ d- }( E) f
2 @* d; K4 G& r# S
5 s/ }0 N) [2 n* |% p" }) w3 e
|
|