|
|
源文件中_Interface文件夹下WndField.cpp文件
3 D0 V0 s7 ]% Z9 N3 N( H搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ). m3 `% q+ _" `0 Y- G4 K
- H, y3 y8 D* S2 v# F
struct sItem
3 P! D% J- h) U }' E) }{* g, E) F4 @% G$ c) Z7 `
DWORD dwId;
$ ^/ x7 P4 F: K( kDWORD dwKind2;7 a! d7 x+ y7 ^; o6 z& k: y
DWORD dwItemId;
- N1 s& h2 D, Y: pBYTE nIndex;9 U9 p8 @% h0 q% T1 o/ E4 R: D' n
sItem(){
" q+ g$ k0 F6 y dwId = dwKind2 = dwItemId = nIndex = 0;; p" q" K% \: T( Z) R
}
9 }! a. P* i. l' Y' X% p4 Dbool operator < (const sItem p2)
0 p9 H% ^- P! ~5 b. Y. o{
* @4 }2 b, k4 |. i; _& U/ s if (dwKind2 == p2.dwKind2)
" c& h% e; \' a- ]0 x; c {! @6 ?' C0 }1 [8 i# Z
return dwItemId < p2.dwItemId;! Z% \# b8 B8 O
}else{1 W6 e) O. ~. z; q
return dwKind2 < p2.dwKind2;
) ~! {& T7 Z2 a; f, E+ U }
) F, }- f& f7 ?# J; k}' g3 x W9 P0 ?" `/ s% \
};
. |& m; Y3 O1 x, ~class CInventorySort" w9 J/ D& g X+ N; A
{9 Y% g" U O& E) y
public:
f% R; P! Y! S0 T7 g4 eCInventorySort()0 n( f; O5 g% X8 n
{
+ |, m& g* J0 l1 c m_dwPos = 0;- Z0 w6 B$ T" C, j+ Q2 T
}/ W" s2 \8 @9 a, {, H
~CInventorySort(){}
: G3 U7 d% T& F3 L; Lprivate:7 g+ [3 q9 c# U
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
0 X) D* r$ w0 k9 N3 C. v0 \DWORD m_dwPos;1 u) g7 a/ o& U
public:
# Z# ^9 N3 K' `& _1 @void Add(BYTE nIndex)
( P0 C2 {' F% R, H{) r, _/ W4 W5 D$ ? [* @
if (m_dwPos >= MAX_INVENTORY)
0 \# I( l g8 x$ O/ b& \3 e {
# p# j8 Z W8 @; L1 S return;1 S$ ?/ Q6 v& P
}
& v( a: S+ I: S3 b; L m_Item[m_dwPos].nIndex = nIndex;" [( G1 o! Z% ^% `: S7 I
m_Item[m_dwPos].dwId = m_dwPos;
O6 x2 \% p- W m_dwPos++;
# F) _' e. h: P( W/ p& T" _ z. D}; Y9 X7 F/ m" A" Z3 z
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列: a( W1 ]) B6 Z4 a4 M
{
4 v: F% F' E% R for (int i=0;i<MAX_INVENTORY;i++)
/ ^% g. I4 y n S% h {
5 u3 z- o3 D- ~( Q$ e- K# ` if (m_Item.dwId == dwId)
1 u G; r, I1 G. f7 ], ^- ^6 ] {9 ? o2 K- j) \* J1 A+ a E
return m_Item.nIndex;
" x4 P: C* M0 Z0 O7 Y }
, |" _4 j4 u, j! y }0 p8 F" K1 b5 D& e
return 255;0 T: K" w: T4 O* u6 |; w' o9 \$ E
}/ o! b9 j# F0 P/ y6 G0 N& x
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
! i) L7 ]( f1 n8 N1 B5 z" a9 n2 |{. c- V- H' B, j a
BYTE nTmp = 0;
+ o9 o9 ?7 c1 A. Z bool bDest = false,bSrc = false;: F- N/ ]3 j; ^+ h: U
for (int i=0;i<MAX_INVENTORY;i++)! t2 N5 X( ^& y9 l! G% U
{& E8 i/ C* A, ]7 X
if (dwSrcId == m_Item.dwId)7 ?! N: p) N3 C, t4 [# A1 i# p1 D
{* r. [" w' [, z- G. d
//id相等 则 改变对应的dest和src
9 y0 v% o2 V+ v nTmp = m_Item.nIndex;5 l/ m& x: _) q3 G( i/ Y# z
m_Item.nIndex = dest;, N9 `4 R0 N! y8 k6 ?
}
5 w8 q9 v. A L. h }
* W" g/ ^) T: ?; r. C/ \( P //临时数据保存完毕,交换开始
# Y5 x5 Y ]2 |, T/ \* a for (int i=0;i<MAX_INVENTORY;i++)
7 s, N. Q% |4 S( H0 y {
4 _% ?9 n" `9 c2 [( q if (dest == m_Item.nIndex)$ }( Z- R. b- m8 y) v* ?2 O
{9 V" u2 k$ ?. E9 q# r$ ^7 ?0 i
//id相等 则 改变对应的dest和src# }+ l6 H, w- Q1 z$ R
m_Item.nIndex = nTmp;2 i# l' H: x& {2 ?1 {; A( ?8 @
}
- ]9 g3 L9 h' C }# F4 ~9 H% A+ S# [6 l2 W
}
! v' ~- P. e) f0 j e# P};) U. |0 h: t6 c4 `& }
-------------------------------------------------------------------------
- v1 Q6 O, r+ N! D) q, m依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )( f1 E" b# p9 S' D
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);0 M; P% L2 X) w" t; ]
紧靠其上添加:
# p1 ]. D5 n. @- N8 z7 D; Tif( pWndBase == &m_wndMenu )
/ Q1 l; Z! _% T5 a) Y/ _{( j. ^+ C5 q M1 T: `) S, U
switch( nID )* |6 w' m, h2 i! t" a
{7 g9 E4 ]- Z- g+ v6 [$ y# G
case 2:
u4 @+ |& ^ `! W- N. R0 v {
, ^) d& b# w; K% ^+ _ //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);% o9 E2 q! `3 \. ?
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
8 h5 x3 ^+ U g. W! f/ c {
6 k2 `" T9 C ?# J" d7 m break;' A* i- f. G8 }& ~+ G
}
5 c8 J+ i& ]- z: W- [/ }2 J9 K for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
- G7 K* }& J3 \' F$ p5 f' M+ G2 [ {
' _6 w2 O d; u8 e CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
}( X( Z% i4 U$ l; b if( !pItemElem )
2 U% O4 q) X" V% Y" m" q continue;/ n$ H: U1 K, t8 L3 j
if(pItemElem->GetExtra() > 0)" U6 l3 ?) I8 a, P
continue;- B0 t) G/ I: b4 d" r+ s+ G" k" Q
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
& P% s% }. s. [/ r0 ] continue; g' k( f5 |: [4 h1 R+ ^0 W% j* A
if( g_pPlayer->IsUsing( pItemElem ) )) `. z' V- ]0 @# @8 p& R/ e( {
continue;
% S+ a8 @& e5 y6 R if( pItemElem->IsUndestructable() == TRUE )' F7 Q. w6 r7 T% m
{
2 X& R {1 i( W" \ g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );' K( m+ w) R7 H _* ?( j1 }' o' _ x3 @5 ?
continue;
% q C$ M4 s! y6 k. B }
N/ H* p* S: Z$ Q. Z# G g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);4 T, |: E5 R1 P2 y
}
3 C5 z6 T: g5 F7 }7 Z break;
. j8 J7 g( b4 C5 ~6 x( N% e# Q. D }
9 a3 L3 R6 N. b$ c# w case 1:
* I A. S. i! ] {. x( u. o& D/ B% q9 H3 T+ J
//整理背包- |8 E6 A, c. {
//////////////////////////////////////////////////////////////////////////* n4 J) F4 J( Q. k
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
2 H! {5 C! h6 a6 d" L6 q //////////////////////////////////////////////////////////////////////////* @: s/ {! | n; X. {
//////////////////////////////////////////////////////////////////////////* w. D0 f x2 w2 q; M
CInventorySort* pInvSort = new CInventorySort;
# _ B" ]" \3 N" A) w9 c# Q* M- h vector <sItem> vItem;
# b! C% r5 z% ?6 F9 M* O" n vItem.resize(MAX_INVENTORY);//初始化大小- z9 Z% E4 C, \. z! u5 y, U9 X
//////////////////////////////////////////////////////////////////////////
9 T. }2 P, B9 @0 | //填充数据
8 |1 m' c/ E, z: p/ b5 `9 [, v4 } for (int i=0;i<MAX_INVENTORY;i++)1 V7 G7 h& x; L" x3 R) ?* |- Y u
{
1 x1 m$ l6 j) L _ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
7 m) l7 N! P0 A: J1 I2 ^ if (!pItemElem)
. E4 t8 ^& @# f! d+ ?' Y+ g {
" i) T e$ q$ S3 g: v vItem.dwKind2 = 0xffffffff;
X# S" _- E! N vItem.dwItemId = 0xffffffff;1 Z Q! W% b" d1 P9 \: l+ K
vItem.nIndex = i;
5 Z9 ^5 |- `+ f h( w$ u* F% [0 ^0 u }else {* y+ _* N) R2 D. D0 r c
ItemProp* pProp = pItemElem->GetProp();% T9 B5 ^: m: Y
vItem.dwKind2 = pProp->dwItemKind2;
" Z/ }2 i4 E# g: _! E5 F vItem.dwItemId = pItemElem->m_dwItemId;% x& ^; F0 ~/ H
vItem.nIndex = i;/ A8 {% e% b0 l0 b/ H: f
}
; Q9 v p; L4 B% B8 H //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);5 O! h$ m1 G' _, D$ c
}
. _: r0 k7 e- i( O //////////////////////////////////////////////////////////////////////////3 d* X# ]) S- j/ Q$ @6 }
sort(vItem.begin(),vItem.end());//排序
3 u1 N% u6 j5 x, C //////////////////////////////////////////////////////////////////////////
K1 ~' |$ _# E7 K% A //交换
( v3 ~& g+ l/ }; P8 U+ [9 `# w for (size_t i=0;i<vItem.size();i++)
: L4 ?$ X; X S) {9 e/ ^ {: H5 s+ @ Y6 H9 {! i4 A
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);) x7 M8 m- s: q
pInvSort->Add(vItem.nIndex); n0 i- b2 X0 \ n
}
7 u: c" f% |8 R1 q# M- U BYTE nDestPos = 0;& `" W- d, F1 H+ Y* \' u# u% A
for (int i=0;i<MAX_INVENTORY;i++)
8 t- N* u8 B: m" F% V {
1 ]7 Y8 l/ k/ r$ a6 b: K0 H, m2 |+ q CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
1 r: Q- I$ R3 E3 ~: o if (pItemElem); W% `4 Z: ]# x8 f3 @2 k' t* [5 k" j
{* _: X8 r8 x& l
if (IsUsingItem(pItemElem))" W4 a* o: q& c1 a' q* n1 d' c, ?
{
$ q& T5 l, ]) K$ f$ ~: | //这个位置无法放
8 J: W2 J4 J+ p& \7 t nDestPos++;
0 k+ Q. r u7 w7 X/ r# _. |3 q }& Z' [" [/ v" q7 F6 _9 Z' Q
}
" _+ [2 L& Y0 m% c6 g3 m- f) @ BYTE nSrc = pInvSort->GetItemSrc(i);
- l$ h6 I6 P+ `5 h [8 P pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
5 {. g/ u: {& q3 O if (pItemElem)3 Y& _/ C7 A9 M0 i5 m
{
* P& j* ^+ A) k if (IsUsingItem(pItemElem))
6 r v7 S5 l: |; |( } {! o) U: B; G8 ?' k$ s
//这个道具无法移动,跳过
4 k! W6 ^' o! o6 i continue;- s- w- ^2 ]4 _) x( ^9 N" M' k
}
; U/ Z% N5 h: T9 @) b n }else{
r% [! E& |! m //空位置 不用动5 D# @7 B% Q) {! L9 w, t
continue;
! H9 h; n! y! d% p% V }1 j8 R, r' I. n
//////////////////////////////////////////////////////////////////////////
& R# I! S6 P+ }! I2 p //开始移动0 g5 i7 H8 {$ I! P5 ?$ F
if (nSrc == nDestPos)
+ |' t7 _- `1 ]- R {
2 R! u K; {% u* m" S% x //原地不动8 Y$ U3 x$ h% Z
nDestPos++;
9 u5 e/ _9 j6 O3 D( U. }' C( c continue;8 Y$ @* z t- N# d
}1 J# T/ b2 x2 E. N7 q
pInvSort->MoveItem(i,nDestPos);
2 ^% B9 i. Q& k1 R g_DPlay.SendMoveItem(0,nSrc,nDestPos); z+ r% l( U- o' ^! }9 f3 [, B% }
Sleep(5);1 C7 s l1 S: z
//Error("移动 - %d->%d",nSrc,nDestPos);
1 y% k- o/ p2 i( h* o' n: D2 c nDestPos++;
0 C7 Y& W' k: [, n C. ] }9 F0 t6 i8 C; {1 ?8 Z8 p
//取第一个元素的信息1 ?& A" S k4 O( {! k# m$ e
/*
7 m: Z* o* |; q* I if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)1 y" F+ H/ B" v! k2 i: Q. q3 x
{
3 k% A5 |; t. p" l# W6 y# L Error("Move - From:%d,To:%d",vItem[0].nIndex,x);* p+ i5 b+ B$ J8 v- d
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);2 I" e5 |8 {% V6 c& j
}- A+ a6 `* t# D& f7 a# S
*/5 R: S; \, R" }
//////////////////////////////////////////////////////////////////////////7 Z! W: s8 O, a' U# G6 j
break;
1 _- W7 S( P! C! U0 n }
# k2 ^, F; A/ f+ @8 A$ ]% ]3 x }
3 D. r8 U% ]* `7 G1 q}
& v# T; O. F, ?. B0 Z3 Vm_wndMenu.SetVisible(FALSE);- F9 g \+ y0 E( f; B7 [8 `
4 K9 C; P" R7 W7 Y/ W2 _2 C. e: t--------------------------------------------------------------------------------------------------------6 f+ Y4 X W$ H3 w- e$ P4 u0 |
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
6 L# c5 G% T: Y R% ^% \{& X+ L! E3 Y& [
BaseMouseCursor();
% h( a8 K* @2 u6 @1 Z E}/ |" J' g1 G3 u6 v
在其下添加:2 a, W; m3 J) \, K- s6 f3 ~
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)) a* M! e& H* i5 h! h
{; i2 @+ w! ?5 S9 v" l. o$ i
m_wndMenu.DeleteAllMenu();
; k- i" w% a6 \. d- mm_wndMenu.CreateMenu(this);8 B; F: _4 b1 f, ?8 `
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
8 M0 M& i; _ j0 I" n$ j( z. Z, R$ _6 l
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
- F4 D i8 G I{
) t9 l! Y* M( b/ O6 q. N2 F8 P //P以上级别才可以删除所有道具
B( e9 a* j$ \' s m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
! F- P; |' l* r8 k}5 {0 }* m& V( R$ E; E2 D! \$ R
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );& r C1 Z! ?3 S& f1 ^ L# {
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );; _8 }7 i4 l, B0 i( Y; w; Q
m_wndMenu.SetFocus();* {: ?: U; K7 V
}
8 j- T% I1 \, I$ j------------------------------------------------------------------------------------------------------------5 Z' R) E# [% h
************************** f% ]9 u8 u/ B4 r& v- F$ g- p% H& |
WndField.h文件
1 R4 I9 o: k z. M4 n8 n! N5 k*************************
' ]( n! F$ _2 C) q4 e; y搜索:BOOL m_bReport;
& L1 y5 K! r9 v7 l3 a( @, j其后添加:
1 n$ j. H# w3 v( L8 E. ]CWndMenu m_wndMenu;6 F4 p4 P. T5 T2 I! E
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
5 Y0 u X5 T* O2 ]其后添加:
1 B- p" J6 w- r: Tvirtual void OnRButtonUp(UINT nFlags, CPoint point);
4 U F! ~" w+ _- d8 _7 I* ~9 L* g, t9 w% j9 s+ H2 T
+ a I2 Z% d! s0 m) b0 ]; C
|
|