|
|
源文件中_Interface文件夹下WndField.cpp文件
9 r: Q: }" S7 Z. v1 r搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
/ D5 ?3 j0 Q+ {
8 Q9 C! D) P" {struct sItem) X, y* F* o1 }/ y; @7 \3 @, a% W
{
4 @; g( n5 o6 J* F& R$ nDWORD dwId;
) p- h! ~0 R! f* e! NDWORD dwKind2;; X$ u; P8 }2 C! E2 ^* R" V! j: z
DWORD dwItemId;& v3 Q2 c. W8 c( ~% [9 W
BYTE nIndex;- h0 M: m' D/ |% _/ M2 _
sItem(){1 V- T. s1 \8 M! u
dwId = dwKind2 = dwItemId = nIndex = 0;
9 p; @. H% x0 M5 Z& ^" H) s}
! J" ?& Z1 C, W" n1 s5 s* {bool operator < (const sItem p2)
) P! y6 N' H" Q- M* T9 {{
0 b: ^7 w0 n9 K) A, c7 C9 U& v: c if (dwKind2 == p2.dwKind2)
p$ G3 C% E. u {
" i8 w4 N, Y" M8 E H# S return dwItemId < p2.dwItemId;
! G$ c0 w! c8 r3 g }else{
: @' A- ?- s" g/ U7 I return dwKind2 < p2.dwKind2;/ S$ t& A) \) _$ Z2 t
}& R0 t. u4 t9 x3 J* w
}1 {+ Y9 z1 _& D, G, A
};& [9 F/ Q, U. q& q7 ?
class CInventorySort
) r0 Z- R% a8 F6 Y% H j{% u- l- h( D* \0 @3 v1 k/ p" E1 Z
public:8 I5 A$ H! r M) A. ^0 Z
CInventorySort()
i0 c* p3 n, U1 N$ k{
! T3 A% a6 k+ H9 J m_dwPos = 0;
' e+ \4 @, K& K; M/ a! `# V5 f2 o}! t1 ^2 j7 R7 U; k
~CInventorySort(){}
2 S" u' w3 ~# x$ t: U/ V/ s1 ]private:' h/ ^! u) v' Y$ O6 u4 B' S
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息, \/ c/ S% k5 z* b: {5 \
DWORD m_dwPos;/ Z: q; I! F' y, k
public:% O4 E! B( Y9 H/ r% i' Q* F% B7 d
void Add(BYTE nIndex)
4 r7 w) h% P! d: x{
& U$ q& A) G: r2 t6 l0 J8 G if (m_dwPos >= MAX_INVENTORY); L/ P& G* Y) _3 T. h5 M2 G0 _6 s
{
: j2 G* ]' p& f( P1 x2 V. A return;
; b/ c; m- s& ~ a. a0 z) K: \ } E& e- A0 x1 x
m_Item[m_dwPos].nIndex = nIndex;6 ~$ v- F7 j8 |6 G3 V0 I+ t
m_Item[m_dwPos].dwId = m_dwPos;
1 W( u2 \; _$ m% G) h# h m_dwPos++;8 M$ Z6 q0 C# I) ^ y/ t3 [6 L
}# r+ \1 N5 b8 W2 t( v
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列7 g* ]1 a3 a6 w& k8 [
{- B( l: _. }( n
for (int i=0;i<MAX_INVENTORY;i++)
* M& R4 W0 }* ]% a5 m {
1 U+ `( l8 u+ _' x: m: H0 s if (m_Item.dwId == dwId)3 W2 O8 q3 o: b$ [" F6 u5 y D4 ?
{
3 J; Q* Z' p5 W return m_Item.nIndex;
0 x/ ^0 q$ ^: C, q: O }
{0 V Q( e3 H g$ [) S |5 }' O }) o$ P! f& {, N U/ V' E& I
return 255;
2 N" Y' h. S9 Y9 M7 G' n( }}; z# {& @, ?4 I* ^/ ~
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
. R. h8 ?& ~1 ^4 U1 o1 f( j{
0 Y/ b# \1 `$ O8 m0 Y7 G1 a BYTE nTmp = 0;7 S s& P/ R/ r1 Y0 V* A
bool bDest = false,bSrc = false;- k2 C/ {" J. k9 |8 m
for (int i=0;i<MAX_INVENTORY;i++)
6 O9 _4 K0 A$ M: i5 L {6 h6 W1 e, v/ V6 C2 x
if (dwSrcId == m_Item.dwId)
I$ K' O) {( L8 p( n$ K {1 z' W" t2 X7 j
//id相等 则 改变对应的dest和src P, B! Q$ R/ X9 B: d5 K
nTmp = m_Item.nIndex;0 Y" y" \' f) f# @
m_Item.nIndex = dest;
! a; C" D8 t9 o# e5 Y R+ C }
& ], s2 C, [3 N8 a }
+ z0 c! C) ?- G2 E //临时数据保存完毕,交换开始
" o) n4 L5 i& F9 l' a c o' o, Y for (int i=0;i<MAX_INVENTORY;i++)- c4 E% i" z- T4 b4 l# a7 T
{: c9 Q/ k. S+ E8 ^% L5 |
if (dest == m_Item.nIndex)0 d" x% M+ q# b
{
6 r |0 \8 @- ]. Y5 v //id相等 则 改变对应的dest和src( {+ ?& ?3 p7 A
m_Item.nIndex = nTmp;
5 G3 J! a) Q2 S1 ? }
_- x7 ?4 t/ F! h }
9 j7 U/ G) J# g1 o( w& O% R) W}
- ~% m8 u4 P2 q* x8 ~% ^};
# y4 D3 q6 p4 q+ |-------------------------------------------------------------------------
# F! a: P }* }& n) P$ g& l依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
* }# e- P: x3 }8 F搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
9 ^8 W/ L# T: |/ G# d# J! S紧靠其上添加:
. z0 }. F7 b! C+ Y2 W. @if( pWndBase == &m_wndMenu )
" j2 J3 ~% F9 l' q4 V6 }{! _; k0 h+ w" Q3 `; x$ S
switch( nID )4 i- G, J) q9 j6 W: }
{
+ h3 \, k( x; U( W0 ?0 e/ Z case 2:
+ {) [' ^9 i: R6 v- ]$ D3 ^) I, j6 ^ {
3 P2 q9 k: L/ V //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
| c9 a6 f: n if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
2 p. X2 t. `6 X3 R ^* p1 R {
8 E7 b! P4 t7 X4 {1 i& C6 A break;& \( u1 k9 S$ r2 `" j
}
7 x$ o; g! K2 N for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
, s) c2 \. I" Y# ~* R" Q1 D* [5 B: n2 e {
t% ]9 N9 B! r3 K. E CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);5 q! {6 a9 \2 r- d2 B
if( !pItemElem )
, S' K5 E# ^! q$ k continue;1 o. \# w7 c, p6 A2 X
if(pItemElem->GetExtra() > 0)
8 @0 N, ^8 W7 r5 A1 n8 ^0 ]2 d. A continue;3 P- i# J: T- g1 ]; J/ }) n
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
0 X6 h7 W1 R5 B8 q2 e* U continue;
* Z- b" ^) m. I$ Q# l6 S; t" X if( g_pPlayer->IsUsing( pItemElem ) ), B, R" W. V- q
continue;$ h6 W6 A W& O/ Z3 A* d7 V9 J
if( pItemElem->IsUndestructable() == TRUE ); s# V+ j# e' J7 w
{% T. _' Y2 x" E0 j5 v% h
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
* w# _9 y m6 p% |+ B7 l continue;
; u3 P# ]- i j. H( p8 q# @ }3 r6 j+ \5 \, i1 `- X
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
8 b. ]* X* x5 f }+ v* D) E1 s- U
break;
' g: {. ^( `( Y+ z7 t& c a( z+ Y }( ]8 W/ x+ V! u% ] g: ]
case 1:
( i8 q0 l% J4 X4 `/ i2 D+ e {/ Y" `4 n3 c5 S" Y4 D+ X, y L
//整理背包
+ ~4 m6 \' L C, z6 U4 U; ~ //////////////////////////////////////////////////////////////////////////
& j$ y8 p' X9 C- F* d. y: j //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
3 x8 ~4 J; {+ E/ w2 l //////////////////////////////////////////////////////////////////////////
1 f2 t+ Y" R5 z8 e7 m0 T n //////////////////////////////////////////////////////////////////////////
[5 w( v2 N% `3 T, t5 ], _9 B CInventorySort* pInvSort = new CInventorySort;; s( K `2 l3 R* I2 n
vector <sItem> vItem;
6 a7 o) w4 Q3 L% v, m0 L vItem.resize(MAX_INVENTORY);//初始化大小
; V* Z3 _0 Q; ^& g5 U' ]$ Q: _+ | //////////////////////////////////////////////////////////////////////////
* z* [& {; T/ ^ //填充数据1 n; d; ]4 U, \ g# w5 D
for (int i=0;i<MAX_INVENTORY;i++)
8 V. d' x. x. x% m {
' J$ u A' [ }8 u# [ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);2 ?2 |% ^" U0 J# I# X" Z) R4 r X5 [
if (!pItemElem)# e9 t7 S. L1 @2 W8 ?& k. G. f
{
, B' N- z1 j' @$ v2 j vItem.dwKind2 = 0xffffffff;5 B& Y" Y5 v* [+ k7 M
vItem.dwItemId = 0xffffffff;
3 I+ q- A' C* u. E# A* o# ^+ a vItem.nIndex = i;+ P' C V) _/ i2 u7 w3 M; e, ^
}else {" F- ]$ B9 s1 U9 d1 w9 ~! f
ItemProp* pProp = pItemElem->GetProp();
1 u5 f) W9 o- K" _ vItem.dwKind2 = pProp->dwItemKind2;
, J9 Z5 D L0 @- Y8 K8 f vItem.dwItemId = pItemElem->m_dwItemId;! R7 t2 } B6 S8 S
vItem.nIndex = i;1 e0 A ~8 o, ~8 r" u9 |; Q- v. {
}2 h( B' d4 i) H g& l* D
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
2 v! o" `) T, `- ?3 e }1 e% V4 \6 [! q% k! X/ z
//////////////////////////////////////////////////////////////////////////2 w* W- v5 E e" }" f! E
sort(vItem.begin(),vItem.end());//排序% Y r5 x8 F t/ z
//////////////////////////////////////////////////////////////////////////7 e+ x1 s6 c4 I2 U) O+ x
//交换
2 A) |7 B2 ?* f3 y5 Q3 h for (size_t i=0;i<vItem.size();i++)/ o: ?4 t: j8 J4 H* I0 u9 ~
{6 `9 F2 ]5 o4 {
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
: [/ P& w# X6 ~. \# R pInvSort->Add(vItem.nIndex);
) ]& T* n/ }4 ~! S3 F2 J& ] }* F3 g4 L# n6 L& ]/ ~% h
BYTE nDestPos = 0;
" T! X9 j2 v+ ~( a for (int i=0;i<MAX_INVENTORY;i++)# k+ B% _8 g# U' z: D
{/ O0 Q. A8 R4 E/ F& g' {
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);* [1 ?! _# Y, o, N# H
if (pItemElem)8 y6 T' K- _5 I; `0 v4 p7 ^! y; k& P6 ]
{
0 `8 g. C. @! J& v. s if (IsUsingItem(pItemElem))
- |" }! I. \0 u2 r) P {
. ] p& N4 ~5 {. v2 ` //这个位置无法放
. R2 n- i6 m. I; P) ` nDestPos++;
8 d# ~' J" V/ C5 u- M. j3 S } w5 d+ v8 {" H
}
( N. r0 A z' U0 E N5 A. n" s1 y BYTE nSrc = pInvSort->GetItemSrc(i);
7 n; ` ^3 O# l& P! x( `1 u pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);" }, J0 }) ~/ o5 N- w7 c
if (pItemElem)# e+ X/ Z/ z5 r: R4 B8 v# i
{
: T% v' d' S. c" `& A if (IsUsingItem(pItemElem))
/ j6 |1 v9 M7 s! e1 N- N! Y {0 P. B9 n% R$ Z" @+ @& ]
//这个道具无法移动,跳过
, T( {2 e% G' f+ S; m) G3 d continue;
* f n' j& y' t7 o }
w4 w; p& r# x; N: q' D+ P }else{& B* j( e. H$ A) Y5 K* o
//空位置 不用动% c) r! C* i( M1 L3 w1 \
continue;0 P' E: ?: I* W# }& w
}* V) v. U9 e. f& Y ~$ s6 f0 \
//////////////////////////////////////////////////////////////////////////
6 z2 O0 L; Y( N3 P+ b! J //开始移动8 o9 ?" |. m5 d1 `5 c2 w
if (nSrc == nDestPos)
) u, \; Y4 l& ? {! {& e: c& y# `8 g8 E
//原地不动! ]! Y. I8 M& @1 B: [2 e Y
nDestPos++;6 n/ \, f/ ^; D
continue;+ r! q+ v& {5 [) j! ]3 b' E
}7 F: q/ N/ [7 W- A, H6 a
pInvSort->MoveItem(i,nDestPos);4 }" ?$ M3 E9 \# L1 }$ s& w
g_DPlay.SendMoveItem(0,nSrc,nDestPos);* ?6 f3 l" e9 \& ^6 V% r4 Q
Sleep(5);1 q3 o# n$ w: ^; C
//Error("移动 - %d->%d",nSrc,nDestPos);
& z, M$ u# R' z) ^ nDestPos++;
5 q8 `5 w, L! t }
+ I* U9 n& u7 k1 `+ c //取第一个元素的信息3 z5 R2 `) b6 h$ Z) y% V7 j. Z) s
/*
6 d4 g0 F9 R% I' N9 I6 k if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)7 G( w, w+ F" }: J" e# K
{, S) `8 ~; F$ ~. i5 y
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
3 `6 b3 F4 z% c9 P0 ] g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);; D) S, E( G, M) R
}+ g* e- W6 e4 E D) e
*/
& k, o6 _, S5 g2 `# M4 y$ T //////////////////////////////////////////////////////////////////////////8 b( J+ K f( G6 O7 h6 t
break;; ~# x5 p3 M. _" I# ~
}- _4 o2 b( T. D; b3 I) z0 V
} 9 O4 k( O8 B" s) U/ x" G* T2 p
}
. H" ]8 W( K( o, A( mm_wndMenu.SetVisible(FALSE);
$ R% o$ @+ }3 X1 O4 Z
3 e6 v. q0 ?; p--------------------------------------------------------------------------------------------------------
9 S# c% G' L1 w# h搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point); H2 S, g2 T9 C
{
2 {3 Q: _0 u; B" Q. }BaseMouseCursor();
: n/ q4 @0 W' ^( a# H1 Q0 t}7 a* o1 Z0 m7 _. R. m0 l& X
在其下添加:
+ ~7 h" @% w5 @6 xvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)7 Q P- S. p, v. w
{' r, G. d3 ?5 X: @1 _
m_wndMenu.DeleteAllMenu();( d! y5 z* E j- s3 E
m_wndMenu.CreateMenu(this);1 I0 Z+ j E. Y& Z# ]/ M \; ?
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");5 P0 ~/ G `) j, @6 `* M8 L1 f
1 X+ r; y! D2 g4 p# }; [# j
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
- B1 X+ N8 ~: v2 \4 u5 {{
; A2 {% q# s* Q1 U5 }) h2 }! L2 D //P以上级别才可以删除所有道具
3 R6 i2 [1 h( a+ D! c2 ?" S9 ` m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");4 G9 e( z [0 f2 C/ t/ m) B. Q5 Y; t
}
+ Y' n. i! C9 ]2 j8 x9 Hm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );( N, \' O6 m z
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
& r3 z( {3 i* H$ S* }7 {: j% K( Jm_wndMenu.SetFocus();
3 f2 t3 \# n9 _- @8 g$ f} W3 n: y" ]9 \; q1 c
------------------------------------------------------------------------------------------------------------
+ O9 v) U H6 ^*************************( D0 H; F8 i6 l" U- l; B4 _
WndField.h文件2 a& v5 Y0 |9 Y# ^
*************************2 ]; J/ d6 n7 }8 W1 r8 @
搜索:BOOL m_bReport;
T5 b0 r! N! H2 `其后添加:, o+ m6 _ Z& @# ^
CWndMenu m_wndMenu;
8 f* P4 |3 u0 n8 w# N( L7 x搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
" ?( C) n% u8 ~$ s7 M) N/ n其后添加:8 a7 ]" H% k" g# b p/ v
virtual void OnRButtonUp(UINT nFlags, CPoint point);/ \ O) A# R+ n1 q/ I! |6 z+ `, h
' x g5 a- A# S
+ w @. Y4 ^9 j- W2 ?) X |
|