|
|
源文件中_Interface文件夹下WndField.cpp文件
5 N+ q* X H" N. d2 k" a搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
4 }6 C( S( C/ }
! V' F( K& v8 |5 {, istruct sItem
0 T) m+ f& |8 [ L* p( v{% k# o* t/ x) T. m# n# X, B2 ?
DWORD dwId;
/ C" [& ^: b @" F& p/ EDWORD dwKind2;
& t& ?, {$ b2 s7 q3 dDWORD dwItemId;. O V& a! N7 ~4 R- H$ j
BYTE nIndex;
5 f/ g' |( o6 l) P; I bsItem(){' _& z( t6 c: [
dwId = dwKind2 = dwItemId = nIndex = 0;: A5 r' F' x8 d" G) r- ^
}2 }; Q# c: ^# a9 u$ K h! Q. U
bool operator < (const sItem p2); L- }" X0 W1 @5 C/ ~ v
{5 w2 o+ \+ f I" }7 T/ y: G
if (dwKind2 == p2.dwKind2)2 o/ z. Q/ d: s; s$ G- t
{
" ^) D1 b) A: ?+ I return dwItemId < p2.dwItemId;1 p, z# A1 T7 r! a
}else{9 h+ a1 L) P: ?, I1 g) I9 G
return dwKind2 < p2.dwKind2;# h. h- `9 w, H; S+ O9 P
}
" V: U% C$ b7 v}) F1 z0 T, ?( G% v8 P/ \
};
# C: A* t9 b8 e- ?class CInventorySort* d: M& v9 d7 j2 Y3 g/ h# A; p
{
6 o: t) a! i2 R) w: [7 t9 rpublic:
; M6 D- S" M; U$ d& sCInventorySort()
( j4 X% B8 O9 D% ]: z1 R! K- `{
4 G5 t* t( F9 Z8 u m_dwPos = 0; H. r- ]2 ~, r3 ~
}- c! D+ z+ J7 C) m( k* O
~CInventorySort(){}: J) W. _* Z: P
private:
* J1 W, E. V3 |1 RsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息! D' _: x7 o. V1 ~$ ^
DWORD m_dwPos;
9 O- Q3 Z/ n% S. z% ]public:! g# D$ a1 |' P0 b* x3 x% b6 `
void Add(BYTE nIndex)2 H: ^8 L$ Y3 b7 O! G C% s# Q
{1 p& A ~4 f' l8 [8 Y2 U
if (m_dwPos >= MAX_INVENTORY)' `' b! N& S5 Y
{
0 A/ H% f' E5 @, [ return;; E. { d/ N& {% q3 b% \0 X* p
}' c6 _: s& F% ?- x8 J; Q
m_Item[m_dwPos].nIndex = nIndex;6 b, n& |! S1 X' E8 L# S5 \$ f
m_Item[m_dwPos].dwId = m_dwPos; N* @) u+ V! A" _
m_dwPos++;
* h1 \- l1 c4 c& w; g8 U* F- {}
) ] O a/ E% w8 L2 w) YBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
1 b& c) f% }" p% ]: L( \! W w0 U9 M{) I. z0 r- p* y P2 C1 g: u
for (int i=0;i<MAX_INVENTORY;i++)) W* M( f, l0 s
{
( A- C; I9 Z! a if (m_Item.dwId == dwId)
, H( }1 i% {, H4 A0 R {- a* {4 D" n& w: c$ U( I
return m_Item.nIndex;
5 G! m# ^6 u, z. b }
% `! z: @: z6 b) F }( A* J8 x* H1 p2 L9 \/ j* t1 e; `
return 255;% F0 V, S# a4 V5 V
}9 O1 @ I/ B/ |9 h e7 M- g5 B
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置' r& i& U5 R5 Q/ ^3 Y
{
& m$ h9 i2 {# E* v: `" ]3 g BYTE nTmp = 0;5 d S! b& l& q6 R' }
bool bDest = false,bSrc = false;
$ q7 h0 z1 w. q for (int i=0;i<MAX_INVENTORY;i++)
- ]8 S$ R9 { a, J E+ u! y; c( i* B {
3 d5 I' g+ d3 x0 F+ m8 p) k if (dwSrcId == m_Item.dwId)$ w `$ r" Y: `6 a6 P' }
{
% I) c: N$ M: k) f% g3 C //id相等 则 改变对应的dest和src2 ^$ Y- _* r( P
nTmp = m_Item.nIndex;2 X3 y+ D3 g6 _5 e
m_Item.nIndex = dest;
4 N, |6 M, `7 W, t" V; ] }5 u; C! ]% P- Q6 N- T+ i& B
}! L' |- q$ S/ r' ` n% L- Z
//临时数据保存完毕,交换开始
7 R, R( l9 @' w for (int i=0;i<MAX_INVENTORY;i++)* _' ]; n+ O" a2 s
{
7 v& W. g3 |! t# P' l if (dest == m_Item.nIndex): T" _+ I8 p" O. K; f8 I
{
3 ~& P' Z) R0 B' S //id相等 则 改变对应的dest和src
- C5 b3 c. _2 p5 T& u% Q8 m+ T, g m_Item.nIndex = nTmp;
8 v) m) U# F2 G' S9 r }
0 _9 E2 ^5 J7 y. q }
1 F; M c5 c( s& v1 I}
5 b8 R/ ?* l- {" R};
% J, {+ {4 t( {3 ?, {* i% k-------------------------------------------------------------------------
* p- d9 a2 E; k# R依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
p, I/ {: @2 y/ i0 |* B- H搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);$ n& {0 [# W0 W7 }
紧靠其上添加:1 c! N; j: _' y$ J# k9 \# v3 b
if( pWndBase == &m_wndMenu ): w. j7 t9 u s- J/ O$ E
{ Z5 m) b' B0 o( U; ^: B
switch( nID )
" F- `! F" R' u" F: M3 J {
/ z4 F6 E( T' A: A) k* R6 A' K) H case 2:2 Q) V9 e3 j0 z
{
) c Y# z+ M2 a$ f //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
" R, d6 c+ l+ E! F! I if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
# n8 B' w: p8 `& z6 _ {+ f' b+ k8 \* C2 }" ~9 ?! R! v
break; d% ~8 g' p, Y- `" o& d
}
, d4 s/ \6 m4 s/ [& k7 @% A for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
# f0 d* k( X' `* h6 ~/ T; [- o {
$ o: p% r4 X* Z) x CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);3 J3 W4 M! R, z/ n3 r' P
if( !pItemElem ): S- S1 \% I0 w' l1 u- {
continue;
- w' F0 ]: f/ x, s if(pItemElem->GetExtra() > 0)
9 Q0 B9 g) D5 z. ]* y9 T continue;+ _" Q/ F: R& B2 d: {: z6 j
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) & m; `1 G2 O2 Q4 ?, }; N; k4 u, b
continue;
5 @ x8 S; M( U: ^$ r: g& X if( g_pPlayer->IsUsing( pItemElem ) )
* x! [2 ^: \* A* m/ P# a4 Q continue;
2 M, t# A6 q' y. y, T if( pItemElem->IsUndestructable() == TRUE ) C8 H2 e( S+ J4 k
{9 a% z# Q* {$ [7 j
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );4 m$ l, J, p( F8 o2 V) m5 y
continue;
4 y+ f/ v) j+ {; s2 f }
2 d7 |" w: L1 P3 g8 l4 N g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
, V' p9 t& }: z) G }
2 I3 ~- J1 I; _4 { break;7 M6 T9 L& o( S0 v
}
; I% `& L5 e" c% [1 W case 1:
( k/ I+ f' Z* I { b4 u+ X- S/ F
//整理背包# \8 n0 Q w/ I' m3 w
//////////////////////////////////////////////////////////////////////////
/ o; k+ e. N* W# S ?7 @& S3 c //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
9 Z" c# Q& u1 t8 l$ l0 B, D! t //////////////////////////////////////////////////////////////////////////
' I, M' M% M! ?; d9 j$ ~* ? //////////////////////////////////////////////////////////////////////////8 q1 Z) J0 f5 e$ x* [+ L3 E. x
CInventorySort* pInvSort = new CInventorySort;
9 x/ c* z$ ]1 Y0 p: O- F9 f9 n. T vector <sItem> vItem;
$ b* F" |5 W9 m2 b/ v+ Z; \0 G) ]9 B vItem.resize(MAX_INVENTORY);//初始化大小' {, m( ?/ Q& |% ]' i( K# p) d
//////////////////////////////////////////////////////////////////////////$ W+ x2 q' i( c2 e
//填充数据
& D2 h+ M7 p/ z( V8 {4 y for (int i=0;i<MAX_INVENTORY;i++)0 X( Q; n0 |+ N" f0 s* H
{' r9 @5 t) T. l9 ?* C/ m& F
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
2 W. Z( n* j" ~& O( P& ~ if (!pItemElem)0 Y) _+ ^" N" X1 q; j) H# l3 i
{
& W0 y8 X+ J( E3 t' f9 f vItem.dwKind2 = 0xffffffff;9 w' B1 H& \$ |6 Y' \
vItem.dwItemId = 0xffffffff;
- [7 ?; Z; B% _ vItem.nIndex = i; l4 A+ j4 H* C( p
}else {5 n0 V2 Z; V& ?* Y
ItemProp* pProp = pItemElem->GetProp();: W' e/ ]( t& e( }
vItem.dwKind2 = pProp->dwItemKind2;+ |. U+ L- R* k9 a: l0 s
vItem.dwItemId = pItemElem->m_dwItemId;
( T7 @+ j9 a" h9 ]1 U vItem.nIndex = i;0 ]! z4 I0 D: y+ h# S: f* J: l7 v
}0 ~# M. x r' S0 u- ~
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);2 M/ \$ p; G1 _
}" @3 ?& L' E [- B
//////////////////////////////////////////////////////////////////////////; @0 h3 A# [+ {% o9 ^0 I
sort(vItem.begin(),vItem.end());//排序9 {% S' s' z$ `' d
//////////////////////////////////////////////////////////////////////////* m+ G) ]; B3 ?4 I4 T( v
//交换: e' h8 i! {9 j2 _' a* P$ X
for (size_t i=0;i<vItem.size();i++)! f% o- w0 W1 S( U
{
. w# d9 `" q- Z$ X* G. _3 f: t //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
1 @8 g' [ x( t4 Q pInvSort->Add(vItem.nIndex);
7 W$ u$ H1 @/ \9 O" q* ]$ w, R( V, R }
7 u- J" e2 R5 e) I BYTE nDestPos = 0;
1 W+ g4 `1 L: n% V8 M) `8 e7 H! ~5 U for (int i=0;i<MAX_INVENTORY;i++)
" x% u& V1 q/ H- \ {
0 Y7 x, i5 F. E- q( Z4 M CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
2 I2 E2 Z; T' o if (pItemElem)
( { V+ R' `$ B/ K. d# v: { {
9 R# l6 i6 Y2 Z* j3 p% r if (IsUsingItem(pItemElem))* ~0 K4 F0 L4 w f- q8 [. i
{
Z h1 E3 n8 G% A2 W" ? //这个位置无法放
% G* v7 h9 ?* p' I S, d nDestPos++;
- p; h- r+ d* q }5 [- t3 o5 {0 w
}
b$ s" r7 m# Q- P' p( z S' q1 w BYTE nSrc = pInvSort->GetItemSrc(i);
1 y# z w4 P3 S( f6 q) g: H# r pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
5 E8 j2 v5 g4 F! {& t6 V if (pItemElem)
0 M: I( s, V% w" f {1 m. r9 |7 c8 p
if (IsUsingItem(pItemElem))" [0 N! o$ e, J' m/ F
{- ^- d/ l5 m8 f
//这个道具无法移动,跳过
# j: ^: |" p: p2 C% n- N! d" i continue;
# q7 m5 k% n6 k+ k }. Y2 A8 \& `+ ~7 Q
}else{! i8 h* t& }1 _3 a' F" k7 @
//空位置 不用动# K; ?. x4 A/ ^( ?: Y
continue;# w/ z' x; P1 ?0 c, U/ F
}# a* K# V2 [" i6 A3 L0 x( i) _
//////////////////////////////////////////////////////////////////////////* v O& ]# P& Y0 B8 E
//开始移动
/ _' d- V+ q/ K+ w% m6 o if (nSrc == nDestPos)4 L5 ?( C6 R$ q; e# T
{
4 _; J( v6 G5 i //原地不动
: }4 u3 S; U6 W9 s) R/ p+ t H nDestPos++;* U2 N" V. v- {, N7 L
continue;
7 Z c! c) F. i, V }. @% ?6 f5 ?' \+ f3 Q' L% K, u
pInvSort->MoveItem(i,nDestPos);' B# p/ [" a' m1 }2 h
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
: d" d6 P, l" k D0 c: k) u Sleep(5);& s- V+ b, v% [8 D9 y
//Error("移动 - %d->%d",nSrc,nDestPos);
1 X3 q- |1 L/ W V! h2 D$ T4 Y! f nDestPos++;' ^( {( J2 E$ Z! y" G
}' W6 S P8 d6 x' H) t
//取第一个元素的信息0 e0 C+ A B" C7 C6 [: W; d
/*: R+ u# [( T o' e3 v
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)8 I+ q3 ~ G; c3 e
{ f3 a T% D, k5 z9 C; x
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);1 \3 |0 W6 u' Z5 k
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);8 D. W T2 y ?5 e( w7 C7 `
}0 ?: d8 Y4 v' |# K
*/
* |0 Y, G: @- @- K5 H //////////////////////////////////////////////////////////////////////////
1 Y% N' s+ B5 X8 i2 D* P break;1 x# w) c" O9 s% g. t9 Y/ ?' I; t
}! d. ^: _% d; H) c+ F- l1 R8 n
}
! \8 K+ i" u- N}8 F$ ]+ O3 |9 x2 i( V7 n
m_wndMenu.SetVisible(FALSE);/ q/ M* }" A# O9 W* @ O
6 r* x4 n/ |- `. y0 r--------------------------------------------------------------------------------------------------------- c4 a2 R' s; F* W+ x. q
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)1 V- l- {# q$ `9 G! V
{
2 w$ o5 a2 b0 y& kBaseMouseCursor();5 z/ \# K1 l9 N' l
}
1 g; G. G' u6 \: D7 |$ q9 h5 q# k. q; R5 ?在其下添加:
1 f( f: d) \2 D3 G! @void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
% H( Z. Z9 O: L- z{8 o- k8 t7 M7 H H1 A
m_wndMenu.DeleteAllMenu();& C( ?$ h F: L2 n& B
m_wndMenu.CreateMenu(this);' |2 V$ t4 @, b g$ W9 L; k
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
& D# c* x1 Z9 i9 ~+ K! h! f! n9 ^8 b6 r/ Q/ E
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))* J# B8 \4 M( U) M: R4 x
{* d/ g2 H5 I" |: C$ c
//P以上级别才可以删除所有道具
) @2 M3 R1 z4 O2 Z% k9 ~ m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");3 q8 u3 H% t: a, A
}) D: E; f) c2 |2 M' H
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
: Q) k, v# `9 ~# `) o/ ]m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
/ b7 i% t* x5 km_wndMenu.SetFocus();% h- E8 o2 ^: T, U3 i& k9 ^
}6 H4 ?2 K, J: m& {2 b
------------------------------------------------------------------------------------------------------------7 ^ U; R- l2 P
*************************
/ I% L) _: _% ^WndField.h文件. f& g* O! y- {2 \/ @7 i3 }$ @
*************************( ?" O0 \8 n+ F$ l6 m3 C
搜索:BOOL m_bReport;
2 ~% a9 O* Y9 G0 `+ O t; k/ R* M其后添加:
7 O& J# c8 V7 ^3 O: mCWndMenu m_wndMenu;
6 c! t9 w+ e k `( \搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);1 R0 x! {9 s" J! C
其后添加:
% I5 d; Z& ?: p* f Nvirtual void OnRButtonUp(UINT nFlags, CPoint point);* X" e6 y* q z- d, I4 w, _
2 E; @9 w# ]* f: l+ |0 U6 t6 X2 z0 l* v! R5 R3 K/ y
|
|