|
|
源文件中_Interface文件夹下WndField.cpp文件) ]0 u& M6 T2 D1 w( a9 b
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )# E/ ^$ M( {6 L
- L1 e6 f# ]3 z2 P# }. Ustruct sItem p& |0 V; D0 ?- ^, c# J- ^! V
{5 Q- ~; U4 B, S, T9 Z9 W- a5 ~0 F
DWORD dwId;
( g0 I% A9 X5 V7 _6 BDWORD dwKind2;( u$ m- q1 T' C% D7 F9 M6 G+ |
DWORD dwItemId;- B" M1 \& P) P, y6 h( w
BYTE nIndex;
7 X1 u* e* Y {6 m9 L: Q" X! hsItem(){
3 h4 D Y2 O ~2 D ^/ e. \/ K dwId = dwKind2 = dwItemId = nIndex = 0;
6 w( [7 K7 x% t2 e$ q% H9 N, [} R% a4 S3 n9 U
bool operator < (const sItem p2)
+ z" X2 u2 T% K1 y{% M, o4 Q( i0 J1 n) ~) {0 Y# C
if (dwKind2 == p2.dwKind2)$ v) o% b) G: Y1 A
{
& l/ C3 B! O$ `# ?/ F+ I return dwItemId < p2.dwItemId;
; P/ r5 v* C9 W7 p }else{9 r7 c4 V8 L9 [( R* @, L
return dwKind2 < p2.dwKind2;
8 `/ [1 p% D- D* \% i }0 O) ]# T, t. T
}$ g+ F: K4 k+ y5 _8 G# W& M+ x
};
' N6 \- X4 R' \8 Pclass CInventorySort
9 G+ z8 E7 D: J" x' A{
& I4 n# P3 G: j! ]public:
. W! c. [& ]' L+ l# i$ \- lCInventorySort()2 c( M+ M' F) A- y2 N5 \
{
2 R" e. B2 n7 G8 \2 g2 z m_dwPos = 0;+ |- x* p5 [0 ^% a- ?
}7 g( G9 _% Y6 ` H6 P! W
~CInventorySort(){}
( L! p6 C4 `( _' E5 J+ l7 Qprivate:$ w3 J( K' G5 q& i% Z L
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息/ p9 R& t' U" p! L2 [0 j
DWORD m_dwPos;
% G: R% Q. ]5 u; upublic:
5 w2 | Y R7 {, _void Add(BYTE nIndex)* O0 u1 \& H6 \; S: a
{
# X! v) O8 ]& A4 i+ L% Y$ p5 w/ ? if (m_dwPos >= MAX_INVENTORY)
4 F) b0 q2 u% @5 h( @. z {. F( y% U8 @6 \& w
return;. d1 n- q( N, W
} Z) Y1 Q* ]. a$ m
m_Item[m_dwPos].nIndex = nIndex;# d" \1 A9 p9 @$ B2 [
m_Item[m_dwPos].dwId = m_dwPos;
9 K ?" ~, D {9 S, o m_dwPos++;$ q' F& G, H2 h/ p. W
}$ O* L/ \& l/ Y: w
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
$ a0 _2 \2 p( ?5 ~3 p! m{5 g- h9 d( R# g7 s$ y( u
for (int i=0;i<MAX_INVENTORY;i++)
4 d' n/ B! Z: j+ c/ ` {
5 Q- S, e) m: a+ A# x8 C. `4 s9 x# ~ if (m_Item.dwId == dwId)1 l' B2 h e- X2 a4 K5 v4 ^
{1 D* c4 S. e3 W" a
return m_Item.nIndex;! W2 c8 e ~/ _4 z+ c
}( }1 r w d% S/ d5 W/ M+ `
}. A$ H- C1 k% S
return 255;
% W8 C5 E/ E d2 F0 u}
3 r3 \: z+ x: Q5 d* Fvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置. R% r# t4 T4 D1 N& j) w: C: e3 [
{2 `, `/ F' i" p5 k
BYTE nTmp = 0;
/ ]4 @# p" E9 D0 w' O& T bool bDest = false,bSrc = false;
. ^5 _9 }0 K1 a9 F8 e for (int i=0;i<MAX_INVENTORY;i++)) F. u: C5 N! h( l5 X
{9 z- [* ^ Q2 _9 h6 @+ O+ l
if (dwSrcId == m_Item.dwId)0 o1 t* z: h2 l! l- ]5 Y, q& }
{3 W* Y# n- Y& _
//id相等 则 改变对应的dest和src
2 T& |( l' _& T2 n+ i% q nTmp = m_Item.nIndex;
. b! S8 {3 K8 t3 Z9 x9 W m_Item.nIndex = dest;. ]: B: h" c3 ]* W" M+ u
}
7 M/ v0 {) C1 w" j* e }) z" ~, t0 ] d! f
//临时数据保存完毕,交换开始
7 A& b- V3 T |* R for (int i=0;i<MAX_INVENTORY;i++)3 X# p2 g+ u5 C8 c/ m5 _7 _3 z" F
{
, j: d7 `9 W+ M5 L1 i) B if (dest == m_Item.nIndex)
- J& g! f# d; l4 Z2 C {
) Y% X# q' [, O! } //id相等 则 改变对应的dest和src
- ^/ ?4 M% ?5 |( O9 G2 r8 x1 ` m_Item.nIndex = nTmp;
: M0 C) v. ?" m! W; S }7 [9 R+ O" G0 x7 s
}
% ]$ Q# ^4 m9 [1 R5 F: _4 W}
; {3 o& `# T; E3 y3 O% t0 M0 i7 q};
* K4 M c% a* x* K |/ C2 q) Q-------------------------------------------------------------------------
9 w, U) f/ b" r& |依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
1 Y5 Z% t" V3 b* c! W, c+ d+ ?2 D2 n搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);0 x# p. s% b& K/ }5 Q# w7 N, @4 d
紧靠其上添加:0 ]* w# k% [8 ?8 L
if( pWndBase == &m_wndMenu ); m, A$ W3 _0 H# V2 _( x; w
{# D8 o! N- o! N* H1 f% N
switch( nID )
0 q# G( A' U& S/ X {
2 R) l1 c _1 g8 J case 2:' g+ y! Q! W8 O0 E! F# H2 w ?
{$ |; P/ M( ~' h1 q
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);9 S0 a! J2 X7 |+ J6 d0 o) @
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
& h' q1 A. r% `4 F5 d5 \6 U {
. m" E' W# q( L% M break;
7 l; a& {0 Y M0 J( l* E# @ }( F: D* h `( d2 b
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)( z7 `! | Z) H3 u6 ?* w
{1 _. r9 F! `' M2 L' H9 ]
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
6 Q$ b/ t. {7 b) b if( !pItemElem )" J+ F3 e& p/ { n h( @
continue;
* o: ~; @) i3 ?0 X, [ if(pItemElem->GetExtra() > 0)
: E0 v5 x: h& L( b continue;) n' c$ k2 S. G4 o C9 ]% [
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
! {4 W' \4 @3 v' |# S+ K3 y9 w K continue;
+ n. [4 g1 f5 E$ R- c# h# e v if( g_pPlayer->IsUsing( pItemElem ) )
; J' }1 L; p, H1 Z continue;
* K1 h4 U, S. n W9 w5 d if( pItemElem->IsUndestructable() == TRUE )7 h2 i" \. Y% C* [/ ?
{ s: A3 ]% v0 V$ @7 \
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
" h: A- E( L+ l continue;( F* t3 F% T: d6 {; m2 ~5 X6 ^
}5 F6 D, \ S# T' }" ^' I
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
- x) F+ e$ K' Y: z2 L9 v }
% v8 [/ c U! \ f7 P break;
8 G: [3 N; V: \9 o- C }
' O8 Z! k! w# y1 m case 1:' u9 C$ Z# o% q: V/ D- i
{# Q# J1 S, @+ I. e
//整理背包
, v. K6 i4 ^) I1 [ //////////////////////////////////////////////////////////////////////////: @5 ~ [. D, z( A
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );) F: H2 f% Z0 E' [
//////////////////////////////////////////////////////////////////////////
0 a2 B. e/ @- P0 a0 t" e //////////////////////////////////////////////////////////////////////////' f% k" @4 F& Y$ Q( T( \6 K- N
CInventorySort* pInvSort = new CInventorySort;
7 q9 o+ |+ f( l! A vector <sItem> vItem;
L% J: N/ o" r vItem.resize(MAX_INVENTORY);//初始化大小
0 M, V! j8 {2 G: D+ e& R! j$ j //////////////////////////////////////////////////////////////////////////0 d' w' I6 B0 s+ }- {- |0 w
//填充数据
- j8 E% G5 l) x- G: Z for (int i=0;i<MAX_INVENTORY;i++)
; ^% x' f* g0 x b- f/ N& m {, K0 y V+ T# g) R2 i! w# K
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);) [; P! z6 ]# e
if (!pItemElem)7 M$ ?& ]2 p3 m5 O: s
{
1 Y* a2 U* e* y* h: W- V0 j vItem.dwKind2 = 0xffffffff;
* D( F* J7 {/ w; F vItem.dwItemId = 0xffffffff;6 L. y& B, j$ t& ]6 ?
vItem.nIndex = i;
; x( W: t$ Z6 J; w$ J' b }else {
9 I2 d- n' k# q. U$ L5 R ItemProp* pProp = pItemElem->GetProp();, t) @3 o" W7 E
vItem.dwKind2 = pProp->dwItemKind2;
: K- F% m9 R5 r2 e3 W vItem.dwItemId = pItemElem->m_dwItemId;
1 U* x6 M; u( n# v+ Q) r vItem.nIndex = i;. M$ p( _7 c/ y5 E8 h/ M" M
}" J' \1 `, N5 R9 J
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);) d! M6 d2 Y1 L. N6 L9 t
}3 n+ |( j! u; z' |$ H! w
//////////////////////////////////////////////////////////////////////////
3 y, k! y- n, { sort(vItem.begin(),vItem.end());//排序" K3 p; M) L, N- Z7 ~& m4 ?: p
//////////////////////////////////////////////////////////////////////////
/ U1 C7 y* R# V5 W* c h! E o //交换! L! w0 ]" g3 P7 O; {" b
for (size_t i=0;i<vItem.size();i++). u2 T( v9 l4 ~% D% w
{3 X5 `" S" S/ a# Q/ C3 ?! @, D3 C
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
' A! m% V( `) a( @6 b! C pInvSort->Add(vItem.nIndex);
2 @9 |' k' F' K5 p* a4 I }8 r) p4 l2 a# j9 \# C
BYTE nDestPos = 0;
* N% U6 u% O/ G& N for (int i=0;i<MAX_INVENTORY;i++)
2 v5 o" U$ z& o8 h9 B, H) u {0 J! M* I: q! y* T7 R! i
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);! e6 p' X# Q8 b# _5 J& O6 B
if (pItemElem)
. w" k0 ^+ p! k) { {
* A, G! j5 r! X$ l* [1 |$ Z if (IsUsingItem(pItemElem))4 q" N& o0 Z! W: X t
{1 T' M \ H: y, ~
//这个位置无法放, r- h2 R7 Q# V
nDestPos++;* `& R9 B" Z! j. [( k5 D
}
9 f1 a' C( n1 W, \: J/ k' j }
! B* {' w$ z' M- [! z$ m# [ BYTE nSrc = pInvSort->GetItemSrc(i);
; s3 O j' K) P/ Z* a3 i pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
% q, y `% C1 I( g4 v if (pItemElem)
2 A$ h$ n) z) x8 n2 ?3 K {
1 ?" q* e2 c3 H9 E, ~: B& z! m if (IsUsingItem(pItemElem))6 u5 Y# b9 [4 V: B7 a
{
: }6 k& y& B4 Y& r0 ]' I //这个道具无法移动,跳过* s% y8 i7 ^! k) b- P
continue;
) p3 l2 w& |& J: L7 _: [ }: A d- h V4 V
}else{
+ z; n) i: E; w //空位置 不用动
: W6 L" T5 n) M' {$ b% i" W, U- T continue;
7 O s* ]9 s2 n% c! J }
2 H/ ? R& \: c. R( S5 r9 [ ////////////////////////////////////////////////////////////////////////// ^, s/ H, @" i
//开始移动
" u2 h3 o& F3 @$ a' K. L if (nSrc == nDestPos)5 t- r' q/ ~$ |( d- ^$ V- z! J3 `; i
{& \6 f; n. o$ p5 K& [- ^
//原地不动6 `/ w9 O7 O# E8 \
nDestPos++;. X+ T6 F8 h) W( _
continue;& Z& y/ x( e( M* y( t+ g
}
6 G6 e- Z/ r8 p0 H pInvSort->MoveItem(i,nDestPos);
& L3 N' O9 @3 e; P g_DPlay.SendMoveItem(0,nSrc,nDestPos);
( _ v. K; y9 t; K- _; r Sleep(5);
: d9 E$ j7 C- k; W8 {( }2 W; k //Error("移动 - %d->%d",nSrc,nDestPos);" L6 w4 v- X8 e: B2 n- S- [ P* P7 P$ t
nDestPos++;# w$ }2 i2 c$ _/ m& p' t7 _4 W
} H& u5 Z5 s7 a5 M% \' y+ _
//取第一个元素的信息
5 Q' u# A( a' L /*
; C8 Y) p/ e9 w% U; i; T if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
x6 X5 R) C% D( i, I# H {% k6 ~" ?2 T! \0 Y0 r' k( r2 V. N
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);6 W' `( U4 r- J9 _- t) P+ h
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
q& V1 b/ i2 o. I8 K }
0 n: H* s9 r- ?) v */# X) B7 h2 ]+ l& z5 E9 e
//////////////////////////////////////////////////////////////////////////
4 ~% D( W6 A. ~6 @! o break;
7 V+ l3 O. d& |* _$ ?9 o0 ? }& u# Y) Y w" h0 ?. {" ]
}
% d- ]* E& ~) U}% o0 @. g/ `3 `% j6 i
m_wndMenu.SetVisible(FALSE);
) ]( p: r9 l& w0 J8 {! P
7 T1 W3 H0 Z5 m: u7 v& f- E$ M9 o; H/ j--------------------------------------------------------------------------------------------------------
k$ r9 |( F6 Y搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)6 p7 ]; L) O# l6 e8 v6 j5 L2 U
{
4 ~; s8 k2 Q' R6 j5 c5 X1 k5 ^BaseMouseCursor();5 b" i' c% }! k$ K3 ]
}, R1 h) c, h0 m, u3 Z
在其下添加:
3 j% ^9 j0 y* g3 Yvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)* J3 s* F6 _$ ^9 z
{0 N, y% Y9 R- P" i" ^* c
m_wndMenu.DeleteAllMenu(); g" A! g+ A& q
m_wndMenu.CreateMenu(this);
! s* p+ _3 `( y% em_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");: K& r1 Q) C3 A0 u, Q+ p5 c, @
8 ~- q2 \- }2 D- X6 Jif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)), H( s7 V4 y5 U* P# ^5 q
{1 r& J% e1 A3 n/ Y7 f. z
//P以上级别才可以删除所有道具
1 o2 p) e. K: Q2 X/ _. `0 l# c m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");' \1 J" r3 R9 ~* ~
}
2 c) `( X1 g$ C$ l- @/ O# @m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );( o: g- |/ \& j& j
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
0 x h) G0 L6 j. e% jm_wndMenu.SetFocus();
- H& `6 W7 s5 p; }, [}* ^ }* g U: s3 h/ R1 T: N
------------------------------------------------------------------------------------------------------------& D+ t4 m1 s( s/ ]) d& C% q2 z
*************************, ]6 Q( _2 q) ?: U8 \( Q7 F
WndField.h文件8 G3 b8 {2 S. [2 I, A( s
*************************
1 j& q# `( I- J搜索:BOOL m_bReport;( o* S. G& r; g7 \( @
其后添加:; C, v+ `6 ?/ O3 z. T
CWndMenu m_wndMenu;# i& O/ q7 [: K0 G
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
! q* W! R/ h- Y& W: i; _其后添加:) A4 c4 r: o' y; J
virtual void OnRButtonUp(UINT nFlags, CPoint point);
3 M) _ T+ B( d y7 o$ |, t2 G8 Q: W2 B# R& G
5 l8 n+ q$ s1 G" U1 H" i |
|