|
|
源文件中_Interface文件夹下WndField.cpp文件
9 K q) d; B6 `+ o搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ): i# C0 N) E2 h9 J# \2 {
) W1 B. q- w" X7 o4 ~* r% k
struct sItem
% f4 }0 [7 ]4 a* \# r{" `' _# H) l3 O
DWORD dwId;
8 b% l8 @) b2 g! z: J- H4 VDWORD dwKind2;
* d5 B- M. q* p E8 d. e3 I5 s1 `DWORD dwItemId;
9 C) {3 l3 s( W4 h1 Q# cBYTE nIndex;
, @; J4 m9 A2 LsItem(){
' s0 h) D5 n: ^& m) y/ K, L dwId = dwKind2 = dwItemId = nIndex = 0;
0 `6 N% o( a5 \}
) B$ k5 W9 j6 m. G, S. tbool operator < (const sItem p2)
6 b ^3 ]8 @* s2 }{
- o5 V" g' k! e: J8 _* [2 w if (dwKind2 == p2.dwKind2)" e# ~4 t8 v* C. W
{8 G2 X9 z" T; {
return dwItemId < p2.dwItemId;
+ M. a! `5 ~' c: y" O) L9 q/ A+ d+ c, B }else{8 u" Z0 |- J$ e4 A% K. B
return dwKind2 < p2.dwKind2;
/ k% O! L; [0 T$ R$ \- R: ~ }* c- F5 G9 L$ V5 k
}9 V9 x8 z% Z1 G6 e. M+ K
};) ?. d; i0 i! |& {5 Q: h0 m
class CInventorySort) q, u4 K- e& O0 \4 z8 m2 G
{
7 w* a# G! \# T, a. Dpublic:
; g/ I2 M5 c" G" fCInventorySort()
6 ~! d0 H0 d3 @{7 s- U; F! ]0 K; p2 Y( L p: M
m_dwPos = 0;
3 Y! [ ?7 u5 Z: k# @9 ^ l: D}
; L" a( M, k+ |# n2 h~CInventorySort(){}, `, F+ ]( _3 p6 g
private:
2 e* T% c i D1 T ]8 e& Z* m: }sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息( ?% h* b; W' F# x$ W5 S$ C
DWORD m_dwPos;
2 L: P6 K1 Q% W, l9 o$ R$ Wpublic:
; p' k: A3 R" [/ b# |: ivoid Add(BYTE nIndex). {1 I" K; o* d
{. B' N+ f3 N# ~1 F* s5 t
if (m_dwPos >= MAX_INVENTORY)' G9 E# p. ~' Y9 ?" V) g, a
{/ y* a* k. v: E5 j8 ?' f2 s& r/ g
return;9 V+ b- @$ R! G5 Y% n: ~$ B+ Z
}5 V$ q! q4 D( [/ j9 A
m_Item[m_dwPos].nIndex = nIndex;+ p' o6 w5 q6 ~3 V( ], g
m_Item[m_dwPos].dwId = m_dwPos;
) u$ E8 b% c4 D, | Y m_dwPos++;
. w7 o) U: r6 r}
& V5 ?9 {1 V% L" rBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
" M4 M% @+ D& |" l{
; A2 Z! z, }% |6 R1 U0 [ for (int i=0;i<MAX_INVENTORY;i++)
; N# R6 d3 K/ F4 v) ]+ ^/ D! o0 | {
/ g B' j3 H; l, T7 O$ ]( Q4 f if (m_Item.dwId == dwId)$ V+ ?, X1 k5 N" Q5 N* Y; O
{
( T7 T$ V' T! f C# P) E2 k return m_Item.nIndex;: X/ b; z3 `- o# a) [
}- h& t! i/ E! }
}6 o% b: o& g8 c% n; r2 F4 O% V
return 255;1 i' F K. e$ Q
}
0 V! W1 H8 `' i8 Q+ G) a4 [void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置# B+ d- r) M3 B( M6 G
{: s2 V( |( W7 t
BYTE nTmp = 0;. X& g4 A9 Y: h
bool bDest = false,bSrc = false;
* \( a O' G( q% v4 H7 f. f for (int i=0;i<MAX_INVENTORY;i++)- J) b! ?; C5 { g' y
{
9 P4 W1 @8 Y2 E- _& B$ x; Z3 T+ S if (dwSrcId == m_Item.dwId)
- c- X y& K3 a! K! K" f {
9 y3 R3 W' K. t3 c8 E$ D //id相等 则 改变对应的dest和src
+ N! e* F2 {, c' W$ M( t; z nTmp = m_Item.nIndex;3 W _. x) C. F( y: j0 y/ _% t
m_Item.nIndex = dest;: Z: H Y# Q# [# ^
}4 `) c, y4 @ t9 c: b9 }
}: `9 ~1 o- K1 E* L6 k0 V
//临时数据保存完毕,交换开始
& ] o6 ^1 w8 e& U: h! t/ y for (int i=0;i<MAX_INVENTORY;i++)/ |/ A% ?, A9 k z
{
. u1 N3 z; E0 n# G/ }9 E- q if (dest == m_Item.nIndex)# p4 _( p% u7 y- n5 _+ a
{
9 U6 u! U! _8 y1 q //id相等 则 改变对应的dest和src7 \% C/ J: G( }' t& ]
m_Item.nIndex = nTmp;
- F; \0 n% `" E }5 A- ^, @1 b: w& e+ E
}
- I# e* h4 i0 Z; O! P# D* {}0 g( O2 g+ ?! C$ J
};# @/ Y' h$ o7 H
-------------------------------------------------------------------------: T- x# k) |% Y0 ~- B
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )6 G# h) O0 [8 {- r
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
! G1 J8 w4 u8 M+ e1 B+ V- I2 B紧靠其上添加:
7 S4 t- M- |6 Q$ H" rif( pWndBase == &m_wndMenu )
P: U* [2 V! E2 ` E% h{* N. B8 n1 P# F! s2 {3 }9 y& f
switch( nID )& i# i. p# p2 f( Q3 u
{' E8 r' r U1 B: R0 T. ]8 a
case 2:
+ H$ y w* i! M {* b, B: y- J! E2 _* K& G2 M
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
$ p8 X7 {6 n: l+ M if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))8 G5 R7 R' f8 W* w2 f* m/ J8 _
{
, f9 m, Q0 c/ H& _) u break;- t5 c7 ]6 i1 z7 b5 g/ j$ r
}
' ]1 k" O0 @1 S4 d5 o$ W }9 x8 Q for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)! i1 L2 ~5 q' N, ]
{
0 }( K- p2 |" s2 L2 P CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
) ^+ a) y+ T3 p3 T if( !pItemElem )# ?( E: j5 \" W& w4 g2 F
continue;
. ?9 M2 s- N( f6 e2 U8 A if(pItemElem->GetExtra() > 0)* u$ a0 E* ]8 m( n7 R
continue;, Y( n; M8 f% C9 G: h
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 4 n9 H/ ]8 l0 q! v
continue;
, q" K( q [, I if( g_pPlayer->IsUsing( pItemElem ) )
! L8 m$ u3 w* u9 S- k continue;- l8 c5 [' z6 x$ F( e
if( pItemElem->IsUndestructable() == TRUE )
& w7 a' n8 l/ l. e6 l& K1 Z1 x5 ]7 R {
( H4 y, ?7 K% v! H: d" g g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
# I$ D5 o9 e& x$ a0 R7 C continue;: n/ E. }% K. \/ B5 ]% @
}$ J" L( P, K# E+ W) a$ s: f
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);* ? R1 O$ y+ {% I" n8 s
}
+ z# _; q$ c! X" C3 l* H7 s break;
2 Q% w6 d' r2 P1 t }
7 C% D' k. ~ z7 T: l- B! s0 i case 1:
/ |# V, N0 p# Q) z; r' F9 A {
) h0 u4 K Y* j+ a* J C! @ //整理背包
$ M- j) R1 J' w5 m/ q; W //////////////////////////////////////////////////////////////////////////
! c/ U4 D% ~( w, J$ } //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
1 q0 l/ ?- l& A. w) o; s //////////////////////////////////////////////////////////////////////////3 o, S8 U" w9 g. X: B
//////////////////////////////////////////////////////////////////////////
+ t/ F$ {7 i/ o$ q- A CInventorySort* pInvSort = new CInventorySort;
4 B5 F9 ^* w' Z/ w* Y/ y0 Q* U vector <sItem> vItem;$ e+ K2 _; _/ X3 M
vItem.resize(MAX_INVENTORY);//初始化大小# {, h: ?4 ^5 {/ g8 X
//////////////////////////////////////////////////////////////////////////
1 u: R" R5 }7 v& t: r6 u //填充数据6 l4 g0 J* F R9 R+ I; ?
for (int i=0;i<MAX_INVENTORY;i++)
; X4 O3 ]; @4 P% b {
) ]* a3 ^* r- l CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);, p) G2 u5 X: C% e
if (!pItemElem)" K- b$ e, `1 H
{
: L8 N& J8 c/ Y; o) c2 n0 u4 r vItem.dwKind2 = 0xffffffff;# i8 [0 T6 B0 o' q) b+ B! E- F) W
vItem.dwItemId = 0xffffffff;4 g4 q/ k( T' o9 {) K5 m* z8 \$ j
vItem.nIndex = i;3 V4 z: h0 b" o1 ~- z; G
}else {$ M$ K0 z# R2 X, s/ Q9 e
ItemProp* pProp = pItemElem->GetProp();
2 ^, B) \1 c# m/ q vItem.dwKind2 = pProp->dwItemKind2;
4 {, H" `& {: J vItem.dwItemId = pItemElem->m_dwItemId;3 U4 X. _ r! P1 A: j
vItem.nIndex = i;6 u! b h1 F0 o" _3 X& B
}
7 |. U8 T B+ h4 r, E //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId); m& n5 _* j# i4 u H% K6 G4 _# x
}7 }( k6 A& @8 I: ]
//////////////////////////////////////////////////////////////////////////
) B( ^: ^' |8 F# |7 N& \; F sort(vItem.begin(),vItem.end());//排序
t E# l; ]& l0 z/ b2 \3 l //////////////////////////////////////////////////////////////////////////
. a( b$ ^: U* Z9 h1 l7 R //交换9 {: k0 @7 K# `, z$ ^) B8 z7 K' }
for (size_t i=0;i<vItem.size();i++)
5 I Z( s' v, H% m1 s. B+ H6 L {
3 r$ O% l0 P- d* H) g5 r1 h1 S% [ //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
3 \! A& J! n5 N pInvSort->Add(vItem.nIndex);
/ r0 ?7 o* k$ w }& d9 N' }2 S* s; _
BYTE nDestPos = 0;+ P @0 z+ O. `! S1 k9 Y
for (int i=0;i<MAX_INVENTORY;i++)
! H- Q; w8 c0 ], v' \% e {
! W! ]9 C# V' ?. w6 \ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
; u+ v& _# E) j/ ~% i B if (pItemElem)
+ @2 e5 D, ~1 y' \5 Q4 U {4 r1 r, w ?/ G/ G/ L$ H
if (IsUsingItem(pItemElem))7 O! G2 z0 Q6 f, y
{7 R3 I6 R# @* U( P) y" r
//这个位置无法放5 X( J6 I% g& \6 I
nDestPos++;/ \; D5 L) c% p. s" F; C
}# T8 V* n( D3 I: s! G* d: t
}# D' p9 j5 s. v5 g; j7 o+ S
BYTE nSrc = pInvSort->GetItemSrc(i);
! b9 M, }' d- c, _3 a2 H pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);& S- W0 e( h- S5 W0 B, C
if (pItemElem)- i: `# w3 w! @" l: i/ S4 H* p' p* E
{3 |6 u% K& w% a8 Y
if (IsUsingItem(pItemElem))
0 B$ U0 Y1 X: C9 B8 ~* i {
. Z9 b' I. B$ P //这个道具无法移动,跳过
, w9 w/ {6 Y/ [3 u continue;0 |% y' P( A. d& _( y: n
}
1 x' @$ m- |8 Z# E2 i: i* s }else{
' q! S& q6 V& z( ~ //空位置 不用动
" {* o N" V$ |7 @: B& m* k continue;) y" {1 |7 j9 Q7 O ]' ]
}( y$ s5 v- I9 K2 x! E
//////////////////////////////////////////////////////////////////////////, s6 T- Z' F R4 q& L
//开始移动
3 B; B G2 |+ J4 i4 l( L- B if (nSrc == nDestPos)
6 `; f' S; W( k! H8 \" [% d {
/ d- ?9 t( M" A+ o) C9 X7 f //原地不动) ^, z4 Y4 B% |: \6 ]
nDestPos++;
. T5 r& u; E# _5 P- {( ?6 ?7 F continue;
2 Q4 e' v" F8 }* L, f8 I2 G4 l }9 Q3 W9 \* Y/ m* d w6 D! Z, |# @
pInvSort->MoveItem(i,nDestPos);4 s [+ A/ t, A- c# k" J5 F. f
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
/ F% ]8 y c P0 e, } Sleep(5);
5 Z J, ]& s# y# P, g' `; U- M( J //Error("移动 - %d->%d",nSrc,nDestPos); c; T* ]6 Z8 L3 W9 Q7 B+ C4 [
nDestPos++; X9 e7 \$ P* q7 P) p4 ?( e
}9 p: A4 u5 I/ i0 w* B
//取第一个元素的信息
f" ]; v0 U8 e! D /*/ u4 q9 N7 H" ]4 A! A
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)0 I/ H. N( U4 b8 } S, X
{
1 y0 n0 ?& x+ ~9 L4 Z, m Error("Move - From:%d,To:%d",vItem[0].nIndex,x);8 ^. Z. r2 ?% u; N
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
' x- `! u% m% C7 {7 s6 ~ }
: b7 F5 C; K7 t */
) H% b7 B' a. X8 Q/ T" W //////////////////////////////////////////////////////////////////////////! p1 v$ e5 d) R/ q) J6 k3 k
break;1 C) C: M+ Q+ h+ @8 }
}4 j) w7 p% T- h4 u3 x7 T
} 1 `, C2 G1 E7 f3 e
}0 L9 i$ m' y5 x1 H, I* \ F5 w
m_wndMenu.SetVisible(FALSE);! E$ ~, H+ ?8 ~( U
& Y) ^8 x4 Y* l4 b( y1 e
--------------------------------------------------------------------------------------------------------
: z" u' d+ S) N8 c7 T/ p搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
, T4 y, o8 {9 ]2 Y% F, }+ O, V3 T{
4 i7 G/ h5 M Y3 l" cBaseMouseCursor();
/ \# L" j- _& z/ E1 w' ^$ d9 n}% ~9 J' M& l9 \) {
在其下添加:3 ~0 C. ]$ ^$ x
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
+ G$ W! t! n; B4 c5 y* T0 R0 E, \" {{9 P2 h) j2 u! p5 A: k
m_wndMenu.DeleteAllMenu();
. u) z. ~4 G7 o( C N, _3 u, Km_wndMenu.CreateMenu(this);3 v; P1 w: A) d
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
: g9 w0 m4 K9 A7 {. y' k0 y
9 q/ W; i+ _% {+ S% ]if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
- [5 u6 T! v: _, ?: Y$ f{ Q( E1 q P6 ]* _1 K- o
//P以上级别才可以删除所有道具' f: x4 O8 s6 r6 O! C9 D
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
- U+ U# v9 D, p0 K( u4 W' f5 e}8 o9 A- s: V" f
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
E/ G* @0 g, R1 Hm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
8 Q6 Y! J* c7 W* M- O" Vm_wndMenu.SetFocus();
( N) w: v" r; a5 T}) k- \. s7 Y6 e. c1 U! _
------------------------------------------------------------------------------------------------------------! s4 Y' J3 X0 P+ X; W
*************************
* [6 X1 m# O3 H4 DWndField.h文件; [( Q6 K$ Y, @: L" h
*************************2 E* [( x0 }9 ~$ u. u
搜索:BOOL m_bReport;) |6 w1 e; `2 C# N# x! d2 v) `
其后添加:
( q" a; L$ O D# ^CWndMenu m_wndMenu;
3 R7 z# E! s7 V3 K+ ]! k搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
9 X% f' ?4 s' X! p# U其后添加:( E4 \% n2 G4 U1 r2 i# p q
virtual void OnRButtonUp(UINT nFlags, CPoint point);
% i( R% ?) i6 V8 c3 i
4 U) b: J& g9 N; V% ]: k5 P2 N% D
5 f% D- n' \* u9 d; }/ {1 I |
|