|
|
源文件中_Interface文件夹下WndField.cpp文件$ x! j2 I; ]+ J+ }, l# A G9 f
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
+ ^ |# v6 l; y" c- N! Z l$ ^, S" |, e" y
struct sItem: A. j) w: @% N! J: c8 B
{
4 o: Y! l2 Y- p( TDWORD dwId;
0 Q6 V5 Y9 E: }4 q; e, oDWORD dwKind2;% N* e5 {4 M. Q: j- e
DWORD dwItemId;8 Q. k" j4 o% ]& y
BYTE nIndex;
6 l3 `3 z( M4 U/ c: F* ^sItem(){0 i1 K$ m+ r( F. |
dwId = dwKind2 = dwItemId = nIndex = 0; q! _4 N, s! p: R0 p" g" E
}: `9 i+ V6 r; ]* V
bool operator < (const sItem p2)
3 \& b0 A c4 [8 ~9 u9 Y8 K6 ?: d{
! v- Q0 s4 m0 r8 T if (dwKind2 == p2.dwKind2)
1 j( b6 R" Q5 i( G {3 C2 N' N; N2 U% U: `" U1 H
return dwItemId < p2.dwItemId;
1 F {9 ^; i3 l$ j7 @9 G( A/ g* a }else{7 J% N% u, b' M. ]7 Z: _
return dwKind2 < p2.dwKind2;
& m x- E+ p8 {2 z; G+ c. { }6 h9 l6 o2 f" t. c4 l2 ~
} z/ r8 n. |! b+ E7 P% L
};
( t( ~8 h7 B; m; W3 @class CInventorySort
1 z$ T4 h: ]' v) C: A{' s$ c, U3 a4 n1 k+ [. r2 b
public:, i/ s, P$ q! c- v: q7 _5 K
CInventorySort()& @# o/ M2 l; V
{6 a6 S% y# t/ H4 g3 y b7 |/ y
m_dwPos = 0;
- T3 K1 Z1 U% s8 ` a) h1 L} p/ A) Q! H: O& A6 S/ S
~CInventorySort(){}" J9 A, S( I! P& ]
private:
! R0 ^+ T* a$ p% c+ [+ z2 jsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息9 h# C, A0 D4 L7 n0 p
DWORD m_dwPos;$ z2 G! e- v" K
public:8 S+ s+ v/ _2 {
void Add(BYTE nIndex)
/ ~# \9 W( l% f7 H' k0 S0 F; a{
2 X9 @1 P( b& j% P6 ~2 C( N if (m_dwPos >= MAX_INVENTORY)) e( ^, b: L2 t9 ~, [% Z
{
0 {: q+ I3 `0 | return;+ f1 c% W, [* }: U9 q: t' E
}
7 y: k8 c1 h2 s m_Item[m_dwPos].nIndex = nIndex;
) j5 M( W6 V9 t, w* K2 V0 c2 ~ m_Item[m_dwPos].dwId = m_dwPos;
! @' J8 g6 d" i3 {; F5 ?- Q+ Q. u m_dwPos++;
2 A9 F0 O, ]- b; |) j) s}
& Q3 A( w) H7 e, A! w+ m/ uBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
: @8 @" j1 A) J9 d4 ~9 A' _, ^{
) `& S" P N5 A0 C- L. L( { for (int i=0;i<MAX_INVENTORY;i++)+ T0 R2 f- M& v
{$ j% y$ G4 o" W% {; Q' @
if (m_Item.dwId == dwId)
* E( I: H; n4 S3 w' { {" e3 j: w1 o) r5 D/ h$ p9 J/ i, x
return m_Item.nIndex;9 D) u. }, B$ @0 x6 `
}
+ @/ {# G8 F' ]4 [" Q }
; j( p' W2 J E$ ~ return 255;
9 B$ E" w/ X& s}
4 P; G- @4 P) Svoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
7 q! }" i" B4 S( a, U{" y/ B- F# z# R Z
BYTE nTmp = 0;# ~/ b3 i' e5 M- |7 c
bool bDest = false,bSrc = false;
% w6 a7 O3 C2 J1 v4 y3 }+ f* ~ for (int i=0;i<MAX_INVENTORY;i++)' b. R# a; D' f; f2 h3 ~/ ]
{
( i. I5 Y8 m; t7 u3 q: Z if (dwSrcId == m_Item.dwId)
+ B, G% }+ v4 h+ D, U {5 e+ E. g3 N3 p: C
//id相等 则 改变对应的dest和src' n& ~ H9 X2 u0 s8 f
nTmp = m_Item.nIndex;
0 ?* E1 @% W C9 Q2 G- u m_Item.nIndex = dest;! [: X$ |7 H4 F" F" G
}3 M: Z d4 x1 t9 z- M% a3 F
}
1 `1 n3 a$ } r: S //临时数据保存完毕,交换开始0 |7 E% W4 T7 M! L m% v5 x+ N8 {
for (int i=0;i<MAX_INVENTORY;i++)# M- W* f; ]) C: @
{* @2 ]. _* ]( v R' A) S$ n- R
if (dest == m_Item.nIndex)
3 E, O7 t; g) F/ h {9 a5 [3 ]8 X L9 C U6 h- j; u
//id相等 则 改变对应的dest和src# F( T+ O* c1 M7 Q# P
m_Item.nIndex = nTmp;6 @4 z0 q# l/ D0 ?2 j
}, Y. {+ ?+ l" V4 p/ i9 r7 z
}; D# F( C' l" x2 I
}
" O' @* m. z4 p};
' j8 V) T# \2 |0 m4 T% V$ p1 ?+ B-------------------------------------------------------------------------& M& G" p5 f/ J5 x
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )( D+ b( _% c" Y0 i6 N: ]
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);3 G3 M4 s0 F# x' z8 C& V
紧靠其上添加:
1 G6 v% T& C% aif( pWndBase == &m_wndMenu )1 ~4 I/ L8 T7 \
{
2 ]1 `1 l7 ^! Q, s# N1 j1 a switch( nID )
1 d- `$ f8 K7 X9 U) W. z {. z1 k- P ?1 U B! {
case 2:, a, Y9 N& P- u0 g, n% l2 ^& N
{+ w$ W* s; s* ~
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);( k$ |/ G. a* v/ A) d
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
6 T) |6 G% `, K! _( t { \6 ~* B5 ^& u# G6 K
break;
7 c/ y( P% M" X: I! O+ u }
6 Y1 H3 ^* T9 J% ^! M+ p for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
( ]8 b) C& i3 s9 L% l9 t {
1 ^9 ~8 U# B9 B7 o$ H& } CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i); N* o8 I/ a+ L) E& j
if( !pItemElem )) m4 W* l) e/ r7 o' T' ]5 b' t) F* K
continue;% Z& C2 i( D3 q8 z1 q: v2 U R' U
if(pItemElem->GetExtra() > 0)
$ ~* N/ p I' n+ a( x7 s continue;
8 U+ ], ~- V* ?3 C) q m+ t if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) $ N2 _( }+ g2 E& c5 q! s
continue;# B6 }, q! c5 e1 S* U$ f% G' s
if( g_pPlayer->IsUsing( pItemElem ) )) L7 T' V1 p3 r& o! A: G }) X
continue;5 l6 |, u0 ^( t
if( pItemElem->IsUndestructable() == TRUE )
) E3 u$ ] D( L& a- @. I: }' X {
0 Z3 A' L1 d8 g% Q% { g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );& O: w( X; ~: O7 v1 T1 k
continue;
. r/ z m% X m4 i% \% E" t2 W }
- y5 M7 E7 C) C5 c! K3 j2 V g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);- k4 W+ h: L$ Y+ p. Y, _6 Y
}
A* [' r+ l1 r* Y! w9 i- z; n+ }9 G break;
6 L$ a* n: A& L3 W3 c2 W } Z+ a" d& i/ l8 p9 F( Z. w
case 1:
0 O/ W9 \3 M: e4 H {
0 E1 K* i! H* R% e/ { //整理背包0 \: E8 `% g4 ]8 c! X H1 y
//////////////////////////////////////////////////////////////////////////
5 G% ~3 K2 a0 [/ ?" S( N5 n! l //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
* Z% U- i9 D$ I$ F, g/ @" G //////////////////////////////////////////////////////////////////////////( p& n/ q; x2 ?9 q
//////////////////////////////////////////////////////////////////////////0 I, G0 V0 K% C$ e. ?1 r' Y
CInventorySort* pInvSort = new CInventorySort; V7 J- }7 ~9 i w
vector <sItem> vItem;
& e2 z7 P, g8 h$ t. ] vItem.resize(MAX_INVENTORY);//初始化大小
: w! P. ^- ?3 Z- A" h3 J$ H1 S /////////////////////////////////////////////////////////////////////////// N4 h) a+ `# R) @& Q
//填充数据) p) t6 e# C4 ]$ q/ I Y7 R- ~+ A
for (int i=0;i<MAX_INVENTORY;i++)
& R! {! t: l. j. R- L* X {1 |, `7 q+ M+ h# e
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);% n! q! D: D5 N0 b' ]
if (!pItemElem)
' [7 @6 B0 o+ n. v5 W7 f {. D2 {) u4 p, |6 `, A
vItem.dwKind2 = 0xffffffff;1 i# \0 M" n% C7 u3 c' c1 _: o; p5 L0 ~
vItem.dwItemId = 0xffffffff;
7 v3 e9 ~6 i- ^ vItem.nIndex = i;
) f4 e( m( i6 a# [; d8 i2 N }else {7 w3 T4 v; l2 y) r
ItemProp* pProp = pItemElem->GetProp();
1 f+ R! f1 [2 D+ X6 C( P vItem.dwKind2 = pProp->dwItemKind2;; N0 O v2 M# U$ M
vItem.dwItemId = pItemElem->m_dwItemId;
- O& |3 \* ]5 ]* y5 h vItem.nIndex = i;+ @7 k& I; ^: i+ k7 X @6 e/ E
}
. z& m+ V& ^: L; a7 h; B" O: Y //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);8 H7 F$ p$ E$ Z% D8 {
}
. t2 \: H) ?. E% g" q& @) Y0 x //////////////////////////////////////////////////////////////////////////3 n# j, h! Y* |, |7 X2 B
sort(vItem.begin(),vItem.end());//排序$ b% N& d/ t- \* N) j0 e9 P
//////////////////////////////////////////////////////////////////////////
# E/ r( g: B% I4 K4 j9 V //交换3 Z! I4 s) m, ?% s
for (size_t i=0;i<vItem.size();i++)
. h& E, Y; Q% V# H* }9 C. J {
0 v: V5 L. e1 r, x //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);- p# \* f! N. p4 [( ~. w( A
pInvSort->Add(vItem.nIndex);
5 e& s& ~: d, \ }4 U) {) q; h) X
BYTE nDestPos = 0;
" @/ a* \2 S2 f5 L for (int i=0;i<MAX_INVENTORY;i++)
) z2 L+ z; n4 e+ Z$ l+ Z+ y {
# l8 E0 S" ]9 i6 ` CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
% w8 O' a8 Q& V+ x4 q0 H1 d if (pItemElem). N" }4 g) m* ~/ T
{4 M! W# D8 p3 D! v+ ~9 [$ x
if (IsUsingItem(pItemElem))
8 r2 r/ ]! x# r {
+ y; P4 n3 P ] //这个位置无法放2 p$ }" F8 ?6 F8 r* K
nDestPos++;% T8 u0 L! \: Y7 X. u
}6 P5 |# N$ m) ]; P4 H$ m! c0 E
}- m: |" A3 ^4 K& |) u
BYTE nSrc = pInvSort->GetItemSrc(i);$ ~- x) [! b5 e! C
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);5 A& x1 j. @; I# O( B) F B
if (pItemElem)
5 y; g: T: ~4 o0 S+ F9 g/ o {
& T X+ B9 `5 }5 K1 W q0 i) r; x3 s if (IsUsingItem(pItemElem))2 @" }4 m( M8 D1 `& c
{
7 ^" G$ i. Q2 w- O //这个道具无法移动,跳过) O4 c @/ Q* l$ S% I3 s/ U
continue;
7 x- V: p( h3 p3 a9 | }
7 \, ?6 e& J S$ g% O6 ^9 d' n) R; u }else{
* }3 b& H% d7 m! @5 x& ^5 \ //空位置 不用动
( s" F+ l+ g+ } R( O* |! j continue;) W( \9 |7 S; H0 i
}+ A* w- M* g, k3 I$ X
//////////////////////////////////////////////////////////////////////////- t; \, F5 Q% C& \3 ~" W
//开始移动* e [2 E& x; ^
if (nSrc == nDestPos)
4 |$ v5 a/ ^" d1 e) S* U9 B/ D; n {
- W' B. K. ]' P- m0 g. B) f9 H //原地不动
" A* _$ v; E- D+ i+ P/ {7 T8 n5 ] nDestPos++;
/ S& t# |" [) o( O: a& p! h9 B continue;
$ |. [( f& f& s }
& e9 }5 |4 k; L: l pInvSort->MoveItem(i,nDestPos);
; |' f/ M" { r/ o4 ?' b9 ` g_DPlay.SendMoveItem(0,nSrc,nDestPos);
2 w7 ?* @* w9 d Sleep(5);
4 P! S+ ~1 Z& J0 p- t3 o% E) h //Error("移动 - %d->%d",nSrc,nDestPos);$ ?+ X4 h, m: k1 N$ f1 |
nDestPos++;
) {0 w9 k# a6 }6 T* \! V( [4 ^$ J }
- v! Y8 V0 Z* X //取第一个元素的信息; m0 _+ R \5 O1 h
/*
, N( O( c' L% X7 U if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
" e# @* P9 C+ h9 F {4 ~8 b. a2 \* C9 p0 y% B
Error("Move - From:%d,To:%d",vItem[0].nIndex,x); ]) l9 t* F3 Y' m& A
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
1 C2 v) A0 T: q1 I3 J( F! O9 m }6 W7 H& k. U0 q( p; o$ Y& @
*/% R" @4 B9 c, C6 ] }; I
//////////////////////////////////////////////////////////////////////////
3 e! t) K! m% |4 z# U i# } break;+ l# I v& J( c
}
& P2 P* X: o4 W% {' R }
5 H4 A: z5 J/ B. t}
2 D; Z- {' y7 R6 gm_wndMenu.SetVisible(FALSE);! R+ y) }8 @9 }: N8 M2 B
7 f6 l N) I+ O$ F2 X! A. D
--------------------------------------------------------------------------------------------------------! {! \, P/ j% b, {- n( ?8 R
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
2 h& O) c0 D/ \! W/ u( d: [{( t& `3 A* c: v5 S! f% v8 v; C
BaseMouseCursor();
i* X. Q" y. O2 ~- [: k6 T}
8 P1 l) q- j* O; q& G在其下添加:9 \$ w7 ]) }, x+ G+ t6 U R
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)$ P/ o; z/ U" h( ~) I4 g0 F
{! j6 M( p8 P# A3 c- F
m_wndMenu.DeleteAllMenu();: k D1 o" N6 h( y3 ] ?( X9 k; s
m_wndMenu.CreateMenu(this);/ d' J4 v& F) h! Q: p% D5 _
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");% g. P; K7 E7 m- s6 A0 e `9 K
6 k' s: c3 G+ _! ?. W
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))/ w$ ?5 G1 W5 T
{
* l4 n2 d% s2 I$ l) A, m, E- }. g! i //P以上级别才可以删除所有道具
0 w) |! ~6 n4 H m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");9 n4 L0 W% T7 u* b- d
}; J" _1 E+ c* _% B
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point ); u/ ~9 k- {9 d3 F; _5 m
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
% O# r; h& v9 i, |m_wndMenu.SetFocus();
7 u$ t3 _. }( V* X& H}
3 L7 ^' E3 C; M------------------------------------------------------------------------------------------------------------5 p7 S' [: J( V. X9 b
*************************
- @4 a6 [7 p s( e$ [! V+ b$ [WndField.h文件" e$ m' \1 R1 n: k0 w
*************************
/ g" l* B5 V& X* P% Z搜索:BOOL m_bReport;
7 z% T' H: _! a其后添加:
~$ D% d- B$ _. t8 T4 s& UCWndMenu m_wndMenu;- b5 b9 ?- X" n
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);3 S. A3 q# x/ ]+ ~6 @# b4 q, @
其后添加:+ h) ~. [. f" N/ c3 T5 V. t
virtual void OnRButtonUp(UINT nFlags, CPoint point);
& y6 F6 v1 {- G. C- I' m4 K! L) p3 J+ o) E! t
& \" U3 n; B/ J( O
|
|