|
|
源文件中_Interface文件夹下WndField.cpp文件. x) \& A$ O2 R5 l7 `& h
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
! m8 i# W% G" S4 K. {1 c
" f+ \* O. o2 Q" x: L& astruct sItem! u+ g+ `/ Y3 y! {
{! ~3 t2 K; C8 h4 m K, b, A
DWORD dwId;9 Y" w& n( p$ Y1 }
DWORD dwKind2;; U+ f9 ~3 e, C$ H: v
DWORD dwItemId;
, G& ~2 [9 o% T. z# C! @4 jBYTE nIndex;. o* W# q2 d1 @& L7 `
sItem(){# E" i2 `) _, j4 |1 o3 z
dwId = dwKind2 = dwItemId = nIndex = 0;
0 j8 L; \# V6 W, W( |! V3 b}
! N- x6 e& Y3 J& O6 x) P3 kbool operator < (const sItem p2)
9 c. N+ [1 X {& e( w{! i3 f8 g8 w K: B
if (dwKind2 == p2.dwKind2)
S8 l3 }- J l! x8 K { v) l5 e+ f9 H5 z* D3 t1 n5 \$ I
return dwItemId < p2.dwItemId;2 I P' b' S4 l, w* t, X- P9 \
}else{
3 g4 Q. y% n, O K2 ?- ^" q return dwKind2 < p2.dwKind2;
" A* S4 Q# }" T- t }
" Q, M" s1 X5 \+ H}
. s" D2 T! x8 E. u5 ]* Y1 ~};
: }; T2 i0 `* H4 pclass CInventorySort: f, m! z- Y9 W
{8 ~$ r3 M# p* S. ~9 q8 \
public:
8 ^# l: B, z/ c0 Q6 xCInventorySort()
9 Y5 P; L, a3 _{6 x3 }+ n7 V$ m+ V- J& U5 P% E- t
m_dwPos = 0;
+ L# { I, F6 u4 H* ^% A}1 s' O8 N5 m+ q/ f) T8 s
~CInventorySort(){}! q% L9 A3 @2 G' G1 B
private:
- g) N3 B$ @- b4 msItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
1 j0 @6 I' O0 uDWORD m_dwPos;7 A/ q+ a) r! E" H7 y" P
public:
! x; f* s e4 A4 i1 [/ nvoid Add(BYTE nIndex)
/ Z; I& t* A* O* i/ S; b{8 e# @5 ]5 `% ]) d z' y
if (m_dwPos >= MAX_INVENTORY)
4 N% G9 E$ v, ~" o; H {1 J3 r( ]5 @, @
return;
% W) x8 G, i7 V! I3 a }/ p) ` O# d l! G3 h
m_Item[m_dwPos].nIndex = nIndex;
# J0 I L- Y, W4 h/ l6 H m_Item[m_dwPos].dwId = m_dwPos;
# ^ U# d# Q. w& e! c m_dwPos++;0 U I( v1 _4 U! h# `
}9 y# K* n; u" F3 o& m Y3 G
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列7 d! G% Y3 ^) h" X
{+ E7 s6 p1 `/ R+ ^" e+ |! a; ?4 Q* {
for (int i=0;i<MAX_INVENTORY;i++)2 D1 V, }; P2 z5 a, `' m" y
{2 v+ ?: F* U' s6 H F
if (m_Item.dwId == dwId)
& [" T: R% O2 Z6 b0 b {
1 m- H _: c9 i! C& f return m_Item.nIndex;5 ^6 b& i' M8 ?, d9 c
}( u0 q& N/ J& G+ Y
}
; C" O1 y2 h. n* M0 R6 h return 255;
5 E* m7 u7 m, b. R4 e I}* N/ x7 C+ v+ s, }/ a/ D
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
; u+ \* F9 p, i; z R# _0 Z8 l+ P! K{+ `0 V1 x7 v% a6 L0 ]
BYTE nTmp = 0;, R0 C: o/ f! P* J/ Q
bool bDest = false,bSrc = false;
1 N1 I" Z' I; Z4 y7 d- \ m8 | for (int i=0;i<MAX_INVENTORY;i++)& s& g' a; c3 @; c; B( X
{6 i- |6 ]& l" i- H. l* ~: s4 s4 e* O7 L
if (dwSrcId == m_Item.dwId)# h1 A4 j! G+ U$ Y
{( L: [! N+ S1 n" b
//id相等 则 改变对应的dest和src
6 O8 W& f$ Q( F& [ nTmp = m_Item.nIndex;1 s2 z3 n, S/ ~8 v3 G$ s& r( y
m_Item.nIndex = dest;
% o7 w( Q. Z" ~ }* }5 {, D3 i# y
}: V1 V8 y: C4 f$ I# p4 b
//临时数据保存完毕,交换开始1 D2 F2 v' T8 m2 i7 W6 ~
for (int i=0;i<MAX_INVENTORY;i++)
% ~6 H* f/ c' r3 S$ Z& k5 Z6 c7 Q {
' Z* Y) D: I5 n( O9 r# L if (dest == m_Item.nIndex)
' o, M) x4 \6 I3 N5 }( i9 ^ O {1 D$ `1 a3 K; y" s- F$ ~# o% c
//id相等 则 改变对应的dest和src6 g6 p, Y/ B7 p1 [. Q a1 L' `
m_Item.nIndex = nTmp;
( Y! Z2 P6 D& h+ \ }
z- W! F, `$ B8 |9 a }* u8 E4 J3 U3 \; E4 w, O
}, C8 r7 \9 r8 j" w+ {' ]2 R, ^
};( p: v* H: W. y' }, Q: T0 l+ E7 P
-------------------------------------------------------------------------! f5 i: X" \2 _8 e
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )% A" `! H) M9 P2 e
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);; X8 A9 E* d. V, _" g
紧靠其上添加:
0 r) W4 }# m4 ~! j g' c- _/ m) c; lif( pWndBase == &m_wndMenu )# M" `+ B B' G1 q8 B
{, N$ }! M9 Y0 \. X( `. i
switch( nID )
/ R. q* Y# P( X/ [4 x. s {
( X2 t' {) Q5 y0 ?- ? case 2:
' g6 c! {% e% x+ U( H {" v- D7 d2 c5 [% M! @ b
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
/ H: A0 T6 I2 K2 i5 K2 | if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))! }0 w' `7 |! d; S2 M7 U
{
% c+ p" s3 f/ g7 L5 P" K C z break;( d2 i6 c# y4 Z
}; a! I7 l. x. ~* O
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
3 b( j9 O- D7 ~. u: C( p- o" i {
3 ] J% A+ v: J! w) k' X" R6 g CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
# Y7 k' v* P Q0 Z p if( !pItemElem )7 X- f" k# i' _8 Z% E
continue;
- @$ {4 v* V2 c8 B4 Z* @. l if(pItemElem->GetExtra() > 0)
" D; ~ f) K+ q: B- D continue;5 m& a1 p8 e( Q- p/ r2 G
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) $ K( f6 V$ N% U$ v/ n/ y- ~
continue;
3 J r1 o% T' e( \ L) } if( g_pPlayer->IsUsing( pItemElem ) )! @" S6 j9 d u# k
continue;) q/ ~3 C6 b& m
if( pItemElem->IsUndestructable() == TRUE )/ H2 e# S1 Q: f) i; G {
{& ~" @( n% Y0 Q( n- r
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
: I7 }" a. Y% O: t continue;
+ W4 e- L% h9 G* c8 m% Z }" J3 ?8 H4 i, H; s! p+ ?
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
6 q( ]9 |. ]1 I$ q, o }8 L5 C- X/ m9 s, Y. u" Z; g
break;' h' j2 T, I& q0 _9 u/ e: P
}& p, y# ~ ^) `/ H2 B- C! o
case 1:3 h6 \3 t* B9 z+ e" N# r$ M. C
{
& w" t# b; b, c5 a9 [, ~ //整理背包7 X I4 N% V0 ^4 V9 f
//////////////////////////////////////////////////////////////////////////
( o" N( [9 w0 x //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );+ N J- l5 o5 p9 d6 r0 X. {5 s' ]
//////////////////////////////////////////////////////////////////////////
! t1 ~3 Z2 Q8 E1 }: _ //////////////////////////////////////////////////////////////////////////* E f) {: C: ?6 w
CInventorySort* pInvSort = new CInventorySort;
! `) A! a- _# i- [3 y& h vector <sItem> vItem;
$ p/ P& q- B7 E0 M; o vItem.resize(MAX_INVENTORY);//初始化大小; [6 v, v' e) A X# B; c; A
//////////////////////////////////////////////////////////////////////////
; H+ O$ O- `. Z+ `, F: k //填充数据
7 g" e: S8 M. C1 N for (int i=0;i<MAX_INVENTORY;i++)- t* H7 J' t) q9 b& s' @. k {
{
+ `' O9 c' {4 O% j CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
( U+ k9 \; [; k% b% ^& v if (!pItemElem)8 |! d |$ h. { ]9 L0 g
{
: a: ^7 E" Z# C3 X6 {0 P, z! C( x! z vItem.dwKind2 = 0xffffffff;
& n- c/ D+ q, O1 n1 C) b- e5 t7 C( H6 [ vItem.dwItemId = 0xffffffff;; {" b, ?0 o% x$ r, v9 G
vItem.nIndex = i;
8 T% N4 C0 F6 q7 `. U" z& i! ?8 | c }else {
* ^1 Q( }6 E0 t ItemProp* pProp = pItemElem->GetProp();
5 G6 D( y$ j4 o( ]8 P" ^$ Z' X$ @ vItem.dwKind2 = pProp->dwItemKind2;
5 K4 v& w" P9 ?9 B& E; ~ vItem.dwItemId = pItemElem->m_dwItemId;
8 j% V" J7 `& e vItem.nIndex = i;
( G* h' b# b* Q, N }
% `1 z/ Q2 v* c+ m; N j. P7 s$ A //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
! i+ v" T* {( G( s5 u }
0 S- e" H' H F7 l$ S, a' g //////////////////////////////////////////////////////////////////////////
R2 t6 {' l# j' X7 i4 }6 J0 A% U sort(vItem.begin(),vItem.end());//排序" X0 E* n" U5 L7 ~! w2 g, j
//////////////////////////////////////////////////////////////////////////
& J/ D& [) f H" h J8 _! k! A( e //交换
; c5 |7 a0 N4 T0 z for (size_t i=0;i<vItem.size();i++)5 Y7 r o: Y* z( C
{
- n% k. w4 P4 F n# m# u9 x //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
) C; q& J- x* q6 B* j pInvSort->Add(vItem.nIndex);8 ^: Z; p7 k% ]) D7 R
}
2 n8 i! k; R; h0 ?2 C; G8 W" W, ] BYTE nDestPos = 0; u8 c, r! N+ |! R9 R
for (int i=0;i<MAX_INVENTORY;i++)
* E2 N1 o7 R1 ^, M$ C {' Y l% D1 ]! {3 Q
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);6 i2 R& A- r- S5 [' ^
if (pItemElem)4 d' e* x$ m- U- C: m9 D7 i5 N
{
* g7 Z. h$ w0 g- O# w! K8 F4 ~7 \4 p if (IsUsingItem(pItemElem))' F) g+ B2 @+ {% `+ ~
{6 V' T+ |- r6 h- z: v6 _" m
//这个位置无法放
. M) H3 q& ^. b; e3 q9 J4 N nDestPos++;2 x0 U9 ]; g% H! ^7 ?
}* m" R1 K, R) j+ F
}. F1 |3 Z \; x
BYTE nSrc = pInvSort->GetItemSrc(i);
- X# |$ A' v, q& K2 B pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);; ?( ~+ F' X. w4 J) \9 E8 f" \
if (pItemElem) [% Y* K. d% C' e
{0 e- p" K' U# _! ]4 y- u
if (IsUsingItem(pItemElem))5 h6 y; p5 k; {% i5 V3 F! ~3 K
{
( z7 H% y& y! ]2 o //这个道具无法移动,跳过
: E6 T- x5 H6 Q% Y, W continue;# e" [' D+ |; }% M/ p+ ~. ~
}( ?- K* ~( T9 C- D% V% y
}else{
! u; N+ D" ^+ z6 `* V: }6 V //空位置 不用动
* y7 i$ S% m0 g' Y9 _4 n8 B continue;' t& Y1 F9 D3 l3 l
}4 d5 i/ M! k$ u- ]
//////////////////////////////////////////////////////////////////////////
3 p9 [ S6 o4 P" O& u //开始移动4 v7 [6 e- ~3 k* Z. B: w: {
if (nSrc == nDestPos)
, d6 v+ R. W7 q7 d2 R# M5 o- Y! S- g {
7 u5 H0 k) g( A" G //原地不动
, a% P( i5 p- {% l# x nDestPos++;
8 ^: D9 y$ {( `8 K continue;# J' _+ f4 N7 V" C
}
9 k* t, M0 I8 @# y2 c$ q7 D( {$ L pInvSort->MoveItem(i,nDestPos);& U- C4 w, T$ G9 q( N
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
' i9 w% [2 }: v9 W- S2 l; ^# _: z Sleep(5);! t! c8 g) b2 e! X& `
//Error("移动 - %d->%d",nSrc,nDestPos);& T$ I: j$ `3 I& o I
nDestPos++;! A0 B6 A4 w/ I3 j9 k
}+ _; K7 T! J+ k; G# b
//取第一个元素的信息/ P" `& M& h2 q: Y R* @) T# G
/*
2 O: U! C9 Y% M; o if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)7 a' G& B+ r) S7 r8 U
{" ~3 [. i* y1 P2 c( c
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
( Z# F9 }8 x5 t+ U8 }. E2 x g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
* m2 C2 T$ b0 Y }4 C1 k5 W* u) I8 S0 j C7 c: s
*/
& {" q- q* }9 V- O1 n //////////////////////////////////////////////////////////////////////////! ?( L7 m) G$ T. u+ @. R+ Q
break;! B- Y- G- d6 p: B. R1 s* g. j! r# G$ E
}
% r2 Z; N# ^8 a } # F. X+ ]' \$ @
}
6 ]/ r7 A4 O: k% t9 w5 }. Bm_wndMenu.SetVisible(FALSE);5 L) D4 E5 Q$ P3 c( A: E
# n6 f7 Y) f" W- f7 R--------------------------------------------------------------------------------------------------------
6 z2 [ a9 S) O& B搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point): T5 _6 ^% C% I$ K8 Y) M( S
{
. P+ c0 [, I! J3 F/ DBaseMouseCursor();
# i4 J' z4 Q9 n* Q, _+ C8 w}
$ L- m! c W. n) a, m( {0 D5 E在其下添加:" P+ w! T% ~( ?$ ^* t; ]9 B8 b' k" E
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)) x; z/ g3 W6 p5 l- r7 P' F, G; C
{
- s7 a/ w% P, i1 v5 V' t3 Zm_wndMenu.DeleteAllMenu();9 _* S4 D9 d9 t( P
m_wndMenu.CreateMenu(this);( q) ?1 l( }+ f9 b1 \4 o
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");# s. f& s' r: v# Y: F6 H
: y* v) T# u5 W
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
; i' \. B B1 j$ ^. z- J: X/ T& A' U{
/ P. T. F* v, |) Y" O, ?9 |5 T //P以上级别才可以删除所有道具' t1 v; f2 [9 I* ]$ R
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");& B+ {. r8 L0 m- ?
}
x. S3 F. n+ q N+ X; y0 Em_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
& k5 e' m1 [9 Q& W L3 }m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );4 I% b, y9 z* ^, Q
m_wndMenu.SetFocus();
* D" `. i" U/ R" l2 k7 p}
1 O- f8 Z5 e1 m& a------------------------------------------------------------------------------------------------------------
: k6 Y9 r/ d5 t9 i7 n. j! O*************************5 b2 A# |# K% x% L9 Q. y. _- b: g
WndField.h文件( Y5 B) [; R* a. R# W5 H
*************************
% O! B; a5 |# k* n! |搜索:BOOL m_bReport;, G0 S: c4 E% S+ k( Y( E
其后添加:
. A T5 w2 {& x2 f2 E4 c, OCWndMenu m_wndMenu;
6 z2 A6 I8 Y1 x7 L搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
+ Z$ S" [2 K* D+ ]9 o* ^9 m其后添加:
: i1 {+ p( ]- g( L* O9 ]virtual void OnRButtonUp(UINT nFlags, CPoint point);: F- s: W9 q+ ~. \+ }
) g/ \+ l) \) G
/ g2 S9 q8 u3 H+ x1 N6 k% B |
|