|
|
源文件中_Interface文件夹下WndField.cpp文件- ?2 t5 _6 M) j; r
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )% l( V( V7 f' U& A v/ K
4 A* z# W9 G5 i9 g$ g' N8 Q- r5 b
struct sItem
6 `' J, `- U0 p) ], x{5 W7 Z3 p1 O- Y2 A( ^( Y
DWORD dwId;
. H) K2 I$ }$ J, Q; H+ C uDWORD dwKind2;
& \/ l, Y* i$ b. n5 ^DWORD dwItemId;) k! G. e+ p! y
BYTE nIndex;" o& o4 [) }2 L4 q7 y$ I
sItem(){6 @) \( E1 X5 b6 Q% ]% Y
dwId = dwKind2 = dwItemId = nIndex = 0;$ f! e( U5 y1 `
}
6 z: v% Z! e3 x7 ]bool operator < (const sItem p2)
3 I- m! s* k" Q. y{/ m* l% f: m4 p1 K* ^
if (dwKind2 == p2.dwKind2) C; v* O9 N9 a+ q3 h' {, u
{
( l0 p& p) H# f i& V- ]8 K+ k G return dwItemId < p2.dwItemId;
# ~9 e- W$ W+ Y4 P% v }else{
, H, c$ y3 _0 x9 }* O. U; N return dwKind2 < p2.dwKind2;
- G$ v$ k* d# ~$ ] }) c" C9 f) `2 }+ ]' n2 p! u9 I
}
8 p0 @( l6 A- U, X};4 w Y- x; \3 y
class CInventorySort
D: {: U$ o/ C5 T: m$ }{
, Z+ z% U6 q9 a/ z0 Tpublic:! }! `& u8 U( N
CInventorySort()5 |" W6 [# e" c
{
" U0 K2 `. G; C9 m1 F m_dwPos = 0;# m0 Y# j! q9 T' z% I( w! A
}
6 R3 A) X: o) }/ k2 f, @% d( _~CInventorySort(){}
/ I& w' C& ?0 Q. Wprivate:; u7 T* o# r/ C$ P8 g- T
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息2 b: g8 x3 B% U# I
DWORD m_dwPos;
2 j0 _8 R! E5 f' F, ^! Apublic:7 q- \, e) k4 ~! o5 G+ M
void Add(BYTE nIndex), \) ]4 z! [6 @" a' m
{3 j$ C* o# Q% D8 m+ x
if (m_dwPos >= MAX_INVENTORY); Y; k$ v- i3 ^7 I7 }" |, f
{+ ?# T/ F T4 o+ w* V0 q5 q+ R
return;, V4 Q2 q9 L$ I3 |( B1 T5 y
}
8 z7 f9 s1 j f) _, v, L/ g m_Item[m_dwPos].nIndex = nIndex;
' v( J6 c6 ]; K3 M3 G/ [5 d m_Item[m_dwPos].dwId = m_dwPos;
0 H* E$ b# p. A* b% t3 o m_dwPos++;
8 N% p; Q \6 O0 o) p}& Z; S. j/ \% T. X2 B& g; c
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列" ^9 _- T- h# Q: _3 C+ W1 I" o
{! i8 p, e) t L. z/ s
for (int i=0;i<MAX_INVENTORY;i++) ~' q6 [- a2 W5 {- L: S$ W
{/ U& ], q( C# ]" J
if (m_Item.dwId == dwId)
! Y) F0 }# d5 t( I9 C4 g {
0 h3 E% n2 g- |" i m9 x5 e" Q" a return m_Item.nIndex;
( S5 p; v& Z! b5 X6 a4 S l! _ }
( V. R2 a1 n+ u, ?) o, U6 Z$ a }% y9 c! Y$ l2 Z+ o) r
return 255;7 n7 {+ N0 R8 A8 X/ b0 A [
}7 b% ~8 G/ C" `; r. p1 W
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置: ^, `" \* b0 v% w3 _
{ R4 k& R4 [3 @
BYTE nTmp = 0;; L9 X0 z: W: O7 V9 `) E
bool bDest = false,bSrc = false;
2 E% m4 e* {5 s5 d5 t$ P for (int i=0;i<MAX_INVENTORY;i++)7 q% |8 m( q$ L
{
4 U V, o. ]$ O8 [; |6 P0 { if (dwSrcId == m_Item.dwId)/ q! i0 A% L, ~' j
{
; A2 N& F+ ~3 l6 p7 A1 P2 |6 C //id相等 则 改变对应的dest和src3 c# G! F! t- y4 h8 p# S s
nTmp = m_Item.nIndex;+ L2 d" d6 F( d& k
m_Item.nIndex = dest;
* ^4 o2 Q9 e% q4 F5 F }9 a9 Q9 _6 G: w
}
( M1 j! S& ~+ ^! h //临时数据保存完毕,交换开始4 ^4 `: ]; ?9 i, j
for (int i=0;i<MAX_INVENTORY;i++)
& T4 q0 ` {: P6 J$ } {
' |1 o# k* r, C4 E if (dest == m_Item.nIndex)% v2 R( C8 e6 g$ y# f1 N4 @ X& f
{0 Z5 [# Q0 ?$ m; [8 K# |6 G; w' V) k* W
//id相等 则 改变对应的dest和src% |- v1 n X* n% _; ~
m_Item.nIndex = nTmp;1 n& L2 z- Z! S8 Z
}
+ O0 b. D1 A& D z/ z }1 M! {6 H ?8 b) U, j
}/ m% y! ? o" k. t2 d' q
};$ F6 R& e# h5 k2 e
-------------------------------------------------------------------------; ]. c( L' D, e9 C/ l# J
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
1 G) o+ ^! l- r9 i/ B% N, x$ o搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
( g+ d" ?1 {, ]" X( e+ R紧靠其上添加:1 U) |7 H- C1 W4 d$ V' V
if( pWndBase == &m_wndMenu )
# P. L1 J# y6 P% f- G$ |# j/ ~: X{
}0 R: z+ u# O9 r* d7 [1 v* k switch( nID )' P8 Y) J9 U; I7 O
{, s4 g* ^3 k2 J$ g1 d& D) n
case 2:
2 Z7 b, `3 V8 [" F' g0 k7 b; |6 \/ [ {
' G3 j+ i6 r |9 O4 Y0 @# l& m //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);, Y& j4 X3 i* x2 g {# l/ f
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 Z; {& G4 ]9 V4 | F, a. b( j {8 D0 ~. }- k, @& O
break;* J% Y! w' K6 i1 y) X1 }: c
}9 S1 L' ^# i+ e: T' H& C( ]' f$ Z% k
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
- Q) I" p- j+ f0 w8 o* ], Q {
8 Z% C- s4 W3 y5 L CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
9 g9 _# j! ?3 H7 q4 }( `& c if( !pItemElem )
# f, p5 g j% q6 G4 u; z; s continue;
0 A5 ?1 O) s7 F4 d) @8 R" H if(pItemElem->GetExtra() > 0)
7 S( S; ^& z! E, m' f) Z$ }/ q continue;
/ i* N3 ?" u" ~: o7 o: s if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
0 b" V. N! z# U continue;
0 I0 Q2 i8 ]) b5 x0 c; X, \7 C if( g_pPlayer->IsUsing( pItemElem ) )) T- r1 ?2 u# F, Q& p0 c5 m
continue;
2 ~+ d/ s6 X3 x; N4 J: Z/ `4 B4 i if( pItemElem->IsUndestructable() == TRUE )
# k9 r0 c: o6 {% c8 Q. ^ { C7 J3 N# t% w8 c+ I6 S# x
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
+ ?7 k: S4 @7 `) s# ]$ Y5 \ continue;
5 K/ H4 R2 j; r. | }
, C, ^1 z/ q0 j4 n e/ u5 I: G+ d g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);% t' P5 Q) P, @2 a. w& J
}
" S$ f5 h: e( I3 h. ~; f break;
9 d% w2 K& ^! Z6 m& P9 } }
% t) @" O6 w4 {5 u/ Q case 1:8 n6 F" J: _. W% g# g) h
{# @9 I$ V' I/ g/ W" I
//整理背包
* O1 f. c7 v, h' j2 O: o //////////////////////////////////////////////////////////////////////////
5 C- D- \' k- e( N //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
/ g6 T' g/ B$ x) L1 O, X //////////////////////////////////////////////////////////////////////////
; j' x: E# ?6 I$ ] //////////////////////////////////////////////////////////////////////////
4 B N3 h$ S2 v# b CInventorySort* pInvSort = new CInventorySort;/ \# o$ n3 s I; |) ^
vector <sItem> vItem;
, ]1 _+ \- z* @6 X, H. E% m vItem.resize(MAX_INVENTORY);//初始化大小 l5 W Z6 u6 l& }- T9 ?. D
//////////////////////////////////////////////////////////////////////////( }' _1 C3 \5 a
//填充数据
0 d8 H+ _/ b ^; g! ` for (int i=0;i<MAX_INVENTORY;i++)
1 d" P* K7 A- R4 B {/ Y/ U" ? A2 f7 b6 V, _! f6 s
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
7 u$ {# Z) d+ b# p+ c if (!pItemElem)& G! @5 j0 \9 s
{( D# D% Q% G. m" E$ R) z. h
vItem.dwKind2 = 0xffffffff;
. h& |7 J& @5 W. D5 R& o$ N$ ~ vItem.dwItemId = 0xffffffff;
: H% T- P7 @& L7 }3 k/ B# l vItem.nIndex = i;3 Z u9 I& L! j3 Y) ~
}else {
5 G) k. Z# B2 M4 A" J2 X2 f! m ItemProp* pProp = pItemElem->GetProp();
2 n0 `9 Z5 O' F% R" ^+ q vItem.dwKind2 = pProp->dwItemKind2;
5 {/ `" c% Y- a7 S: t vItem.dwItemId = pItemElem->m_dwItemId;
3 W4 J( l d* `9 Z5 d vItem.nIndex = i;5 _* @8 `! M1 y6 W, S
}5 `$ W$ j# P; X4 i4 Q7 N
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
4 b( Z' r) Z" D; W }
) r0 L$ L* f) c y( @* q- d7 ? //////////////////////////////////////////////////////////////////////////
! [+ W9 a0 n* |+ v5 p! F1 B q1 j( W sort(vItem.begin(),vItem.end());//排序# S2 ^1 I+ {9 Q6 Y# h
//////////////////////////////////////////////////////////////////////////
% f6 ~2 o6 E: j) k* L; P //交换& n6 I% X8 l) |: C# D$ A8 Q
for (size_t i=0;i<vItem.size();i++)
z- M8 \4 M3 u {+ I) G/ F/ C" c) S4 I4 A
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
7 o# \( _7 A+ }0 E3 p' g, W pInvSort->Add(vItem.nIndex);
8 y+ D2 o0 b ^$ ?; D+ H9 u }9 O$ K. o, b- f! n
BYTE nDestPos = 0;3 Y5 F1 K5 A0 |) t/ P
for (int i=0;i<MAX_INVENTORY;i++)
& X) M! r3 b6 l; h. s" a7 E# y2 s {
$ B# G- i8 |8 N3 `+ X5 J. S4 b# D: W CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);* v" _/ W7 H: c7 B! @. n& n
if (pItemElem)* Y/ f4 h1 r. |+ _
{) l- K' S* t3 c% B. s
if (IsUsingItem(pItemElem))* c& {0 O2 g- S5 t
{2 g7 J' K( f* h u
//这个位置无法放0 _+ D4 k) s% f8 d @
nDestPos++;
' W% K3 O! I8 [& n! U3 | }: X" o" u2 I. J: ]# Y0 ^6 e, e$ t
}
; y( B3 r ?1 \7 |/ M BYTE nSrc = pInvSort->GetItemSrc(i);# T' J& o7 {' S' x9 F
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
' I/ J7 n6 `" ^: @" d2 h if (pItemElem)
# f& S3 U7 W) P2 a. B0 }' ?; H& J+ M4 L {% Q2 f( o; U4 X5 n5 I% G
if (IsUsingItem(pItemElem))
+ ]1 i/ D; |8 h0 J+ P {
8 t8 d" _6 g" h, Q- z- B- g n //这个道具无法移动,跳过" O1 D- O! I# U5 f; Y6 a+ X4 o
continue;+ j6 T; ~! W6 _" r7 q4 v
}$ ~8 V0 O3 z# F& b7 [& A
}else{
* M% |7 B2 s5 B0 {3 z5 ^( c, S/ a6 { //空位置 不用动( o$ A* S6 u7 b0 }5 K
continue;! T- t6 o7 X, S0 e3 }
}) S F* [( C; D! n+ H/ g# y' w, j& ]5 d
//////////////////////////////////////////////////////////////////////////
; A% ?& j$ i( V1 f. E //开始移动" o6 g4 J& O5 I! v# w3 D
if (nSrc == nDestPos)
# @, C* Q0 X/ Y* d* \. f! W {3 ?8 J' V4 ?" Y8 |/ [6 g0 T" f
//原地不动
4 |/ n# I; y$ j7 i6 T nDestPos++;
& H0 ?4 k, A8 \ continue;
& |) U& k% P y }2 j P Z/ e4 X/ @3 [; V# B& \
pInvSort->MoveItem(i,nDestPos);' s, D8 f" ?" h/ n& R
g_DPlay.SendMoveItem(0,nSrc,nDestPos);& M' z, ]4 {. W' R
Sleep(5);* u0 c$ A& k- L$ [& w4 l
//Error("移动 - %d->%d",nSrc,nDestPos);
, @4 ?. K. k4 p. F, R/ E nDestPos++;
. E" |; [# ]" v/ e9 d3 Y }
* j7 w0 k. z* T) m //取第一个元素的信息2 G6 j3 I/ R6 b3 T" h. z& L+ k$ A
/*
2 u Z* V* _2 |3 V3 i; q/ ^" `+ H if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)3 F' W: W4 g: h3 O+ F
{
0 f& F& p( D+ U- f$ p0 x$ i Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
* n+ ~$ U, F; x6 w& V g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);3 ], S7 N1 ?: Z' T
}/ U( \8 j$ X3 l- l; V" b
*/& W: A$ g8 m1 T/ `9 v
//////////////////////////////////////////////////////////////////////////
/ k2 [! v0 X2 L" U3 p! o break;! l3 e5 f. @& k j# g1 v
}# L8 ?9 C7 P* x* y
} 9 b) j2 a" W, z2 _) o, Y* k f2 \; X
}
) D. g2 s8 _2 w1 I0 Sm_wndMenu.SetVisible(FALSE);# _; h; m% K$ }9 N7 T1 ^& |
7 h: d3 F# Y1 r' l0 s--------------------------------------------------------------------------------------------------------
J* _' y |+ Z7 ^) @搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
- u. `- u% L2 H7 T{
6 t6 f' T- |5 FBaseMouseCursor();# y* O2 Y& g* {6 @ C! z! ^ Z! V* K
}
2 h9 H: D3 G$ B% e" |% C在其下添加:
7 {* I: B( C5 v+ b. n+ v' {( Z0 qvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
+ u7 U- x. ^' u3 |{
4 T4 A4 f B" s; ]; dm_wndMenu.DeleteAllMenu();0 P' X/ N* f' `! S
m_wndMenu.CreateMenu(this);
- w. c: }/ P- p% }( vm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");! p5 [4 Y& ]& m n" T+ a; t
' |6 D- h: `3 [" K' C& U; z
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
; U; J% i. }; J, N# ]* M{' S' H! E [3 [
//P以上级别才可以删除所有道具
1 G& i/ i+ {+ j! L- F: A m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
3 W. }0 N) ~( M; H6 B}
3 @$ a/ [$ x9 L2 l, pm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );6 U6 @2 N/ J: _1 H9 z7 v0 f o: S- g
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );' y0 n8 H* r& z( ^( u
m_wndMenu.SetFocus();
I# F; N/ L; n: I& s}
8 B( `' m7 G2 b------------------------------------------------------------------------------------------------------------: t+ v- }9 F! M* a% G' y3 p2 k$ W
*************************, F9 r3 F" j# R# h' J3 u- O
WndField.h文件2 y% F8 s$ Q! X
*************************+ w ]* X2 K! K5 @! P
搜索:BOOL m_bReport;
6 I/ t+ ]$ |- A0 \+ Z1 v$ p6 i其后添加:
: |7 \/ L8 I! V6 `# FCWndMenu m_wndMenu;
9 T5 f0 A9 s9 u7 ]搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
: w' v; N; _9 C% e$ \) q其后添加:' k, M f8 m0 ~, F
virtual void OnRButtonUp(UINT nFlags, CPoint point);# R# A- E" `" {. }0 E4 G# {
3 x* N+ q2 U' ~* A" p% I
( L; }* Y" x8 e1 M6 F |
|