|
|
源文件中_Interface文件夹下WndField.cpp文件5 H8 Q* m2 z" K; i- A( c x) L5 C
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )! ^, G( [7 I2 E# @
; h$ ]- \2 `9 B/ z" B3 g5 tstruct sItem
! U2 m- R# }: T# ?7 F" [) y7 r+ [# N{
. k1 v. g9 J6 e# x9 r; V/ d& B2 RDWORD dwId;6 _* A, n N: c! Y& {
DWORD dwKind2;
+ W, A3 C% S2 }# y( N+ FDWORD dwItemId;
* N5 ?3 H, E" n( ]0 cBYTE nIndex;( E( k) X( z+ ?* I0 f) g
sItem(){
/ K, p; U( K! D& Y! f4 j6 ~* e dwId = dwKind2 = dwItemId = nIndex = 0;7 @, L7 y$ I7 o' t
}
4 U/ k8 x- R6 o; J& H1 qbool operator < (const sItem p2)8 O: t6 u- |, y$ a
{6 f' d; r/ d' l$ x7 J
if (dwKind2 == p2.dwKind2)% c; r: r$ w# r3 Y/ m P
{
4 Y: A$ z. C8 R r9 l [ return dwItemId < p2.dwItemId;$ Y6 B+ A' u5 q3 l$ q2 U+ ?
}else{% E5 c K7 C+ `4 S0 X8 O
return dwKind2 < p2.dwKind2;
# d8 e) M+ e' i' H( c8 e/ r% i6 ` }( Y# K) b8 ]. `/ \! u
}
+ P. L. v; I/ C Q& q/ B* w" `; q};- C+ a J/ ]) Y( X! n0 g
class CInventorySort
2 B J+ w; {. U, y1 C8 S{, l8 F$ o2 f) b* b% I& {. c4 N- S1 d
public:
5 B2 p; x* M; \$ G& JCInventorySort()
4 o+ \9 U, Q0 K' J M{
$ d9 X5 T8 g1 z5 m$ Z4 } m_dwPos = 0;9 q9 L+ V( J3 o* n z" _$ {0 O: C* R
}1 K. h) A6 ~! k) D7 u, H8 e. H1 u
~CInventorySort(){}: w& d+ S% Q" ~& F) u& D' j& i
private:
# S _! |. P, u1 @! v' y UsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息- L9 j- a/ i: f2 D
DWORD m_dwPos;
% \: `1 H, I4 o0 b- j+ B5 e. m8 y4 epublic:
& k: L9 ]7 W9 a5 S; M' evoid Add(BYTE nIndex)* k* @/ ?# X1 U7 ^0 L- I# N
{
+ ]' b" Q1 O0 J, K if (m_dwPos >= MAX_INVENTORY)
6 _4 @' ` b; I, l n& T7 x {
& T5 k+ R7 d2 D' P$ ` return;
" K3 ]% [! D) } }
5 ^/ B7 X& l6 F" P0 ? m_Item[m_dwPos].nIndex = nIndex;- b8 P+ L4 g2 t8 N5 r3 ?* s
m_Item[m_dwPos].dwId = m_dwPos;
, F! }. O; }. g$ B m_dwPos++;' i$ D3 E6 |5 {8 D) h# D
}
\; z2 {. r+ q; i. GBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
4 O! z# Y$ b* |0 ]1 q{
$ [3 P1 @; @# S4 Z; d for (int i=0;i<MAX_INVENTORY;i++)
( m1 t; ]6 R1 ?+ j e" U9 } {
8 k# Z7 z9 {2 E; O if (m_Item.dwId == dwId)) q% Z$ I3 x, H" g: M1 a* H% H
{" i# S8 a* @# o1 w/ x' F1 t* P a
return m_Item.nIndex;7 R+ V8 D v# B: o2 l+ X( d
}
5 t8 I/ @9 {4 w' j* R0 _ }
& M% d. C1 L1 l1 N return 255;
1 q* J# K, a. A6 x2 g; \ t9 l& A& R7 @}, A5 k7 ~4 Z. [3 W' y- E
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置" ^' |# s& k2 h$ v" q
{; Z4 w1 ]+ C5 R' B
BYTE nTmp = 0; |1 S/ _" a% @, t# x* N0 y- N) R
bool bDest = false,bSrc = false;+ r& J/ H- s: I9 p) }2 u
for (int i=0;i<MAX_INVENTORY;i++)
: P4 F G. z j {
; @9 V2 {0 s5 P0 d; ]" n+ ` if (dwSrcId == m_Item.dwId)
3 o3 a7 N. G7 c- \ {3 d9 B5 Z2 U7 `; ~; i
//id相等 则 改变对应的dest和src
7 k/ a* p; y+ v1 R9 r nTmp = m_Item.nIndex;
4 O n) _4 Q }2 ] m_Item.nIndex = dest;+ @% l: j+ n! d; \; [/ P
}, z- o6 Z% }/ }+ Z @9 |
}
5 I( Z: F" r( l' g k: d9 c2 }( { //临时数据保存完毕,交换开始( P5 `% j7 k& G0 E) w0 Q- l
for (int i=0;i<MAX_INVENTORY;i++)
) G! l/ {! l$ q( J {
9 ~: Z/ @" ? \! h( E if (dest == m_Item.nIndex)
1 J$ F7 H( O# i( f" r5 n& @" a1 a/ Q {
' | q {" O- P" [# q //id相等 则 改变对应的dest和src
3 ?! O$ _; G! N0 d m_Item.nIndex = nTmp;, u1 J) B1 x, r G' K$ _" {$ a6 V
}
2 r, ]- ]) i4 l4 o `/ ~ }
2 u% f2 X6 ?& _! E2 t}
6 U" U( \/ I3 C/ X$ x6 Z' C7 i" u& i};
) j) H w8 F, O- ?+ f- I-------------------------------------------------------------------------
( A! A% J x! Y' s依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
8 ]9 @0 }. c6 Z& `搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);: y+ ]; }2 Q: Y* o7 j! m! B
紧靠其上添加:
2 E8 T% [! b. r+ ^3 E6 h0 N& N& n% oif( pWndBase == &m_wndMenu )* S9 ~) S8 N( P& n( D
{
- J3 z# N, @ B( Q6 v. S switch( nID )
4 y2 M/ j$ j* ^% N% E. F4 O0 J {' p( y; L% y- P% c! n3 T7 s! L2 E! B; }
case 2:3 F1 Q: i/ x: S' M% {
{' i8 Y. a, O* Q- K0 y
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);" J2 w5 g' y$ A8 m! h! m7 F: D
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)) z$ m: }" m \" u; s
{
" r* O* k( x& M: {0 w. d# b break;1 h! X; R S4 ~
}5 P% o1 Y/ [$ V5 ~9 r2 w
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)( y# Q; r3 o9 J& t8 u( ]
{* n; P4 E' l. M J( t F' I' q
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);7 Q8 j+ a1 w& {
if( !pItemElem )# A* J, R, I# [" ~% Y3 D/ P
continue;
, z% G. r8 D ^) } if(pItemElem->GetExtra() > 0)/ B# U4 W% S; H$ \ Z1 R0 d# O
continue;4 L. f9 r/ \/ ]( }" {
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
1 C s8 z# [* \$ J9 Z continue;* w1 n( a: R( V+ B2 h) j: R
if( g_pPlayer->IsUsing( pItemElem ) )/ q$ h/ I5 [8 E2 i7 ?5 V# i0 S7 O
continue;
& s! b0 @7 ^2 u. D' B2 T if( pItemElem->IsUndestructable() == TRUE )
. V) ~4 M; W4 ?1 u* u {
( t/ { {# B j5 P4 o' r5 {( c9 S g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
6 O4 R. j, k; t. y# q( U. Z4 G! K+ l continue;3 Y! S6 {# V+ W" i# g
}
/ W: K. f" _! q- d4 V; L' m' F& K g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);, ?. Z2 c" |) }; v( t
}- _1 C& {% n" E: J% z
break;& d2 W f$ K2 Q
}; u. e" I# R. t3 u+ Y8 f4 j
case 1:% M; N0 y( y6 l" V8 n0 N$ ~
{9 Y4 _, f+ n: i! G0 e
//整理背包+ Y$ R6 A, W# j! W1 @
//////////////////////////////////////////////////////////////////////////2 {1 \; F3 N1 k- m$ o i
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );( T6 ^0 B3 V3 z# ] z) |
//////////////////////////////////////////////////////////////////////////
! o5 S0 l/ F. J$ G, q% o) y/ [ g //////////////////////////////////////////////////////////////////////////* |( c8 T4 k3 G% x6 U
CInventorySort* pInvSort = new CInventorySort;: W% I/ E7 T. [9 |" C! B2 _2 Z
vector <sItem> vItem;
7 |( J q1 a5 Y7 w6 V+ i vItem.resize(MAX_INVENTORY);//初始化大小
2 i9 N9 f9 m, i+ r& q //////////////////////////////////////////////////////////////////////////
% K: B5 p4 f4 s8 o; \: e //填充数据5 e4 g' k5 S6 [1 A5 g Z4 M
for (int i=0;i<MAX_INVENTORY;i++) K4 k( T: c! p5 t
{* M1 B) X, B T; a I* U
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
: T. N) ?3 u+ z4 p0 B. |" q if (!pItemElem)* c7 w3 ]9 Y5 M+ H
{+ d2 N0 D! c. V! P3 S* P2 S1 f
vItem.dwKind2 = 0xffffffff;
L' y7 \; g) }6 K K vItem.dwItemId = 0xffffffff;
^: ^7 { ^0 Q vItem.nIndex = i;
9 \; [+ k9 I1 e! c8 S' R6 ], ` }else {
5 e5 r' c" R( u9 i" I4 ` ItemProp* pProp = pItemElem->GetProp();" T% I4 i {6 }' l$ {% v7 b0 f
vItem.dwKind2 = pProp->dwItemKind2; v1 d6 _8 d. s% h
vItem.dwItemId = pItemElem->m_dwItemId;
' E6 E- Z0 r$ V! w; k vItem.nIndex = i;1 M: D2 q; V1 k }" D
}
7 {2 A) `3 ?5 ~# w4 v* @ //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
9 c% P$ v& I* w d2 [ }, w4 u4 j- F- ]: t
//////////////////////////////////////////////////////////////////////////
8 D2 |) E; z/ F4 j! [+ G sort(vItem.begin(),vItem.end());//排序
" h! W* S4 v$ Q2 K8 | //////////////////////////////////////////////////////////////////////////: ~' G! @1 T! ?- M
//交换) r7 ]$ }/ T/ n1 Q. b% Z
for (size_t i=0;i<vItem.size();i++): |- y: ~) A! W: Q ] l* n
{
# @0 }/ ~& {9 Z; K" v! G9 f //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
8 L' k# k, z4 _; q& S4 V8 n) ? pInvSort->Add(vItem.nIndex);
0 @8 Q R/ p4 _+ M$ T4 N }( o) y" Q; L8 u, }
BYTE nDestPos = 0;) R' C) R% j! P+ a) j8 x
for (int i=0;i<MAX_INVENTORY;i++)
$ p6 U" K' Q' L7 ^% H% p' N { f0 y8 @6 i" o" E. n
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
* H* I! q2 S r8 X P- @ if (pItemElem)
: |4 z2 c6 K& |0 N1 Z% v4 M* a {
) s4 O+ \1 C5 G k* P. ^ if (IsUsingItem(pItemElem))
a2 c! C. U( f1 }5 O) A {$ o/ \6 z* |9 Q* T/ R- x
//这个位置无法放6 y" Q4 t) U% T3 S w; L7 ]8 e
nDestPos++;
8 @, c+ p1 N |8 R+ U3 n }7 w5 l0 B( o( z* y, D. E
}
; a3 t/ T c% F% v, E7 x+ d BYTE nSrc = pInvSort->GetItemSrc(i);
4 D" c* @- R& u& U6 x pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
% _) k! _' e* ^3 g B- G, K, g if (pItemElem)) n! h: b! j7 _% q6 j4 ~0 C
{$ N5 w4 N0 C6 s, Z8 [
if (IsUsingItem(pItemElem))
1 K' ]2 V% E; V7 P7 N+ Z0 T {
6 W8 z, R, p/ k+ j6 h //这个道具无法移动,跳过- O7 [" f4 s" I! o) D+ ~5 c: b) r
continue;
$ i* }9 I5 E$ i) z }; |2 B# {* h" ?4 ?/ S# ~0 q8 B2 H
}else{$ e U$ u% }) B% N/ F
//空位置 不用动! S( Z3 C ?3 g/ f8 [% g
continue;
; j. o) P, U, c0 | }; Z/ _( \) r" G1 q8 z% I9 X
//////////////////////////////////////////////////////////////////////////
& C7 O6 V7 p( G* ?4 B. f //开始移动
; B0 z( a* k% c) _$ ` if (nSrc == nDestPos)- l1 }1 E q8 b" I7 J# j
{$ v4 q j% p) M2 t0 R* @
//原地不动
' d( E, Q" R/ e' C0 u3 y% ? nDestPos++;: D( s* J+ o4 r
continue;
9 i7 }' h7 V# S" I" w* ~! |* ~ }
7 |: g( ^. b6 l5 d pInvSort->MoveItem(i,nDestPos);* ?7 _* j/ x& K
g_DPlay.SendMoveItem(0,nSrc,nDestPos);: Q; _7 U/ I* ~9 o3 Q2 e6 N1 e
Sleep(5);
# _/ \/ c7 f' L# I //Error("移动 - %d->%d",nSrc,nDestPos);
' x) w( i9 z* I+ c, j1 ] nDestPos++;( F' V/ T- n. q/ Z
}
) Z" N7 V6 G: B6 D+ y8 O* }" J //取第一个元素的信息
2 \2 _# O7 ~& }, K! {; ]8 V /*( y+ k5 L1 u9 ~+ k% |) N+ X
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)8 u7 `6 x4 l8 X/ b
{' _- I; ^4 \1 @) v; |2 G5 f% e
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
w4 j n9 n t m9 u g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
( ?9 F$ v8 } |2 F3 m$ ~3 @, } }# g) f% c X7 D9 L# n
*/
( f6 F8 Y5 `% D# w; o ////////////////////////////////////////////////////////////////////////// N' t- }4 {! w9 W: Y$ {
break;6 n' |& C- ]7 s, b. x g
}
9 `, j5 N, e6 [ s' ~4 G }
2 n9 O s3 b# a" |}
Y) m! S$ U) f; tm_wndMenu.SetVisible(FALSE);
4 [! n$ q5 o' s8 t+ ~ ]" i
3 p$ B9 z( G0 B' k4 V2 N. N; H--------------------------------------------------------------------------------------------------------
5 q, a7 J# r( ^8 d- O3 O2 f5 l搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)$ x- I) v8 K2 Q3 j+ L
{1 i( v9 Q9 \ p. V
BaseMouseCursor();1 K1 k0 B: C# H' h- q* E
}
/ J& @ g- H' K) y在其下添加:
. c ?6 R/ @# Nvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point), U& r6 |& G/ |* Y9 Q5 n Q
{( z7 V' i9 T& K# I
m_wndMenu.DeleteAllMenu();
) h4 ~$ J- g8 N! `% j* om_wndMenu.CreateMenu(this);- d/ B/ t \0 B L) l. k( E
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");0 _! M- F! D, q7 @0 D9 C
! M* r( T$ [. T! c. M5 v
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)) |6 Z2 s5 K8 x8 m0 F
{! L4 R2 u7 p9 Z- \4 B9 p `
//P以上级别才可以删除所有道具# h. t- g( z3 z6 V7 a8 r& V
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
7 w: e) q- e. ?9 O7 y( }}, K- E" D6 `0 y6 C! L3 X
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );6 }- |; ~/ l6 C8 i: ?! M
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
$ W3 b. v; P1 O- e Gm_wndMenu.SetFocus();2 ^* @5 Q7 e8 h; ^6 K6 {
}% S3 S$ d) l+ E7 x
------------------------------------------------------------------------------------------------------------
( ]" Z. L+ r3 r+ c*************************; a* F, ~) p9 f, z4 s, l1 m/ z
WndField.h文件$ A4 Q& H7 O; A
*************************
. Z: E( l7 m$ Q: |- w! o5 _& b搜索:BOOL m_bReport;
1 T# E# O- }6 A2 M3 S0 k# M! M其后添加:
, O" O( j3 ^0 b. a- u1 A3 P. QCWndMenu m_wndMenu;
& T# x/ h! k ]' P d搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);/ Q+ g! z/ g9 w: ?- e+ p
其后添加:# ]/ E5 D/ e3 E, w& i4 X/ r2 V
virtual void OnRButtonUp(UINT nFlags, CPoint point);1 ]6 F( ^6 ~# @9 f0 U
' P) T6 L; r. g/ w+ y5 @/ D5 T* i3 Y/ v
|
|