|
|
源文件中_Interface文件夹下WndField.cpp文件
' f: q' ]# u0 l) h搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
n! L- e" }4 E9 [0 _% R2 O3 w; Z" q: O0 n% r; N' w2 x1 L( h6 s
struct sItem
6 T. V! f0 ]* a: H D{
5 z1 y7 }$ ~6 R+ ]6 b0 IDWORD dwId;
; A& h2 C( a5 ?DWORD dwKind2;) M% ^4 s( r8 w9 X8 p
DWORD dwItemId;
1 Q5 M( W( D$ d7 c3 r0 Q2 fBYTE nIndex;0 Z+ L& I7 f" t1 }2 h# _8 \
sItem(){: ]2 _# d) X. G# y+ _6 p
dwId = dwKind2 = dwItemId = nIndex = 0;) T/ `8 G* W. T( u5 w+ o) S
}4 h% C* y) R+ N4 v" m" x, G4 I
bool operator < (const sItem p2)
& s( n [4 P+ T{
0 Z" m. K' ~- t' L if (dwKind2 == p2.dwKind2)* K' m& H L c8 ?# ~. P
{
7 e) ]: x3 P S; V6 J" f2 V return dwItemId < p2.dwItemId;
! N2 P- e" t1 `% g; Q# Z. J+ u }else{
: ?0 k7 p; |! q/ D6 N return dwKind2 < p2.dwKind2;% I9 s% N! s/ g& h! h" h
}2 u( ?8 s# c7 Y; i
}
) F; R+ J, }" g};' f# g& q: y+ A" ~
class CInventorySort
: i8 I+ l1 E0 i. d! V! v( u4 m d$ |{$ y: t" o* ]& D. m6 E
public:
9 g- S' _9 u5 FCInventorySort()
7 X6 M: E" ~8 X{% h* h- \! r/ H8 Q5 N
m_dwPos = 0;1 i) J8 _# j5 h/ p% M: w/ e
}4 x- y R/ d/ n0 D4 Z; P, T$ A% \4 z
~CInventorySort(){}
( A* r6 F6 J- x6 Zprivate:
0 f$ x5 J; q4 w: z; g/ RsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息" D8 ]% N! w% O: S, |# o( B
DWORD m_dwPos;
! v1 G" \, L' [5 z. Ypublic:
7 W- |; a, {. _8 z2 T1 j8 wvoid Add(BYTE nIndex)
' D( g% F: V" C( M. u0 G8 X{% }' p. a! g& N1 c% W f7 p
if (m_dwPos >= MAX_INVENTORY)* w+ _8 D: {* E; |8 I
{
/ M, o7 J6 H5 p- P& q0 N' d1 X return;
1 h. B5 @" F, P) e5 x" k }
; o) Q" O% ~# R* ?' [. D m_Item[m_dwPos].nIndex = nIndex;1 o- T4 z: j+ c4 |$ q5 i* P9 e" e4 F& J
m_Item[m_dwPos].dwId = m_dwPos;
* E3 R8 a5 a9 z4 }: A+ }, W, w m_dwPos++;) W3 Y- f" n( M1 @; p
}2 l9 _7 C7 C" P- Z# O/ A
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
# a' `$ _7 Z8 l8 p. M* ^{" m/ R1 i( d8 D8 J
for (int i=0;i<MAX_INVENTORY;i++)
( w, }! B% a ]0 Y2 ? {
7 a$ S# ?* Y* {' g7 O% I5 R if (m_Item.dwId == dwId)
* I$ T! E+ i7 R+ e {) @9 d. ?# J0 U+ N8 T
return m_Item.nIndex;) a, C/ b; L4 `3 s' R- H6 _
}* s# _- m; {5 F% p8 U
}0 M0 i8 w6 g) @! m
return 255;
% A- W+ c9 h" V& F}
" N* X) |0 H! l! B3 qvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
! e8 `7 K m8 L* |: ~0 N{
3 V6 G( g9 g4 A6 u9 x3 [ BYTE nTmp = 0;
, W R9 M4 L5 C! V% k- ^* b, y% A% j' I bool bDest = false,bSrc = false;7 }9 B1 B) T" n. G. G7 U- P. j
for (int i=0;i<MAX_INVENTORY;i++)/ Q/ C" Z I1 Y" m) s3 u
{
! y4 J7 }3 b I0 N( S& E if (dwSrcId == m_Item.dwId)
) }, x" Z! z& M2 S; C* p6 [ {
7 t; W: r) _* v, ~4 Z3 Y //id相等 则 改变对应的dest和src
) {1 s& \0 ^6 C: Q nTmp = m_Item.nIndex;8 t/ I5 m' O: P1 v2 F$ K% u
m_Item.nIndex = dest;7 V2 |. ^7 C/ ^2 R+ Q* N
}( D' H' A' @5 r( |
}
% ~7 D( ?' P- p7 ]1 P, x //临时数据保存完毕,交换开始- I/ z& E9 b" `! L W
for (int i=0;i<MAX_INVENTORY;i++)
/ X: G* V6 s% q; l0 U a {
9 x/ x+ R6 A% ~9 d if (dest == m_Item.nIndex)5 O; }* D# K. J4 V$ P# U& h3 o1 d
{
; a" |4 k8 t( ] ?+ g2 B3 D3 [% v //id相等 则 改变对应的dest和src( @! o! |% M8 A5 G
m_Item.nIndex = nTmp;
* D6 g( R" G5 p7 l: {8 F6 B } D2 T8 E! D- E2 `
}
3 N( L8 J- j# a, f2 o( |}
" w4 z: `0 f6 e( M5 p: n};
$ \) v8 `' l& `-------------------------------------------------------------------------
' }4 o0 i) ^- c6 p- i. p6 g# z依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )1 V8 \* W5 h7 y. g
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
" d6 R& ?! u& u( P紧靠其上添加:
+ ]: D" X R' a# R) t3 A2 yif( pWndBase == &m_wndMenu )
9 ^& k% R) {$ s5 R% F' f: o8 {5 b{
$ j/ W. O! V" p6 l switch( nID )8 t& E7 S |# w. k& X
{% e' n" L$ W, p2 C$ S% S
case 2:% B7 v6 q# {! c: ?# y y5 h
{1 G$ k5 y) @) d$ z
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
& \7 b2 C1 O% b$ i4 K4 \2 O if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))% H# S+ j- G: u& F; u- f% B1 p
{
; ~; _3 R, a$ D6 x- U5 C) s break;' y7 S& O' x& i0 h' _+ `0 a
}# H6 Q# l% V6 _2 `
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)& L( B' B0 _+ w8 A
{7 s# s; L: Q* Y" ^
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
3 f5 q! f7 K( k1 }$ S$ V& R if( !pItemElem )
/ `: d8 u1 x' E- f continue;
3 Z" H9 ~9 f: _5 L5 T. {, o if(pItemElem->GetExtra() > 0)
& l3 C9 J x) H0 o; s7 X2 | continue;
; [/ x: q* o; m3 a+ L) U+ e if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 0 Y- \: a9 Z1 m/ H: Y
continue;1 \ w7 c2 j$ s. x M4 O+ }
if( g_pPlayer->IsUsing( pItemElem ) )
9 I9 g5 K2 |! a2 N+ \/ w continue;' o# O9 g3 b4 L
if( pItemElem->IsUndestructable() == TRUE )
: q9 z/ Z4 X4 T7 Q4 y0 K {# }, i3 N" G8 E( \, o! c; {9 {0 ~
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );# e/ E! y' ^/ X
continue;5 w2 J5 R9 E: v8 A. l7 G
}5 C! D q6 \6 Z
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
: Z: A1 M% V' X( k' ~ }% J( R% S/ r5 C0 `0 C% e- b
break;; N8 e: Y& ]9 P+ x. L
}
' o( q0 q* p1 Z( A# F5 |, c case 1:/ Y6 j3 D: P: O
{: L: i3 C* ^ p( ^8 q, i
//整理背包5 r8 @% ?3 t* z
//////////////////////////////////////////////////////////////////////////8 }) K8 W! {" J3 K
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
8 r, h2 P* @, h- Z7 J //////////////////////////////////////////////////////////////////////////
% ]& d# U4 k( A //////////////////////////////////////////////////////////////////////////" m8 b) f* k* u4 ~
CInventorySort* pInvSort = new CInventorySort;
, p! e% B" l& B0 f& q* L vector <sItem> vItem;! U; G4 {6 K9 k9 m1 B
vItem.resize(MAX_INVENTORY);//初始化大小
5 I. J- u4 x8 d! ^6 s1 [ //////////////////////////////////////////////////////////////////////////
4 M4 U! o% H/ j2 R //填充数据
7 s1 F4 ^8 x4 E; U+ ? ?1 a; J for (int i=0;i<MAX_INVENTORY;i++)! F R7 i( g: r7 i
{
8 V6 X+ @* Y$ [$ ?9 V; C CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);) X! W g D5 b( S3 e
if (!pItemElem): a1 Q- @4 }5 ?4 c* }. G- o* A
{, O* b* _4 G0 r$ B. F
vItem.dwKind2 = 0xffffffff; N2 ?* N& h; E2 g/ Q
vItem.dwItemId = 0xffffffff;7 J4 p, R: z% @# Y! v* }6 m+ A# ~
vItem.nIndex = i;
& \* O: k' c4 e2 `; N9 q! ^ }else {5 b" K! x+ `# t
ItemProp* pProp = pItemElem->GetProp();
7 U. ^/ t$ |9 c. n. z2 S9 o% u vItem.dwKind2 = pProp->dwItemKind2;
$ P) K: ?6 [1 g vItem.dwItemId = pItemElem->m_dwItemId;
& p; F/ j) P" X7 n vItem.nIndex = i;& w/ R& k" r3 P9 n4 r
}4 H0 R( n3 [2 m; Y0 |- @
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);3 K; ^& p+ R& ~
}5 l+ ~: |) ^% U3 z
//////////////////////////////////////////////////////////////////////////
% p9 q0 A# q- K- h" W; H$ P sort(vItem.begin(),vItem.end());//排序, E- o$ Q; F2 t- G
//////////////////////////////////////////////////////////////////////////$ \4 S% B' L2 k' X, V5 m6 w8 ?* Q9 D
//交换
# |6 X2 e( R6 S& n for (size_t i=0;i<vItem.size();i++)& I8 @. V8 N M. @2 X* l, s
{
3 }# u! j- `. B$ g //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
- ^. l: ?- i6 H% j5 z, W6 V7 F3 j! | pInvSort->Add(vItem.nIndex);: v9 K) R7 Y! a& Z( h2 v
}/ ~" g" [3 v' Z3 S A$ Y
BYTE nDestPos = 0;
) P; S. h% {: h V8 C4 y3 f for (int i=0;i<MAX_INVENTORY;i++)
/ @$ d g2 `' N& x3 d5 @3 v {# `+ d3 l3 N* `( z8 n* d4 Q1 c
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
9 Z q" B: Z4 Q% v4 R$ L2 Y: N2 L if (pItemElem)2 Z1 _& G( M" N2 A$ i" N6 G2 ?
{
& K" P* A2 a4 J" O if (IsUsingItem(pItemElem))
- n/ O2 d" q, E: v3 ^/ u' D4 I5 Q {# J/ `) X/ W: h: O& A0 Q
//这个位置无法放* b9 j* Y, H" }& E; N
nDestPos++;
, D a( V& R! ~) l4 ^; V$ C/ ~ }: D0 ~! v7 c, {; ?6 Y
}
9 J( ~# k! e, t. { BYTE nSrc = pInvSort->GetItemSrc(i);
( S$ f2 P3 o, |: F pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
( w+ ^+ u% v5 F& Z4 E if (pItemElem)* p. _% s2 I* M9 e
{
7 m+ P2 r+ ]. T if (IsUsingItem(pItemElem))8 G3 B0 U8 b" p! ]. U( |
{& Y9 F2 v; a8 M/ y. h6 t
//这个道具无法移动,跳过
) F$ g4 v- v P" M. g2 E$ q/ N continue;/ E! T! ?4 A. @6 k5 t# q1 \
}
% S& T4 k, e2 B- ] o6 j: u5 l6 r }else{
$ ^# c' _' W* @2 ?" C& h2 t4 ~/ w //空位置 不用动
% [4 b8 V d3 J5 ` continue;6 V( E+ r9 o! ?1 [7 B1 L) F
}
7 r7 e6 {9 D% y' t' f p% r //////////////////////////////////////////////////////////////////////////
1 N: R! @8 M% s3 ?" X //开始移动 M2 Z' @5 i" p* b. v
if (nSrc == nDestPos)
! K/ ]6 ?, }/ ~ {. P+ F) f, y9 [5 c- h2 h2 H
//原地不动3 }/ @" O0 ]' h& s4 Q0 c, N
nDestPos++;, e7 d# r8 N- Q" o6 F* o
continue;7 U0 R8 A) a$ ~, V
}
( ~- w# S- L; N; P& ] pInvSort->MoveItem(i,nDestPos);
! ~" @- s5 L6 W6 H1 I @2 {0 a. d g_DPlay.SendMoveItem(0,nSrc,nDestPos);
( k- s8 [7 X4 b/ W* P Sleep(5);
2 V( o! a. E2 u4 U //Error("移动 - %d->%d",nSrc,nDestPos);5 B: e6 c$ D: y4 }3 \0 U x+ W! H( p
nDestPos++;
2 A6 Y# a& `) i1 {) I. H }4 U& {* W1 I" W2 `
//取第一个元素的信息
* b9 d1 u Z/ Z: u' {4 g /*
* P0 n6 q; _; m0 x/ A if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)8 Q" F/ m+ t7 l, q4 a* E
{ F' \/ }' b! f0 H
Error("Move - From:%d,To:%d",vItem[0].nIndex,x); L! u! g6 R/ o/ o; M. m
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
- c. e# k6 ]6 ]0 A3 n* n# E6 h* C }
( B* c& V5 R+ C1 |1 R; { */6 f7 w* X- v: S9 ]( f
//////////////////////////////////////////////////////////////////////////
6 I, B+ V- E/ z' i% z6 i break;& p9 M9 k* I, m$ ~& W3 z' k8 x$ W
}
5 J9 r; P7 z: Y" m }
! g( P; t" z! Z) r}8 h) ]9 B; H R$ w
m_wndMenu.SetVisible(FALSE);
* J: w0 S/ e8 H% W# z: j0 m+ _ x3 L$ Z
--------------------------------------------------------------------------------------------------------
2 ~5 K8 P$ k0 I# N7 b4 `/ |2 e搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
2 {1 B$ }) ?6 C9 ~+ @# {. f{- i8 ?8 j% _9 q0 L0 h# E
BaseMouseCursor();
9 k* d- }9 X7 N( S+ O}1 x! l2 |9 ?7 n
在其下添加:% N2 q" r- N7 s* a
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)4 p3 R7 W5 M$ C$ I: P5 Y+ _
{
) A( y. }% n z6 w- {! F0 W0 z) vm_wndMenu.DeleteAllMenu();
5 _" ?+ W' b& t, wm_wndMenu.CreateMenu(this);5 [ X5 I; V# o' c0 e
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
. e, {0 `6 a' C& m5 A" Y( {# f% u0 v& Y) z+ _
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))0 q; M' G& @6 P4 Z) c3 l, h0 d6 r
{
7 ~+ t- q7 J$ ?/ x //P以上级别才可以删除所有道具2 E6 D7 g% Y# v1 O, m' `3 N9 m
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
$ U! q h! H4 n0 C) W}# {& \7 }* b+ y4 Z- V, A
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
! }/ g; j- w# H7 ^m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );8 Z! i+ r' E1 { j2 W3 P. @
m_wndMenu.SetFocus();$ m$ T- ]( ?+ C k; Z% A8 o( R# M3 x
}% B3 v8 F7 L! V8 S$ \% q7 c
------------------------------------------------------------------------------------------------------------/ H/ N- W% P. z. p% w# p6 A7 I
*************************4 b* `: @, i$ C8 Y- _
WndField.h文件5 N6 d, Y7 ?9 X$ i t
*************************
1 T2 u Q3 S4 S4 X# {7 _搜索:BOOL m_bReport;" H3 ?' \2 e3 t& a! t
其后添加:
& V6 C8 T5 ~& C0 w1 w7 B4 v6 LCWndMenu m_wndMenu;1 W8 W! d% r, q I. Z
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);% l+ C3 k8 ^' Y. k4 \& e
其后添加:; f- Y* m- A9 x& d
virtual void OnRButtonUp(UINT nFlags, CPoint point);
& W) P" ^* A, v3 H- X& v7 ?) Q; ~ w, |+ ?
- a ^ U2 v* u/ o1 p7 }$ D |
|