|
|
源文件中_Interface文件夹下WndField.cpp文件
. @1 T' G! S# F# {9 V搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )$ G% @& | P. w9 j
+ R2 Z/ P$ N. ]
struct sItem+ E% {2 F: E2 ]1 F- d
{. N# m/ T9 a! F
DWORD dwId;
% I. A: T( {8 `% p- wDWORD dwKind2;; y! l, m# {6 F; f. c
DWORD dwItemId; c, ?/ | b% y: {9 C+ x
BYTE nIndex;
2 |+ c, [2 j' l- L dsItem(){+ G: U) b+ b; e) d, _* U! j
dwId = dwKind2 = dwItemId = nIndex = 0;
: i) _7 T6 e- r1 _ x2 |}1 B$ q- d4 G0 n( }" i& V
bool operator < (const sItem p2)
4 I8 A- A$ D+ t3 `# W! J: o8 ~{
! y: x$ I+ F/ ]+ ]8 Q0 V [ if (dwKind2 == p2.dwKind2)
9 f' I0 \9 ]* h: C" X {( o1 N7 l3 J h A
return dwItemId < p2.dwItemId;
" J* Q; {. ~) q" ` }else{
5 n# ^/ \( Q. ~; |: _ W) Y return dwKind2 < p2.dwKind2;) o% n3 M# }8 b0 W5 x& J- Z
}
7 U) H8 V. D7 j9 l9 o}/ q+ Z) x' A5 M1 @; n
};# q; W# z: D l" e6 B0 U1 a7 b
class CInventorySort
4 N2 ?9 ?) q* `{
0 Z* g7 {6 C. l5 }( T0 npublic:
0 M# Q1 S$ l7 R9 h: d; nCInventorySort()
4 y) m! p6 a/ {' m3 O) m. C- t{
# i) K. E' b( I& j3 }) B" f9 W m_dwPos = 0;
7 p: A9 o' t8 k- o. F, g}
7 \8 {/ O! x! l+ E) J9 F~CInventorySort(){}; z4 ~0 ?5 o$ @# S
private:
5 w; w! F* o8 ?- }. ksItem m_Item[MAX_INVENTORY];//存放排序好的道具信息7 K4 [% A9 [8 Q* d, q0 Z: s7 M% D/ \, s" [
DWORD m_dwPos;
/ z% n$ L+ E* f! jpublic:1 S# z. R7 ^/ o. [5 h1 ^" D" D
void Add(BYTE nIndex)
' g; D4 D2 l$ Q$ P{
; a& ~0 x1 J0 g" C if (m_dwPos >= MAX_INVENTORY)$ i9 b: r1 H( N. V! A! u8 Z
{
1 J; g: F; y% h! f return;$ w4 b' u2 d2 W) L" ^$ ^+ Y* }# d
}% ~5 W+ w" `- Z! P
m_Item[m_dwPos].nIndex = nIndex;) [5 N' N, q! m- y" T
m_Item[m_dwPos].dwId = m_dwPos;
" d- p& L- F- J( b) o* Y+ i9 w) n+ d m_dwPos++;
" l9 B: f# i8 C, G}: k7 p& b1 g1 ^8 S
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
. V% N8 z5 U; @{' j! Q: ?8 \5 v) D
for (int i=0;i<MAX_INVENTORY;i++)
3 R# \+ Q" {) X3 _3 c {
, w; N; H8 E9 f5 u% ~ if (m_Item.dwId == dwId)( m2 m' k4 q! W3 R4 k9 Z2 Y0 ?
{$ m2 b4 m! h6 c' h2 U$ r$ |
return m_Item.nIndex;* Y4 w) V; n' F, Z2 Z
}) V6 G' I }$ P# M; M8 L
}
- P& n3 U% C. `1 ~9 h return 255;
. f* z! R* X3 }}
# M& d: ]9 e& _; s1 vvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
) _4 l) e- w$ a{
7 m2 M- I2 a8 l+ K) P BYTE nTmp = 0;
- f/ @% {# Y$ p; k: K+ K# @9 a1 s bool bDest = false,bSrc = false;& c! o0 u4 Q/ g3 c( p6 D; `
for (int i=0;i<MAX_INVENTORY;i++). i' o: s- ~ w
{+ s# b9 C& k( ^6 s3 Y2 Z
if (dwSrcId == m_Item.dwId)
" P+ [- U. ^4 L2 z q# H# Q {& K6 V7 o% E0 R, S9 v
//id相等 则 改变对应的dest和src' T2 y6 [+ H" T3 _; ~8 C
nTmp = m_Item.nIndex;
/ D @% i" l4 Z2 j m_Item.nIndex = dest;( ~6 n+ V5 n. e9 Y; r" L7 a
}
# i1 |* `# g1 E4 Y6 p }# c5 m0 F0 G0 `3 ^
//临时数据保存完毕,交换开始9 T/ }2 r& ^1 H" W l' P
for (int i=0;i<MAX_INVENTORY;i++). v) h& _% s: v) c" q8 U
{
: q* e$ I& X" K/ B8 b if (dest == m_Item.nIndex)
+ I8 U) ] i0 E0 E" D/ ]5 L) \ {
9 h2 n" W3 E/ c9 ~3 d, Q3 P6 y //id相等 则 改变对应的dest和src0 @, Y, l& ~$ a% s. |7 i2 q
m_Item.nIndex = nTmp;
% K+ }/ T! q5 J }3 K0 k$ P# E5 _; q8 c8 }6 F
}& N5 v8 @! L) |7 M( ~$ h1 [
}$ o: @3 i; B, P) B% p+ @
};
+ n3 x; H( B0 O1 `7 U2 x-------------------------------------------------------------------------$ {8 P# T9 i9 L* m; [4 X
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )) V0 i& n* a6 u% G
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);% ?# N* X6 c" c$ t o
紧靠其上添加:' r7 \" P2 F* F# Y
if( pWndBase == &m_wndMenu ); a2 L3 a9 v" A7 z$ _
{( J. z6 B9 } N: o% r
switch( nID )5 U2 s! K' w7 |, _* b
{
) v0 A! o0 k7 O, m+ e case 2:+ I/ m" a, R4 H: l4 f% F! m+ t5 e
{: s ?7 T v0 c* g8 `6 r
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);# h9 U2 X/ [+ y U/ ]
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)). N8 U& H; S) ]0 ^( I7 ^
{
# |5 N0 `; ]1 Y7 A: E$ ^ k break;0 Y4 l* D& r7 D: G( e9 g
}% }/ ?& g# s8 W& Y
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)& _6 Q* a Y. V# L' a. C
{/ W. v0 X4 m2 }1 C3 i+ c
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);$ o8 o% A# L# @3 Q5 l2 t
if( !pItemElem )
. U* d+ C, i5 O1 H/ a continue;
& K& w+ `9 Y" ?) I if(pItemElem->GetExtra() > 0) U7 A% ?4 N4 s0 X
continue;9 B, ~* t1 L( b& @' _; {9 j3 Y! ~
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 0 P" w: d4 Y& [% @0 c& u$ ^
continue;, i- d) X7 b* d
if( g_pPlayer->IsUsing( pItemElem ) )
: j# v5 l7 U8 x continue;5 @0 f, g) \( S" X/ y$ ?& }) N4 O
if( pItemElem->IsUndestructable() == TRUE )' V/ ]/ M$ y5 M( r, q( c% g9 z
{
1 Z: W( ^# o$ \: u# p* j* J g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
4 w7 Q0 }6 ]) I" X9 Q continue;: k! M8 {# O% D3 O
} {+ d/ m9 ]: c: h1 [; I6 b' g
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
9 X. V& t5 ^3 d$ a* W+ s$ K3 ~4 V }( y! r8 p& b% u0 X! s
break;
( }, F+ e6 W8 h" q0 q T1 _% N }& N2 a7 m; @( Z# T" x* x
case 1:
4 d$ ^* ^- b: D {# D# T$ g( t- B2 d8 e
//整理背包
i: p2 t7 O6 S# e$ i( H* @. L& V: s /////////////////////////////////////////////////////////////////////////// q$ }, y$ v* D5 u, E4 a
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );+ K- Y3 ^1 r8 U$ V
//////////////////////////////////////////////////////////////////////////+ ?# G- Q [* \- _
//////////////////////////////////////////////////////////////////////////8 v5 w+ ?1 \( c& z
CInventorySort* pInvSort = new CInventorySort;
; W0 M, ^) a" C( l vector <sItem> vItem;
3 J" M% Q: G5 A vItem.resize(MAX_INVENTORY);//初始化大小, R8 U8 |8 l( D t6 `4 j( W
//////////////////////////////////////////////////////////////////////////
: R) n/ ~, O) Q+ s* E2 ~ //填充数据% R D4 d! Y8 K7 u6 y
for (int i=0;i<MAX_INVENTORY;i++)& _) u- [3 h, m4 v
{+ H- O7 w8 X- y9 v3 G! {) T3 z: J- W
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);5 V8 Y8 L) a' H
if (!pItemElem)
6 y0 c" T! w. r& S1 J+ h% W( U9 Y {
) Y) P( c5 \- C/ ?! N+ N vItem.dwKind2 = 0xffffffff;
, R. c. y6 T9 D9 C# H. ]0 @& R! A" t' z vItem.dwItemId = 0xffffffff;* L" n0 t. k3 V2 x8 t
vItem.nIndex = i;3 z: A1 f, t2 N- W5 S: f
}else {+ h* s& c% A E/ z
ItemProp* pProp = pItemElem->GetProp();
7 O+ K9 {6 @' | vItem.dwKind2 = pProp->dwItemKind2;
# n6 h' j- ~" R1 ~: r5 }" U vItem.dwItemId = pItemElem->m_dwItemId;4 ]# ]2 r" r! X( K, ^- d
vItem.nIndex = i;8 |: ?3 B# m# O1 \0 i: ^
}# y3 q; o& {: m9 `) }
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
0 q- ~) l# Y0 A) e1 j }
& n: n* x4 Y/ O8 Q //////////////////////////////////////////////////////////////////////////
( @# \5 I; p& O0 q. H sort(vItem.begin(),vItem.end());//排序( F6 Z% G) o) d8 y
//////////////////////////////////////////////////////////////////////////8 ^+ D9 d) }' P6 o
//交换
) B2 R3 A: H- X( l8 |1 ?. g+ m for (size_t i=0;i<vItem.size();i++)/ I! l! p6 I) J& F1 U9 o
{
8 p6 L3 h0 ?0 W //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
- f0 [+ l8 K0 [/ T* X pInvSort->Add(vItem.nIndex);1 `% e& M9 {% J% r+ U1 X' h3 H
}
( S4 z% Y& z7 u$ d- n i8 S BYTE nDestPos = 0;2 F: C) v# m, u& n0 p6 s4 h/ h. l
for (int i=0;i<MAX_INVENTORY;i++)
9 |( v; J7 x( m5 E {9 W5 a2 K# c6 p+ L7 m( y# O( j; F
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
2 _9 f8 m& c6 j2 F% M1 { if (pItemElem)
' J' H8 p! Z& Z& J" z; y' O9 G {
3 w- `# O, `2 ^, [+ q+ q5 U if (IsUsingItem(pItemElem))3 i' w9 k4 F# A4 k) f2 s# `
{
3 m# e- J' ~/ g0 | //这个位置无法放
, @- P/ \/ u! w: ^! o nDestPos++;2 y" k9 e; Y0 | F' ?
}, `& q* P2 N* }- n, q( `
}
* b! y2 F5 ~3 V! o BYTE nSrc = pInvSort->GetItemSrc(i);
8 j' i: k5 r i+ h+ z pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
! e, }" i( K/ i, Y if (pItemElem)
4 d9 Q2 I* z9 n" e( M5 |9 B4 P6 d2 L {
2 t2 @/ M. Q# f9 D: D! R1 O2 { if (IsUsingItem(pItemElem))7 V4 H6 F/ a9 C" n/ s8 _
{
4 k4 t7 h, ^9 u //这个道具无法移动,跳过
# W0 c5 N9 H$ `$ m. ?. s continue;+ \$ I& J& Q) e; S
}& V/ g$ D+ f' N# J$ s6 U2 p
}else{2 G1 d1 M, ]7 t3 v, q. C/ e
//空位置 不用动
+ P; g! I; @: j( i# m continue;/ S; n* a$ L/ ?4 o, E& I
}7 S" q- f& S; R% W' k8 D
//////////////////////////////////////////////////////////////////////////
9 }5 O' R, G) e4 N //开始移动- E/ x% x1 R- }* ]
if (nSrc == nDestPos)
( d, e3 {# @/ R$ \9 ^4 Q$ B {# v4 ?5 G& e# } n2 O( N6 Y: e
//原地不动
4 m) x+ S: d6 a; M6 U$ _: ~ nDestPos++;
2 g$ ^4 o; w9 l5 F continue;
c# k, G0 l1 s3 e# k4 G/ ? }
8 ]1 k( L; s+ b pInvSort->MoveItem(i,nDestPos);
% _' E/ J0 C. M" r g_DPlay.SendMoveItem(0,nSrc,nDestPos);
2 u2 [4 p* U4 |4 C5 E# K$ u4 s Sleep(5);
( }: a5 ?* ]0 s- T$ V# z //Error("移动 - %d->%d",nSrc,nDestPos);
3 ]; y& t" k& g8 E2 m nDestPos++;$ c9 m: q+ B7 s& x( \3 |, Q% c" U
}
! C* x+ E! x9 T3 K6 }, G //取第一个元素的信息
2 Z6 [2 E9 O$ v* W$ H; R8 m- P /*5 T4 M5 [0 N! k! z6 n& U2 x; Q4 n* p2 c
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)& p7 J) B2 w5 i" }2 ]% ~; E
{0 b, c J+ T; [5 w
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);. @5 d! y1 r8 F" s. Z" d# d
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
0 _6 m0 H+ M* c+ l( u }
2 v2 c4 y1 {9 i7 b" T */
3 `3 g: u W0 ]5 o1 _: A //////////////////////////////////////////////////////////////////////////4 d6 G& [ M! k& \9 l
break;
( ]+ \5 B( [8 A1 A* p }
6 R* L1 P& }$ Y# H } 5 o9 }% M1 m! F4 z# i/ x8 r
}! ?4 b9 R* O# v5 Z
m_wndMenu.SetVisible(FALSE);
: I( v k, J8 Y. }% E2 Y* L: U, Q) k4 l4 T% C0 J& b" `
--------------------------------------------------------------------------------------------------------
3 b; ^+ _/ o, M [9 G" _搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
4 J' g& W9 Q% S1 \: c# I3 T. t{
# d# O* Q c& P3 s0 \% DBaseMouseCursor();
6 ?: k; ]' j9 Y}* e" o- B' X+ h0 N: v7 B3 x
在其下添加:
' t6 g# e2 ]( b9 Cvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)2 M# Y; D7 R# {0 P
{0 P n' G/ C" g# _& z/ \/ J1 O* h- ]
m_wndMenu.DeleteAllMenu();
* e* `5 Y6 x+ h& i& pm_wndMenu.CreateMenu(this);
$ A# w$ _) U9 y/ B: W8 Mm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
" B+ F* S7 L4 f' C9 ^* e8 E2 i' E( o
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))/ ?& T/ \) Z: h0 g2 J0 J: e; Y1 f% b. h
{
- R' E- ?- l+ C //P以上级别才可以删除所有道具
. w/ G4 a- o6 l m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");$ ~; T( `; r! d J$ N2 L
}, i7 C! N" d8 d5 ~5 ], m2 ?
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
, a! O( ?& f* nm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );6 g4 u. L7 l) v8 y# r
m_wndMenu.SetFocus();
+ ~7 {, ?* n0 n5 ~" i6 e}
% R+ o) u- O2 q1 y* e7 L------------------------------------------------------------------------------------------------------------
) @" p/ u1 m: Q, y8 @, K*************************0 ^4 w6 N0 |7 X4 V
WndField.h文件$ W, ~. z8 n, D
*************************
- D$ r7 d: E; ?5 J搜索:BOOL m_bReport;
) U6 G% A5 {: ^其后添加:) G) r% _5 v1 v3 N$ ?
CWndMenu m_wndMenu;2 x3 _3 n' Q' Z% T! B. n
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);8 U1 v4 a% [( w
其后添加:# L' v1 g! S7 D9 `1 W
virtual void OnRButtonUp(UINT nFlags, CPoint point);
2 Y' B0 D* e; F: D( L* } r$ j) F+ ~. k0 |( [
8 {: n; D- `* ?+ N! s# E |
|