|
|
源文件中_Interface文件夹下WndField.cpp文件( [5 p" u0 P3 S; t
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ), I& Z n2 r, }; I) B9 D
' g) q/ c5 r% }8 w d9 s5 z/ n) m: I; Bstruct sItem2 x0 Y5 \7 E; R5 C6 a
{
/ W" [5 e# u- \4 z0 eDWORD dwId;( p+ P% [0 M; R# e/ d' A; |
DWORD dwKind2;
7 B( @4 L2 [2 f9 _DWORD dwItemId;7 h" x( q' n5 B. I. i) {
BYTE nIndex;; a! A- v* |) H3 x2 ^1 n
sItem(){ k8 h" y+ x1 Y* K% D
dwId = dwKind2 = dwItemId = nIndex = 0;: x$ U7 l0 V, Y
}# @; t/ A" V- c2 k
bool operator < (const sItem p2)! x* V" u& m! n( Y7 g& c# P
{8 }" h& i3 m7 |& B7 R$ T- }& R& l" g
if (dwKind2 == p2.dwKind2)
1 w8 H$ b3 q/ P {
, c1 ]- V& G/ ~& y& F0 O/ P/ Y return dwItemId < p2.dwItemId;
# y7 o+ E6 `, c9 o+ _* I3 {; T }else{
5 M% G$ l1 F0 q1 R5 X return dwKind2 < p2.dwKind2;' q' t6 }' m/ G9 ?" |
}
, ~/ m3 z B# l$ e) W}
, T S( x5 } k, R7 h};
8 V' e( W; j) C( y0 z9 A8 s8 sclass CInventorySort
- l9 {1 j. _+ f, Z1 U" E5 r4 p& d{8 X# X5 H7 e) _. h+ k, n
public:( }9 {2 l& F/ v* E' i% S
CInventorySort()9 C. B [$ D; E0 u e
{
9 N5 t ~0 V& V6 S) g' i. D m_dwPos = 0;, Z6 D* K$ M9 D* T
}
8 Y8 n5 P+ [* E* d. K! A' A7 l% `~CInventorySort(){}7 X4 Z; h, v2 x
private:( h# x2 x+ `- n. ^+ \5 [/ p
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
% ]; v. u$ }1 z2 |! O0 h2 O$ Z( q. tDWORD m_dwPos;) J# L: s) X( O8 x/ g
public:
( G/ ?; e5 D, {void Add(BYTE nIndex)5 G4 G3 z8 x7 j; s+ a: D
{9 q# Q+ V6 z8 t J& S
if (m_dwPos >= MAX_INVENTORY)
" |7 y5 ?) e8 }* f: L2 D7 D4 x, U {
9 ~: i4 y& z, [! U5 o3 @ _% a; t2 ^ return;
! B2 l& Y' a6 _4 |4 o# |4 i1 F }2 j$ W- L( d4 r8 |4 L& X, q" l" z
m_Item[m_dwPos].nIndex = nIndex;
. o e# \5 d; K( ^! O7 [ m_Item[m_dwPos].dwId = m_dwPos;
F1 a+ [9 n/ } m_dwPos++;
' u% C1 t* O) m, x5 i. d}, x h1 F5 `. U& G
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
q1 g+ u- T' l$ {2 Q8 U{$ u. _6 ~6 g) Z
for (int i=0;i<MAX_INVENTORY;i++)% q8 g* ]5 @) p5 U4 B1 v. i
{
* \+ \, _+ E- D& c9 g if (m_Item.dwId == dwId)
% h- q, I# }6 H; V {3 C* s' c$ \' I" N# n( e5 d' [4 @
return m_Item.nIndex;5 s/ I* U2 c0 k6 W1 w
}
9 F5 ?1 ^# i5 O5 z* A& f }
7 c5 G# a. @# B return 255;2 j/ T" D/ @2 ^
}1 _$ n- a+ C& Z$ h
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置2 X# p& F7 X! o' |' W5 X1 z) u
{
0 ~9 R- c1 Q! }. _ BYTE nTmp = 0;
/ c$ [7 J( E( Q+ u bool bDest = false,bSrc = false;
$ b0 T' p, | u; j$ P# a for (int i=0;i<MAX_INVENTORY;i++)& ~! m! i0 t' p; D- Q
{
4 g7 n6 `. J3 s+ j! S: P) V- E if (dwSrcId == m_Item.dwId)0 b, a, J0 S' I* O8 U
{# k, {: \5 h" J7 e j4 j5 i/ k
//id相等 则 改变对应的dest和src- ]+ W# ~0 P1 x5 B
nTmp = m_Item.nIndex;
- X/ x+ O2 E6 w# o7 B3 r m_Item.nIndex = dest;4 T* v8 a7 T4 Y. J3 i
}
. @7 J! e* o+ w }& k* f0 u8 E* e+ t' @) t4 {
//临时数据保存完毕,交换开始. C' P5 ]! o; B, k
for (int i=0;i<MAX_INVENTORY;i++)
! C/ o5 j k6 |0 G8 N, O7 `7 ] {" `# H9 C7 m1 S& q
if (dest == m_Item.nIndex)
7 s* d }! s% K% b8 G: w! [ {
" U, Z+ m& w z4 O9 c) {* r0 u o //id相等 则 改变对应的dest和src3 u, Y8 c% K' ? B7 L# y _
m_Item.nIndex = nTmp;3 t! K# \1 Q( p0 ~: t' T. \7 W
}
( `% ]/ Z4 D( x1 f+ c. o3 l' z }0 E: |2 g- f/ |
}+ Y$ ?" O* Z/ Y
};6 C0 o: T, }2 C6 h- K8 r7 a4 r F" a
-------------------------------------------------------------------------
. z( T L) c; y8 j依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ): ]; `. R9 m. }: D
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);6 E' P% f/ G" ~8 E" s+ _. g, K# d n
紧靠其上添加:
# O/ E7 S1 }8 g/ eif( pWndBase == &m_wndMenu )* ]% S* k; P8 {; T. V, n0 W
{
Q4 N* @% D0 O7 k9 I8 e switch( nID ). j7 Y6 P" r7 T ? F
{
0 m, ]4 ~4 P$ ]% \) }! E case 2:5 L6 e0 z" t# s e! @
{: O" O! O- Z6 q6 ~' j* x
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
: J9 I0 g% i. _0 g; V! x if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
/ B! R, \5 G3 C: ~ {+ e. k" {2 I/ [! m2 q
break;
. |- z5 ?1 j7 N# j2 x }& j$ Q& }! G+ q
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
8 Q, O {% _# i; d7 u: Q {
9 O( I1 Z8 L3 o) _# A9 m }* [8 }( ]7 L CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
6 `8 w; o2 x7 u# }% `4 ?& Q if( !pItemElem )
/ l6 A& I& c- x0 L, e) p+ L( \, | continue;1 @9 ~7 O7 l) X0 p! W( a
if(pItemElem->GetExtra() > 0). D0 x3 k3 Q& q( ^$ l
continue;. j5 C4 }0 x1 O' l8 E/ |
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ' K# y& O% F; Q
continue;
/ V4 n4 f' B* q% ?# E5 w, C if( g_pPlayer->IsUsing( pItemElem ) )( W% {' x! D. [- J+ N. k
continue; g* H. H( c2 W8 {; Z8 q% s4 F
if( pItemElem->IsUndestructable() == TRUE )6 Q" J& ]0 A& L4 G3 h0 H. y
{' Q0 |! a7 A3 h
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
. G: K3 W& ]& t& q9 ^$ R continue;: o, A) g4 A' y( T* H2 K3 v
}
4 u( t; P# f9 i/ l6 z& H6 u, a5 e g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);0 n8 I# u1 C+ N6 R0 o
} M* o# u1 H' p& [$ a' C
break;. [) v! n+ K& @" d$ K" _8 B
}9 Y7 z# c9 [9 k& q, {$ n3 u
case 1:; Q7 b" ~! w. u: m- y! i. X/ @
{
+ ]4 n+ d4 v& g f8 k9 L //整理背包
& z9 {3 {' o! u% ] //////////////////////////////////////////////////////////////////////////5 K# l$ }0 ~3 v+ R$ L8 j
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
2 i" w0 s+ Q( Q8 H. k& {, I7 ^0 x //////////////////////////////////////////////////////////////////////////
( C5 D, i% ^" r; A //////////////////////////////////////////////////////////////////////////. F3 S. I. r5 \7 f4 s/ ]
CInventorySort* pInvSort = new CInventorySort;2 |; E) j+ G' h( E9 t" t
vector <sItem> vItem;
& C/ d2 r* n* f# { vItem.resize(MAX_INVENTORY);//初始化大小; o0 f/ @" h- P. k- @( B V; @0 Q
//////////////////////////////////////////////////////////////////////////
1 T( F2 `$ Q) ]' X8 \; F, t& q4 V //填充数据
5 J. R+ |7 C8 O: f. u for (int i=0;i<MAX_INVENTORY;i++)/ o" A8 M; r8 R% u. J
{
% ?6 H |9 b& \ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);6 i3 F! ^4 G; W- Z; Q* U
if (!pItemElem)
$ `/ \" R5 f8 a0 [ {7 u6 F; @ x4 Y( P$ ^
vItem.dwKind2 = 0xffffffff;
3 T3 A2 q0 a7 A" Y0 v$ g4 g vItem.dwItemId = 0xffffffff;
2 f6 h: e% R* i vItem.nIndex = i;3 V4 {( \) W. I, Z3 |
}else {
/ U* l0 ] H4 C ItemProp* pProp = pItemElem->GetProp();
" _) N! V. |& d K' J vItem.dwKind2 = pProp->dwItemKind2;3 {5 F2 p$ R3 F4 N% R/ k0 `: E
vItem.dwItemId = pItemElem->m_dwItemId;% G; L( u, A0 I, O3 C
vItem.nIndex = i;
1 S# f' m1 ]4 v, N9 ?1 @ }
+ r' a( ~4 C ]& N0 H3 I* E //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
" i9 X% E: p5 ?' { L }
) Y. \6 f" W5 u0 l0 w Q7 _3 n //////////////////////////////////////////////////////////////////////////- h. u/ v% h9 i9 W. ]
sort(vItem.begin(),vItem.end());//排序
1 J0 J x5 A F9 p0 Z ////////////////////////////////////////////////////////////////////////// k1 U1 \4 B' d
//交换
* ?+ L2 \' K+ Z: v for (size_t i=0;i<vItem.size();i++)" v/ B9 V; ^7 A+ U. x
{
' y9 q( X- Z) G+ s3 L j //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
- q0 q$ l, _% N. E pInvSort->Add(vItem.nIndex);; P/ ?. ?* r+ ~# w; F9 B/ T, ^
}/ {8 R E. S- Y2 x6 D+ p
BYTE nDestPos = 0;" L, b# q9 D) p# |3 R
for (int i=0;i<MAX_INVENTORY;i++)0 J, @$ a3 T3 Z- B6 S! }, i
{
* p/ Z+ }% `, ~7 U0 ? CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);2 v2 N/ J0 Q7 t5 b) X
if (pItemElem)
8 I' l* S# s# ^( | {
& T% D1 B0 U, ~. }0 d' J) _ if (IsUsingItem(pItemElem))
9 m# f; F/ i) J {
; D* r4 |* m( x: L" p //这个位置无法放8 H: x# N3 l1 \8 p& E
nDestPos++;
: |7 G6 l" g, {* L0 c }1 b( t! o" J$ A; [4 D
}
2 f/ k5 i2 H3 L8 A% R3 \ BYTE nSrc = pInvSort->GetItemSrc(i);* C( {% G7 \: J6 u
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
" D9 M z) u- S3 ?. h if (pItemElem)
) |8 ~3 x% I; W# ]1 I$ x {
7 C* G3 V# x, T. y if (IsUsingItem(pItemElem))
1 W3 k+ P7 g* ? G% P' s; U {
. M7 m& W% R% G //这个道具无法移动,跳过# l: b- P# J u/ O0 q8 [
continue;
& f0 o$ Q2 \, s; g) J4 Q }
1 _) T* T; e& A6 } }else{
1 K6 S( c) h. @1 }* U7 d4 u. \ //空位置 不用动2 S, R7 }* K) P
continue;
8 `2 g: l# d. [& c4 [$ ^! z }
( o T, h% C" [' l5 ], c //////////////////////////////////////////////////////////////////////////: k5 s$ J! [, V
//开始移动! w" T/ Y, d& ]3 M: ^+ ~/ B
if (nSrc == nDestPos)# A) j: A4 a( n5 H$ C7 Y1 |0 W) V
{
" o+ P' N) H( e4 k' s //原地不动 O& h* b, q! p2 v/ h7 [& o
nDestPos++;
: P' j* o5 a. x1 }5 O# S9 b continue;
3 Q+ t& k4 e; O7 a3 k5 e1 q }
& S* d* W' E# l9 h pInvSort->MoveItem(i,nDestPos);
( |# J9 a" Q3 z) E g_DPlay.SendMoveItem(0,nSrc,nDestPos);
- v4 P7 r* p$ G3 R. }, _8 U7 X Sleep(5);1 v L2 g/ G; a/ J6 h
//Error("移动 - %d->%d",nSrc,nDestPos);, r: O* W2 U; y
nDestPos++;
% l2 j' E- L2 D; N% _3 L }- B* T$ w; q% T6 {9 h( h) c K2 B
//取第一个元素的信息
. i7 [- h5 t5 @ /*
2 g. R2 L" i! s ? if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
* ~- W; ], u. c: d% M {% v. R4 e0 w. g
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
" W0 i5 T% I6 b$ S& \/ u g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
7 x0 j7 M2 \$ v9 T0 p# b* l }) O% l& y' s+ R: k1 ]
*/
+ S; p% X K B //////////////////////////////////////////////////////////////////////////7 P* [ [" e& a1 Y: [: H% ?
break;
' z, D7 R8 }4 J- h" f& { }
. F( z; P% U& ~ } . m7 ]" x# d/ S# l8 n1 m! H! C
}) \4 \4 L- A$ F/ e
m_wndMenu.SetVisible(FALSE);; Y: ^* z2 [8 w
3 N, G4 S; m9 \, Z--------------------------------------------------------------------------------------------------------
2 [+ |, a* Z$ B9 c搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)/ k) E: V5 H% N: Z" v5 h; |
{# w9 G: m3 {. L0 H$ W
BaseMouseCursor();
! i( t* _# k& a# |7 b}3 i) d b5 z( x) |+ B
在其下添加:. G: W, z0 }6 T
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
# S' Z& c" U+ V/ y: ?; [{
" U% S8 B5 M" K# N: W) w0 dm_wndMenu.DeleteAllMenu();( @- X' `; h9 H" o( l) {7 k" m7 g- P
m_wndMenu.CreateMenu(this);
3 W4 H" m# g, E7 c: K* [& Sm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");2 U) C3 S- o. A5 ^* A
1 S* t- N( U4 O2 yif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))1 S: {# k( o0 l& m" O2 b
{
, `* L7 s5 v: z. _; U6 d8 E //P以上级别才可以删除所有道具
; \, Z7 D9 {. ?3 R# [% d. b m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear"); Z. Y" N* g3 o6 b
}& h' [! ?) `% Z5 I: X3 z! j# }) s
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );) Q% `0 @ ]- |( q: A, l, Z
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );% j1 Y; T# Q) Q! C4 O
m_wndMenu.SetFocus();) Q1 m/ I4 t) \
}
8 M ]: s- D& ^------------------------------------------------------------------------------------------------------------
$ p( q) c2 Z {5 @*************************: Z8 T5 V0 r7 m# T
WndField.h文件3 w/ I* O6 {" b' q
*************************$ B& z/ \+ [# C$ I4 R7 z
搜索:BOOL m_bReport;* m0 p7 v0 m2 W
其后添加:
: q4 E8 v. w( G: \CWndMenu m_wndMenu;
% }7 s, R/ g2 N: H0 z搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);# h7 [5 r* h5 P7 Z: ~# n/ ?
其后添加:
) m* f7 z4 e* x! Mvirtual void OnRButtonUp(UINT nFlags, CPoint point);
0 E( g$ N, ^+ X$ W! w' h! B
" V( p! K' M' u$ o, H: O: [# n; r4 ^ u
& l! |1 y3 ]* H( b+ v$ P8 f |
|