|
|
源文件中_Interface文件夹下WndField.cpp文件
4 M, S; N0 M6 [6 G5 i搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
! k6 N. L$ X, Y( ^( ?7 w/ c, ~" p% q& @; K& h
struct sItem# y) H U& o# }$ M. q, v5 t- c! T" }
{
6 L. q# ^5 l- T: S, M! e2 X1 cDWORD dwId;7 s1 O) L; Q9 n( t
DWORD dwKind2;
( U0 x4 i/ B8 k: a8 UDWORD dwItemId;
4 a5 s. T* p- q D8 o9 d: jBYTE nIndex; ^* j- n2 Z9 D3 M
sItem(){- d( ^7 N) S. |# l* e1 t
dwId = dwKind2 = dwItemId = nIndex = 0;
% P( t, J& ?) J c0 g}4 H' O9 Q8 c8 Z2 b
bool operator < (const sItem p2)9 T V( L# [3 a) W" ~2 E+ g
{
3 U6 F7 ^: B' J; C if (dwKind2 == p2.dwKind2)1 m5 L* ^' P, G% h
{
* `+ z3 ^! @" W2 x return dwItemId < p2.dwItemId;% N8 H0 X9 u3 D( o0 n4 H% }
}else{
! j" O2 g+ `& D) K return dwKind2 < p2.dwKind2;6 i: x; E' r' H: x, r
}
: f- W# b: h( W}
" k1 Q/ P* c U+ F};
6 ?: r" i/ z& }/ M" w, g) v0 sclass CInventorySort. `/ \* k( y* c% Y* C4 q3 r+ {+ i
{
2 n7 }% P2 E( F7 w0 r: vpublic:6 H% o; {- E$ Z+ M4 I' M6 M3 f
CInventorySort()1 ?" A" M" t; C# N" {2 M" u
{# {9 `5 j) R# W; P( y
m_dwPos = 0;
; a1 k- F* C/ P0 q! Y}
3 t. A% t" f0 {6 a$ k~CInventorySort(){}% D' u9 }9 w6 L# h
private:
, J& G' a1 D; c2 o( ^sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息* @3 P) p2 Y9 D# S+ X
DWORD m_dwPos;5 G1 O6 m* T- o7 i) ]1 t$ U7 d
public:
8 X0 V4 C9 D8 C% M( E+ Q' Hvoid Add(BYTE nIndex)( S7 }+ g4 X P6 y
{
Q9 T1 k% Q) W( Q$ K$ f- c: Y$ z9 S if (m_dwPos >= MAX_INVENTORY) `- P- n; [- d
{5 @7 g& W% @, r' _$ P. n0 v* L4 [1 u
return;
# J! \. K: V. y) i }2 l* _0 t* l! V% ]" M! p
m_Item[m_dwPos].nIndex = nIndex;
( f6 g Q* f5 \9 @: u! P m_Item[m_dwPos].dwId = m_dwPos; k0 j0 c3 v7 w$ j. M) r
m_dwPos++;: I" U/ n7 D: A! N' R
}
1 V( H3 p9 ~' b! [BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列& z! l! y4 |/ f- A1 M, U( Q
{
( i0 y1 m, Q( Q( P- l1 |9 l: J for (int i=0;i<MAX_INVENTORY;i++)
7 l4 q$ D1 r. |" b {
0 L: H5 \5 V# `! a: c4 [. X if (m_Item.dwId == dwId)$ j+ w N5 W2 \1 s0 A8 }
{
9 W/ F: t2 y ?) o& c4 @ return m_Item.nIndex;0 A8 }$ X7 H% @0 t/ @
}. E7 u8 E* n8 ^2 y+ e
}+ E* a8 _/ F" g9 \9 D
return 255;
$ P! e4 @& |9 O; F3 z$ C2 P) ~}+ T- W1 ]3 T' p+ S$ t, L
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置% m: Q7 y P h
{$ o" L( e: h% |7 L& u! M9 U7 Y
BYTE nTmp = 0;
7 V. y9 N2 ^2 f5 Z9 G, R$ [0 k bool bDest = false,bSrc = false;
: g0 ^: j7 j4 D for (int i=0;i<MAX_INVENTORY;i++) ?' k9 |: |+ Z* A5 D- i
{
6 Q" [+ X# l6 }. |" F if (dwSrcId == m_Item.dwId): t1 T- g( W0 C/ F
{
2 D6 P+ `+ x1 P5 u$ c1 b) M //id相等 则 改变对应的dest和src
+ t; j( l$ Z8 h$ Q9 t) {% \7 e. c# z+ { nTmp = m_Item.nIndex;
5 }! {& U& L+ H m_Item.nIndex = dest;
2 V: H' W/ t2 Y% P- G+ T4 r1 t) U7 [4 f }
2 ] \- g* _" F" n& J0 u }
# W" h& ]! \3 W9 _3 A* l1 R) j //临时数据保存完毕,交换开始
. c: F( Q1 T! {9 V for (int i=0;i<MAX_INVENTORY;i++)
0 S: Y! n) Y0 W6 a {
+ _6 Z* Z6 s6 [) \" N; Y if (dest == m_Item.nIndex)
; Z, v: Z% ~, T/ P k" _2 } {7 J) f+ c) C4 U; o1 W) d3 U
//id相等 则 改变对应的dest和src& F& U! f5 T: C+ R2 l
m_Item.nIndex = nTmp;
2 s3 u; v% n7 A) `# g, a }# G3 { W3 B# T9 v( K( G
}
* }/ D$ n9 t1 l0 Q" d( N \}
4 ^4 @* U, L% Y4 O* z$ g2 o};3 N& Y! ^) U6 R
-------------------------------------------------------------------------
- O! e* V3 x m依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )2 m9 R# T. T; b. v3 q
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);- b+ d8 h0 ] G' O3 e. o
紧靠其上添加:4 M0 A* K. A1 P% ~) B" e9 N
if( pWndBase == &m_wndMenu )8 l+ z' e5 |8 j2 |0 y
{0 o/ I7 r+ I# y2 k+ ^$ Y, V* g% n
switch( nID ): W9 f# {5 G: v' e; j
{
$ N' [& B5 t1 _/ s case 2:
9 c! y+ |; V% N$ }% e {5 e0 r8 |$ {% M; Z/ P
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);+ |5 W+ I9 V( a$ j: d
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))1 j0 w( a7 y9 `
{& l' {. u& \; O! q4 x7 i! R
break;) S0 S c9 T" q- R+ p( f
}
4 z5 u" _+ }/ |2 q6 e* Z; q9 u! Y for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)" j. c: {# H' c- `# f6 Y) s* W
{
' l4 r+ i( ?8 B* z9 q5 _ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
" h' i7 D! I8 O& R+ R& {/ } if( !pItemElem )3 T% P% }3 O( o( d: O3 o2 m9 m, |
continue;
* ]) E) E: l1 X$ ^ if(pItemElem->GetExtra() > 0)
3 o& _' j1 O& [& Z6 p continue;1 v; p8 ]. y6 M
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) * p7 k# W4 p8 l( z( r
continue;; X9 r6 P5 |3 J0 r6 j6 c0 t/ A: F
if( g_pPlayer->IsUsing( pItemElem ) )% K) y/ k' c+ M" ]/ w: b" j
continue;
[5 d# s8 P0 R+ J; X) W5 K if( pItemElem->IsUndestructable() == TRUE )2 N: O4 w# m1 `1 b
{. H$ R: L7 B% J
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );% h; p5 f7 @2 c4 X
continue;- |! R" h2 L$ x# V8 n: A0 C
}
; p0 }4 B6 y1 t- y4 W4 X g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);7 W% J# z/ E0 X1 l9 [! q
}
7 q( s8 Y+ j- g break;0 f( V8 ~6 l+ m) M: j' r7 q
}
, o) q6 R* L# K0 b5 M case 1:; m, R9 v* R; r4 j, W5 z
{5 u! M* _% q/ Z5 f
//整理背包2 {# o2 f4 z9 @% V
//////////////////////////////////////////////////////////////////////////
' t6 {* S# ?: U, D: l2 h T //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
" j! e* j" ?0 C& |% c //////////////////////////////////////////////////////////////////////////
4 r9 [* t* D' t; N# P //////////////////////////////////////////////////////////////////////////& m9 ~. U6 R( e: V3 B
CInventorySort* pInvSort = new CInventorySort;: i8 i9 t5 i( _8 F& | r4 ^
vector <sItem> vItem;
# k' I( z# V$ [, f9 i8 d' ] vItem.resize(MAX_INVENTORY);//初始化大小
4 M, p% V4 W3 b5 M7 |1 }/ _ //////////////////////////////////////////////////////////////////////////" I$ J/ h$ z/ o+ v+ v* K: k9 r- x; q
//填充数据
0 z# X" k( l7 Y; l4 H7 {0 T for (int i=0;i<MAX_INVENTORY;i++)3 B# q* W& R" i) f/ F- Y+ M4 D
{
% |' Y! _6 ^: N6 _, `2 O CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
! @1 R- }, H T/ D" y! C if (!pItemElem)
9 s/ c" s4 Y1 \% v8 O {. q% n F) {# O1 o4 {' V4 c
vItem.dwKind2 = 0xffffffff;% p( ? ]/ p0 A. Z0 c/ O3 R' m* O* t
vItem.dwItemId = 0xffffffff;
- H! k/ W/ [2 B4 v% F0 g { vItem.nIndex = i;
6 o. X7 c! F- O }else {
! {- b `2 G9 l" f% X1 s3 \ ItemProp* pProp = pItemElem->GetProp();
8 `9 ?: t# m- E1 V; ~# X vItem.dwKind2 = pProp->dwItemKind2;
' A. `6 }2 q: b/ U vItem.dwItemId = pItemElem->m_dwItemId;, F! p" J8 p$ g9 \3 k& {3 p( b
vItem.nIndex = i;( \# Y' `- |0 j: K
}6 P: c, u9 z" s9 g. I- K
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
8 K+ ? t/ V. H, G! c" j }
( v# K; {( i( W# ? //////////////////////////////////////////////////////////////////////////
5 _9 X1 s' J" e I7 D+ m sort(vItem.begin(),vItem.end());//排序
% `' Z8 m/ }3 d //////////////////////////////////////////////////////////////////////////5 h8 @! b* o/ u' h3 D9 x) h
//交换
% j& p. W* W4 X" V6 @, T, ^$ w1 n1 N for (size_t i=0;i<vItem.size();i++)1 @3 p$ L& c% D- D/ M
{
; ]/ } a& h6 E& [) E4 _/ V3 _ //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);3 N1 d' K- D T4 \5 Y
pInvSort->Add(vItem.nIndex);
( n; I% i& d1 P7 q4 S: i( c1 `7 { }- |# @# X- }! b1 E6 L2 D
BYTE nDestPos = 0;8 @8 i. @0 M/ ] C8 a P& L( ^2 Q5 Z
for (int i=0;i<MAX_INVENTORY;i++)+ \! \! b3 ?$ y# D
{
6 ~, X1 R" }. S; z CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
6 `2 d( \9 R- K( {4 i if (pItemElem)
; a$ E8 [' e) ?: o {6 w R9 `% ?; h2 s
if (IsUsingItem(pItemElem))
4 E" G$ k, V q/ o {0 v S6 U( E0 d( v) K
//这个位置无法放
U$ ?8 o- |. s O1 j nDestPos++;
3 s6 n5 v) z0 M2 F3 \4 t) o }8 [ v% n+ F; }# ~
}
8 j0 m1 b# s$ _5 ^. g BYTE nSrc = pInvSort->GetItemSrc(i);! w( d/ O, J7 n% Z/ H6 `
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
# G+ f& E. y- m, M if (pItemElem)) J+ ]( t. o M, j
{
2 g- A) i N, e, z- i if (IsUsingItem(pItemElem))+ g. {$ I: U, r
{# K B0 F1 p% g# Y
//这个道具无法移动,跳过
- o! M# W) D/ ]# d continue;
9 O! h: q4 _1 T- Z' V6 a) h2 A }9 v. G3 @7 ^" Y0 ^' A
}else{
4 s; \1 M9 a. {/ J+ Z! g( _( r //空位置 不用动4 g$ T' R* Z# }! N0 c: m
continue;' l8 g! j) _4 N
}
5 |) U5 l# |( ?" { //////////////////////////////////////////////////////////////////////////
& [1 ]! {" b _6 J% p/ I! K, V9 ] //开始移动
+ q, A, @$ e( K k7 g if (nSrc == nDestPos)
' D7 \9 W9 o2 g& b3 c {$ w4 ? f: J$ y, W/ Q' X
//原地不动
: {' k& c! w B1 F h% U% f nDestPos++;; T. Z% u. `+ p- h. v% J+ K2 [# d. s- G. k
continue;" v/ b& i L. @# l6 G
}9 t* T$ `4 ?: |, e+ E5 S1 G
pInvSort->MoveItem(i,nDestPos);
6 f: p1 r5 Z) b, \/ ?& ]* p g_DPlay.SendMoveItem(0,nSrc,nDestPos);7 ^# V: S$ K- E5 N/ l& N
Sleep(5);6 g0 h/ p8 z0 o3 R
//Error("移动 - %d->%d",nSrc,nDestPos);: ~/ F0 C6 o; {3 U2 u" q& B
nDestPos++;
* W+ W) {- ~; q7 J }' F, W. d; E1 c- _ |- E3 |2 [' V: L
//取第一个元素的信息 A4 H3 y9 c% A" Z/ D' j
/*$ x/ t; x) O* ]; o$ H1 T
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
' V4 g: V. V" ^ {
9 e% o! P9 @3 c8 w: |7 n2 T3 p Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
# L' z( E) `5 ] z7 W g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
$ l, f3 B N8 Z/ u$ u( C3 Q. ~ }5 K& u. v# k$ g7 o
*/
1 S' l; k$ H- G //////////////////////////////////////////////////////////////////////////% U6 o! D% B" C, ^6 h1 p$ \% p8 L) F
break;! |2 x" B6 I- j- x. m% c+ |0 N( f
}1 o) E7 Z" T7 @8 b
}
, i* o ^2 r" P& U}% O Y( a3 R, ~% \; L0 I) v
m_wndMenu.SetVisible(FALSE);! W* U; X/ I2 d3 ]
. c k0 B8 W# j; [
--------------------------------------------------------------------------------------------------------
8 K1 J5 d7 @& j6 P搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point) b% P, r- J- B/ U1 p
{, b7 x4 \3 O9 {# E$ Z/ l
BaseMouseCursor();
7 |- \% |1 ?+ W% ^/ x2 M( n}. w0 F9 d/ M" U
在其下添加:4 a& y6 T) n# p# c/ V
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
v. X; @3 Y) ^# c5 R{5 x8 W% x" ]8 B6 H, i
m_wndMenu.DeleteAllMenu();9 |; L' A7 s, H1 H; |
m_wndMenu.CreateMenu(this);1 |( ?7 h- z. n7 y
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
3 W: K9 R7 S0 ?7 G1 v0 n5 N! \8 p Y# F; C0 h( P( E
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))+ X" \1 s6 O) p, Y
{
5 {% ]8 o2 N3 A4 x8 o4 p //P以上级别才可以删除所有道具
7 u: w& K% J3 C3 {: P; h5 u' J; a m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");9 V5 |+ @3 F/ W+ w8 q9 _1 r/ {$ |. m2 [
}
, {& i8 k" P* U0 A9 Z" em_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );5 A5 K' \! {: W7 s; f, n
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
9 X; r2 K5 r4 jm_wndMenu.SetFocus();" c) y, S2 Q& \6 V4 x
}% N& \4 } c2 q' n0 }. y
------------------------------------------------------------------------------------------------------------
$ q# g% s( g' S5 B*************************8 ?) }' s8 F7 Y0 p0 f. @
WndField.h文件
9 c, N) q' [1 Z$ o************************** @- a Z" s6 \0 R# ?
搜索:BOOL m_bReport;0 \" ~2 Z2 Q' M& P: L
其后添加:& U6 u* b0 D; G: }+ r& M6 X0 Y
CWndMenu m_wndMenu;2 [. i7 b$ D' T3 L
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);0 A* A5 e, q; p+ S
其后添加:% G# Y1 j0 v' D8 H4 j6 l# l" Z
virtual void OnRButtonUp(UINT nFlags, CPoint point);
0 n" h% |& R( a9 |! n
: C e# X, L. c4 v7 U
3 D( x6 _2 b% C- J; r2 e0 F$ S |
|