|
|
源文件中_Interface文件夹下WndField.cpp文件! Y, ?0 T: h0 j: T
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
7 j2 k+ D! W; a. C4 g [
9 u5 I% f: U* fstruct sItem
! `' y! k% |) X( w" j! I{5 ~6 P1 R+ Q' c1 S
DWORD dwId;
7 n1 F; L& S0 RDWORD dwKind2;0 R- p1 K! _; p |/ P
DWORD dwItemId;
* _) ?) H% U8 ]% c" kBYTE nIndex;' }; W T/ A4 S9 `( Y) O
sItem(){% }" N; g2 S9 k
dwId = dwKind2 = dwItemId = nIndex = 0;
5 F3 |3 O# p J9 X J8 R}* d4 Q, O% x# Q
bool operator < (const sItem p2); k' r$ V' T {# D
{1 {% V. D5 l" w/ K4 G3 ~/ p5 i7 p
if (dwKind2 == p2.dwKind2)
2 B$ m( T" K! E6 E! d9 x: {8 @ {( V( s9 t' ~: t& p
return dwItemId < p2.dwItemId;
# d5 T! F) U; X4 T* G2 t2 ] }else{) S: {/ o8 K% A" e7 v
return dwKind2 < p2.dwKind2;' A. ]( w+ F+ C6 D* X1 i1 @
}7 ~7 a8 u! [0 A- w4 b5 B
}
9 m4 z) n7 d+ n6 ~/ d. T# e; v};
0 K4 U. o, W- q }class CInventorySort
( T0 p u1 h) C{
7 P8 H" Z- I/ G6 R" h' Bpublic:/ S4 `) @; h6 Q( U& ~+ K
CInventorySort()0 b! u. V7 W0 u4 |# J& b* ]: L; P y
{; [! F* Z7 I4 e. k
m_dwPos = 0;
$ e& L3 K1 l/ S$ k& p+ N}2 B0 Z/ R8 X6 n: l
~CInventorySort(){}
* y. U" p* k$ fprivate:
7 e, v- S1 }' e4 Y. NsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息' c7 M, f3 L) T i# r) [7 P5 [
DWORD m_dwPos;
7 q: E/ E% g3 V0 z5 M" [public:
+ z, D" L! N v2 U: ^3 O. \5 dvoid Add(BYTE nIndex)
- S: y6 {7 C' B. N1 I2 C9 b" `2 y3 O{
& ^# O7 e+ R2 f if (m_dwPos >= MAX_INVENTORY)
% ^- Q& W0 X5 \! G! ] {& s1 F8 \" q; t9 D
return;
5 c0 [6 G1 d+ [6 @ }% `. \& k2 o1 U9 e
m_Item[m_dwPos].nIndex = nIndex;. t& \) ^/ z' h
m_Item[m_dwPos].dwId = m_dwPos;
Z* l; \2 ^ v m_dwPos++;
$ S& C' U- f. ?' O+ z; \}# G% L% r: C3 ?; K+ L
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
* v& f1 x! x& h; B{1 P+ s3 B$ [8 w" Q% t
for (int i=0;i<MAX_INVENTORY;i++)3 y3 i2 S% Z; c$ E7 x4 I/ e
{
) f8 \3 k0 \( j" ] H+ w7 y" j8 Z if (m_Item.dwId == dwId) X5 Y0 u8 i3 Q( m
{
% B6 d7 b5 N; N7 X8 A( d return m_Item.nIndex;
/ y( q& g7 X4 B- z: F, {6 C1 y }
* a$ O8 \6 S5 J- T8 n4 H7 q9 v }
. H3 c* b2 C8 T- t return 255;
+ m" y0 Z; n9 O6 j O- P5 M3 W}
; { p3 E1 A% f$ ]8 Ivoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
% O3 ?7 \5 Y: f, r{
+ P$ V/ t9 c6 O% I2 _' S5 q BYTE nTmp = 0;
6 P) T& {6 M! B/ v+ @ bool bDest = false,bSrc = false;$ j w/ K. u' b
for (int i=0;i<MAX_INVENTORY;i++)
8 @7 f- ]* n! L8 \ {
7 d3 O9 p( u& ]5 X4 W% d3 s if (dwSrcId == m_Item.dwId). }# z5 [& T9 q/ c9 B& \9 w
{
* ]* m' x% V( `) E4 S4 Y //id相等 则 改变对应的dest和src; ~7 `2 U& T" `& r
nTmp = m_Item.nIndex;
0 X0 _; ~7 } X( } m_Item.nIndex = dest;
, v' @* A; {1 d0 b7 M& f$ q }
# i4 e- O/ R0 m( z @& C9 M }5 ~' h! G" X% _) n- Z+ U/ M
//临时数据保存完毕,交换开始
- C% V! J5 N' c$ N for (int i=0;i<MAX_INVENTORY;i++) R+ U) e7 R$ V. [" ~
{$ ^) W; x( u( A% n& t
if (dest == m_Item.nIndex)$ U6 W: D+ c0 x8 m5 _$ N7 L
{( p9 v6 ?. S# U* ^2 P7 X0 M
//id相等 则 改变对应的dest和src0 D5 R# P+ z6 D- L% [( m7 N, u
m_Item.nIndex = nTmp;
9 a! `- _5 K) S& m }9 F( E' D' h, s# j- w
}8 y8 b. p4 I4 K5 }) h' L1 P
}# |. O# ]9 X& p; Y" p
};
% N% ?8 Q' c. I5 [-------------------------------------------------------------------------! }) r' ]+ V( x; s# I9 V! c: o5 J) F
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ): O8 y* I4 S, |
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);$ }, P0 j: K' @' V8 Z8 k- s3 g
紧靠其上添加:1 o2 y$ l/ C8 V, F
if( pWndBase == &m_wndMenu )
' I+ w( R3 c( S2 a{2 Y8 I! _& o/ B `# j2 U
switch( nID )1 J, D8 ~& |3 T3 t
{! Y/ M4 ]% t* c+ p2 z# S# P7 H
case 2:* g1 X1 g; y; e; a( ^* S4 L3 ~* `
{& Q7 [) B+ h$ Q2 J
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);' r" @; @* ?( j& g0 H
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))* w$ Z4 m1 E. r# Q! H
{
) W* m2 R/ u" U1 s break;7 b+ q5 N" x+ c1 V3 j3 w
}
7 X; a# P6 I9 p% y( J3 o7 R4 Z for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)7 D1 A; x( e [
{% y! R# s+ Y' B) N
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);7 O w) M2 G! V6 r
if( !pItemElem )
* J2 }! v9 Y. ?1 l continue;
( N: [3 ]3 a/ c* y ]6 w2 `$ d if(pItemElem->GetExtra() > 0)
: n0 d0 Y6 `2 J! e) x. h# r continue;' i3 f r6 m) K7 B8 i
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 0 b( Y' U; O$ c; G! @, `
continue;
3 v6 T5 ^! D& Y if( g_pPlayer->IsUsing( pItemElem ) )
. _2 x/ \" p3 v+ T continue;1 S; ]: A! h1 o& W
if( pItemElem->IsUndestructable() == TRUE )" h3 ?- C) A4 h7 _) @; O
{
! j* F& ~+ E' R/ y g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );& D: N- g0 m' x' a
continue;
% ` O7 ~! e6 X; w& _# J' G( N }
5 N* i5 a9 q: a" K; c k1 m6 i g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);& A6 } d% {9 O8 R2 w: I; p8 ^) ]
}
3 |. M3 @' w9 y break;
; I% F9 Q6 m4 K' k1 t6 [1 t6 @1 L }
+ m% L; ^6 ~! ^; R* i case 1:
5 k* j$ G# c; I3 r8 H3 } {2 h) Z8 v' @# [- W* b) M0 W
//整理背包
% I2 D; d& R+ v //////////////////////////////////////////////////////////////////////////; ^% m6 }5 q/ G6 L& ^
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
N6 _, d9 `* G) k, n //////////////////////////////////////////////////////////////////////////
9 b. t$ p* O0 e! ]7 \, a# c/ L( Y //////////////////////////////////////////////////////////////////////////
0 f, i1 x7 D$ I CInventorySort* pInvSort = new CInventorySort;
" e" S$ b% q* Q9 M) x9 e vector <sItem> vItem;
+ N1 ~5 q% n$ v, H/ m7 o vItem.resize(MAX_INVENTORY);//初始化大小
f( @# c, o/ s5 a, x" n3 E //////////////////////////////////////////////////////////////////////////: u, z) Y( B% v9 u7 g
//填充数据
0 b0 V3 _$ d8 `( c: G# U for (int i=0;i<MAX_INVENTORY;i++)
5 v% _4 L) v3 l$ E% R5 [ {6 t, o# z; f5 f! E& n" n8 V* i
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
/ n% @) l4 }2 b8 y D$ [% K# J if (!pItemElem)) O) @6 B( G- A2 q
{
2 _3 R3 D" G* Z2 o- h vItem.dwKind2 = 0xffffffff;9 u) O: [+ m& V8 o( H2 J
vItem.dwItemId = 0xffffffff;
4 v4 a) p3 r6 C( k- l1 e vItem.nIndex = i;# S$ I g/ D) }+ K
}else {
9 ]6 X( ~% u$ M5 y+ @# \" |: a- D' R1 ^ ItemProp* pProp = pItemElem->GetProp();' w* @8 g: R! c; Y: ~& i) W
vItem.dwKind2 = pProp->dwItemKind2;6 v: q1 y- C' T: _, w9 F
vItem.dwItemId = pItemElem->m_dwItemId;0 b* c) R8 y" u- {1 M) Q
vItem.nIndex = i;# h: x9 s2 W! O- P, N
}- ?8 o3 E; r. i+ I+ B- [* P
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
+ d* g) t6 n7 |3 C+ l# i# v }2 r# g m* _$ _4 Q# T
//////////////////////////////////////////////////////////////////////////, _& o1 u, @+ D( f5 h
sort(vItem.begin(),vItem.end());//排序
0 w/ O' `2 g4 @0 H3 @! B' V' t //////////////////////////////////////////////////////////////////////////" Y, n/ `7 f$ @) [0 f2 y% \4 c$ @
//交换
* ?7 k. |. |# E& G% g; D4 g1 k for (size_t i=0;i<vItem.size();i++)* `( [: e# y. C, ~/ X" y
{
. S( D; }" Y2 k9 j/ Z- l- H* C //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
0 P3 D$ Q8 R1 W3 W( G7 t pInvSort->Add(vItem.nIndex);
% s$ F8 j" p0 C6 ^8 { }) \1 j& a; c6 v2 k( X0 T+ l0 n9 z
BYTE nDestPos = 0;* J" [: ?. V. F
for (int i=0;i<MAX_INVENTORY;i++)8 a/ G- Z) a9 @! e$ P/ K
{6 T' J+ B+ N4 e
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);+ a6 t. i3 C% t' y. j( @ {+ g+ @9 P
if (pItemElem)# S( j0 |" T/ p0 x' J% z
{7 M$ A- O7 H1 f0 ~
if (IsUsingItem(pItemElem))8 ?7 ~" C& n3 @6 Y2 X" `4 H
{
1 j$ v) J. z$ x# r; c //这个位置无法放
, M, F2 e- G3 B nDestPos++;
' ^& U$ t) F- R, W8 f, t) ] }
9 u; y: z) S& Z9 T, }* G }; r: y3 H% D# B3 Y n
BYTE nSrc = pInvSort->GetItemSrc(i);
) N$ S* D5 u5 w! Y4 M+ l, L- c) H pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);: b E. g8 U+ o5 V8 S) C* f2 T
if (pItemElem)
* {7 [% x7 T; L1 A3 I, [0 s/ c; _+ k {
8 O8 p9 { Y, Q4 W if (IsUsingItem(pItemElem))3 ~, K* T4 \% h4 @5 t
{
+ O n4 A+ _( O% @( g //这个道具无法移动,跳过; v2 K9 D, n2 o' X4 C- J$ Q
continue;
/ i* P! T( {, }! K1 q: q }- M8 Y$ N9 H9 }. j
}else{
3 p# z4 E3 t, b$ i! K6 V; o' G8 B2 o: j //空位置 不用动
8 F" X& z. L8 B. C4 z% l6 j continue;
" y! N. L! l" e) ~% d! Y }
9 b2 F2 L+ Q. K7 {9 Z0 J //////////////////////////////////////////////////////////////////////////
" a3 d& E6 l9 P2 ~/ p& J //开始移动
# x4 P5 X8 J: M/ Q. W- v: b: S if (nSrc == nDestPos)
2 B! C* R0 l$ I' P# Y8 N {
2 j; C r Z* [, @& p& k) ^6 G //原地不动
6 n; n {$ s% `4 E9 I0 w nDestPos++;
8 k0 Z, T) a6 b n! I$ H- m continue;5 D Q/ ~+ f$ J% |& c7 w" V
}
$ r6 [- P3 ~& a% M& L pInvSort->MoveItem(i,nDestPos);
) C8 H- J' E0 D g_DPlay.SendMoveItem(0,nSrc,nDestPos);$ f6 [* j6 k5 l) B! P' `
Sleep(5);1 J1 s) z$ K8 N& g0 ?* z
//Error("移动 - %d->%d",nSrc,nDestPos);' ?1 i) o0 f' A
nDestPos++;
. B1 h9 B- T' U( L9 ] }
e8 ~3 {4 ] \* ^# F7 j //取第一个元素的信息3 d" S7 v' U" s I3 i
/*
4 M, ]" U. T; C if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff). |5 n; Y' O5 f& U
{
& b3 n7 i0 V: Y2 R$ k Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
& ^; u, x) o% J5 M6 A5 E3 m g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);3 q! r1 n" K$ j* g7 y( y
}, T0 t' R: y8 v' ~
*/! _6 M) t k+ Z' ?
//////////////////////////////////////////////////////////////////////////0 b# M; S7 e7 L0 w
break;
9 ?+ k& y( ~# | }& H7 I- A7 Y% ~+ U* i* v
} 7 v4 E) P6 Q% j3 M
}
/ U5 l6 K: Y% z' Dm_wndMenu.SetVisible(FALSE);
( ^3 V9 n1 J6 M$ D& r: u9 z( [" F* D5 M5 x
--------------------------------------------------------------------------------------------------------; U. n5 x$ G- ]% R
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)! J- ]/ ]' m! K
{* u2 o5 ^+ d9 a8 B$ v5 K# V6 }) R
BaseMouseCursor(); X+ L3 V1 E: S; F* b
}! S2 U/ n! u( X7 N! P. ?
在其下添加:7 A# D/ J! s7 V: L, P, p! W
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
+ f+ d: {& Q( D4 {4 a0 X, m y! d{
. H% d9 V5 a$ Wm_wndMenu.DeleteAllMenu();
5 A) n: n9 N7 y$ {' am_wndMenu.CreateMenu(this);" F# P1 X7 w& t0 c1 E: }6 @
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
1 r4 Z) H0 u$ U0 @* y# `1 B! w2 Z
/ V$ V5 y6 M' k$ Bif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
, V) {5 w3 @0 B. d7 _{4 I( e! w( I! R* m
//P以上级别才可以删除所有道具
5 Q% o- }# w5 n# D m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");/ R1 F+ U0 n6 B! }0 [7 X9 S5 Q d
}
& U" @/ _3 u5 P7 o5 d* Vm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
4 L# E1 R0 _# }$ q3 e: T2 |m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );+ A5 a( u5 d* i
m_wndMenu.SetFocus();3 z+ x8 p# D" I6 H* r$ f5 ]- u" v
}8 E" I& [6 E! w$ |, J, S7 B
------------------------------------------------------------------------------------------------------------, [( c, t5 I1 v( P
*************************+ Y4 R0 u- T4 V, M+ {8 S2 o
WndField.h文件
# f) R. [: A/ ^# R) r+ d' x*************************' r$ O G: A) v) u9 \
搜索:BOOL m_bReport;
" o* ]$ {! y% Z) y h其后添加:" n8 E( o. c( V( A* u% ?5 c
CWndMenu m_wndMenu;
& y5 t/ @# `' Q/ ~# r0 V搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
) ?, m4 ? |+ I4 N其后添加:/ m+ s/ ^; T" a1 L# j
virtual void OnRButtonUp(UINT nFlags, CPoint point);" W* A' P& p6 }
( C P; `4 \. M7 r* p7 U7 O! g
2 A$ ^) G7 {" O9 E
|
|