|
|
源文件中_Interface文件夹下WndField.cpp文件& S" B% G9 `% J" V( x8 @) p, E
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
! A+ S0 A6 w }! v, l: T' A* @' x+ g3 j( c4 b
struct sItem
+ K+ R$ Y+ f' `; ^2 c4 u{
8 x( T' k0 O9 m; W% P; [5 sDWORD dwId;
Y6 C( ^' W- @: \2 _' EDWORD dwKind2;
# O; J, M2 j( V. C1 o; z: XDWORD dwItemId;
* W0 B% E. J* G; {: x, G; J1 nBYTE nIndex;
" p. ^7 l! J; k$ W& SsItem(){- V# p+ ]) | m1 E3 B4 I& z, m" {, o
dwId = dwKind2 = dwItemId = nIndex = 0;
, P! Q! ~+ g! y3 m/ I- I% I}* W1 L8 [: i; k) |! l4 e) p
bool operator < (const sItem p2)
9 Z0 ?. x @- ^{: _. `2 p+ }, z' U F/ y5 `
if (dwKind2 == p2.dwKind2)+ K0 C9 s* S7 x: D. M8 V" k$ O
{* ` n& U5 t5 W% e4 y2 Q1 q
return dwItemId < p2.dwItemId;
4 m( R2 l; O+ m7 E5 L }else{4 o2 L. [6 h9 \, \7 Z8 Q- y
return dwKind2 < p2.dwKind2;+ r# }) @8 c+ ^
}
/ J% s5 j5 J( d4 p0 F$ _}, }% \: W& d) R
};
6 v# m! _6 t# l5 w7 h9 mclass CInventorySort. I6 b- x& E2 h
{
; M, d! f1 C3 o# p6 [public:
3 n0 x& u2 K' w& O5 uCInventorySort()
3 T+ ?( W+ @) {4 ^4 p{
) c3 P/ M/ U* j4 ] m_dwPos = 0;
, l) l# ]2 i2 P7 D! @) y/ \}7 ~& X- z" Y2 Y# |+ C7 Q& l3 s8 d
~CInventorySort(){}
! J* n$ O+ ?' M6 f- q+ }$ qprivate:
0 C4 z; t# G7 a+ C; x$ ~+ S% XsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息) D# A: G" V, i. a1 E
DWORD m_dwPos;7 T4 \! ^" s# c9 U/ q. r v
public:4 w V- ^+ }& m
void Add(BYTE nIndex)
8 _6 s6 T/ l) A$ q{/ t3 H, y% k3 n% ?: P' m
if (m_dwPos >= MAX_INVENTORY)' s. k; Y3 L% b9 h* |. F3 z
{9 D( \+ f0 B+ F3 d P% ~/ D K" d
return;) q/ @* w9 W* h( T$ B2 W7 g
}
3 ?2 v; P' e8 W: {: x5 z m_Item[m_dwPos].nIndex = nIndex;3 ]; s9 e6 `4 Z3 C* @- X5 n3 [2 o
m_Item[m_dwPos].dwId = m_dwPos;
; M. D% X/ r" s2 W5 i$ H m_dwPos++;) j6 I v. v8 e" `2 F% c
}6 v4 g' q: e$ @8 i
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列( e+ g# {& Y' l1 b7 j2 t3 G( p
{ k* t. l4 b8 S# f
for (int i=0;i<MAX_INVENTORY;i++)1 G* j4 Y' X. y" v9 U. n8 m
{( N' X6 l9 _8 e S
if (m_Item.dwId == dwId)
) M! q9 y/ s0 Q8 G6 P& C9 p {3 W5 r. r& Z/ t# U/ X
return m_Item.nIndex;/ T9 E; t1 R# r3 q) Q4 f5 t
}
: B H ]9 P7 A0 L& y1 T }
% [8 [% N% U, Y5 W8 |( P. S return 255;
* E9 A9 c+ _2 s) C2 a0 t8 S}! e' a: R5 Y6 T9 s) W
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置/ n# f% a: N! _. P3 h
{& x. E2 `' e5 @5 ]" n8 S6 M
BYTE nTmp = 0;0 v- s# U6 ]2 U+ M6 ~! ~- M9 J
bool bDest = false,bSrc = false;* i6 v, o+ o. U! [# r0 \
for (int i=0;i<MAX_INVENTORY;i++). o" B, H" L( f3 \. e: m3 H
{
8 E& \/ ?) k1 x; o' s if (dwSrcId == m_Item.dwId)5 m0 C$ z, `4 Y, ]
{1 t% @9 |3 [! A- @$ a
//id相等 则 改变对应的dest和src5 E9 V& ~2 E, x) N
nTmp = m_Item.nIndex;
9 N4 P$ M# @. M+ q m_Item.nIndex = dest;
* x6 ?; t- M6 W5 |( r1 G+ g. R }) @, w8 [0 `( L' u6 ~* _
}" A( X h. Z! M# a+ T8 X; t( V
//临时数据保存完毕,交换开始; x) F' O2 Z" M
for (int i=0;i<MAX_INVENTORY;i++); ? }6 o% u& V$ u4 a( Z' z, v
{ t W2 H+ F* D2 }8 a; ^" E3 F9 ]! Y7 y
if (dest == m_Item.nIndex)
' s. k9 C1 D7 x {5 r9 Y% `% ~, H8 N0 t! r
//id相等 则 改变对应的dest和src* n1 ]- E) Z( [; y
m_Item.nIndex = nTmp;
5 y1 E0 z! j1 R; `$ S- v8 n/ _* B } @4 F) ` }6 _
}0 _- M( h% N5 { P! r+ H
}
+ C% s% O j( X- L3 Q0 Q/ z3 e};
1 b6 g7 {6 g; y- L" I. o-------------------------------------------------------------------------7 {/ h2 L j+ {0 p
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
+ u/ w" @; t0 W) j8 t搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase); W/ H7 z6 p1 M' P. ?
紧靠其上添加:
% S0 K4 ~3 W6 X1 }if( pWndBase == &m_wndMenu )) s9 k K* R7 l9 F( C
{
& e1 C) X" ?. k9 U' Q$ B switch( nID )
% Q5 ~2 r, _, O {
) I; A9 W1 m, a* G case 2:
2 A9 L H- Z5 f( u0 c: W {
1 F: n! T) g- U7 D+ U5 X3 G% W% B \ //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);5 x0 a, [( G! ^- \
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))' }0 X- _1 s0 }! A ]
{
9 ]+ S4 h8 p7 G2 U8 F* w break;: J) R. j/ Z' [, Z' z7 H
}
) } X" @! ]$ E: ]0 y, t for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
) f/ C* T1 W" h D! S {6 p( a. j+ A$ `. K! m
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);5 H- {8 g6 U' ^
if( !pItemElem )! u& M! H0 K- @* f& k; o0 G4 G
continue;% T, @ s0 z$ V/ r* i
if(pItemElem->GetExtra() > 0): ^: U& m7 Q d: `( p6 F2 |# G$ s
continue;
( ~; N& U/ }% I. x. _4 ` if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
5 A. W, f0 u B1 u0 _& u continue;
8 q* A% v7 f; o: a) X8 i; [2 T; F; M( ^4 d if( g_pPlayer->IsUsing( pItemElem ) )
4 y: n. A" \: ^+ M, S* z continue;
6 a9 f" x/ I* K: F if( pItemElem->IsUndestructable() == TRUE )4 |3 R6 `: a ?* H" B! C: ^
{" @3 p3 W h, V( `2 F
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );+ ]6 {7 ?/ }0 P; [3 i: a8 I
continue; i8 l% R; m$ f- D; i8 i
}
" g: N. I# x( O; h, h1 U g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);1 i8 Q$ p4 X$ B L5 H- v$ Z# X
}
& K, Y5 }: l5 w+ ^9 y4 [; z: N break;) y; q' Y7 {; ~0 G3 r6 T
}
: D0 x& l$ U) ^1 n; w# l% x) T, D6 } case 1:4 H: D2 N+ H* S- a# `/ @
{: f; ?& M; _0 L' M( a
//整理背包
! _1 S" C/ m) K( r5 T //////////////////////////////////////////////////////////////////////////
% w, ?( {7 Z5 w# n4 M //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
* q" d% P# B0 F2 G1 x7 N1 ? //////////////////////////////////////////////////////////////////////////
1 a i: u9 P* `/ l3 K; D7 X8 a( A0 l /////////////////////////////////////////////////////////////////////////// u1 u' J1 g' m- {- L, B y
CInventorySort* pInvSort = new CInventorySort;
* X1 d1 b4 K( a$ ^" A vector <sItem> vItem;
8 g- r4 Y& Y1 O: m! G7 h vItem.resize(MAX_INVENTORY);//初始化大小
5 K! }: ~* ?7 l/ |% | //////////////////////////////////////////////////////////////////////////
, Q6 R5 {6 `3 |9 S: u" E6 @ //填充数据
1 Y0 M( M* N9 D- a) B9 c for (int i=0;i<MAX_INVENTORY;i++)) I. `' F" X7 r
{
. w. ]' N u3 Z# W9 o* P2 N CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
6 J0 z" z8 a8 L" i+ I7 _ if (!pItemElem)
# |( q {) I9 [" d8 M/ T2 F& q- N {
( K+ P1 k+ p; a0 m vItem.dwKind2 = 0xffffffff;6 Y; D. Y) y; x9 q
vItem.dwItemId = 0xffffffff;8 q% B2 W6 M) @! S
vItem.nIndex = i;4 D- L, s! U7 `) @: N7 x
}else {
' z/ E- ` f3 [6 ?# t3 H/ N ItemProp* pProp = pItemElem->GetProp();& Q- W8 W7 P) y# W9 J
vItem.dwKind2 = pProp->dwItemKind2;7 {. g- D% C" @6 T; t, z. b T
vItem.dwItemId = pItemElem->m_dwItemId;$ P5 c$ F6 }# z, i* K) G2 W
vItem.nIndex = i;. b/ O$ \$ H, a# J- H: Y
}! c- @; f) z. T& Q% s9 g
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);$ `5 Z. B; W }
}6 Q. w9 M9 u. L! e. R8 ~
//////////////////////////////////////////////////////////////////////////4 j+ I/ Z4 r; m' N' S! O* K1 }1 X
sort(vItem.begin(),vItem.end());//排序7 {3 \, [6 F) _
//////////////////////////////////////////////////////////////////////////
3 f3 G! V# E" s //交换& [% M# B/ V4 q2 b0 H; K
for (size_t i=0;i<vItem.size();i++)3 O, R5 |9 A* W$ p( p' p Z+ ?% X
{
9 k/ j' y4 G7 d& K! L% \* |9 i. U //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);7 z5 i9 c4 L, ~* L
pInvSort->Add(vItem.nIndex);
3 @- a" F( S* a4 Q1 ?1 p }& k' b( W- P4 l+ N$ D
BYTE nDestPos = 0;8 a: N7 M' ]. R/ h7 m) S3 ^& F
for (int i=0;i<MAX_INVENTORY;i++)
/ [# s7 n3 u, s# f$ m {
* C* r7 v+ ]$ P+ B CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);( D" F; s, g" ^& w3 }3 m
if (pItemElem)) j: `* A1 t2 X' r
{
0 v* n& M: A. h* O; E. e* M if (IsUsingItem(pItemElem))
3 k+ h# V3 u. Z" {3 n6 J {4 e: s& T+ ?' e* e& I
//这个位置无法放
3 `# L& n. y9 r( r% \; I' d' n nDestPos++;! _: o! r' P7 s. c" i
}
; b! C7 Z& v0 }4 P) p }* [' Z5 i/ x+ d) S
BYTE nSrc = pInvSort->GetItemSrc(i);# S6 g7 v5 u/ |2 B
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);8 _) z6 d7 Y& u6 z
if (pItemElem)6 e% L" }- \- P$ r; ]: \" U
{) |6 l0 M# a2 c0 x& k" R
if (IsUsingItem(pItemElem))0 Q; p @8 H- I6 H
{" s& T$ V d3 Z3 e( \* Q( Y! e
//这个道具无法移动,跳过
4 g$ ^) u* y8 s1 K* T3 @5 L) {3 j continue;
/ i5 V) t0 O! i5 E }7 K/ h, f! z/ s; E5 v; |
}else{
" b& T' O* Y1 w4 X3 ^2 G //空位置 不用动' `: \/ l- v: f/ B) A
continue;, o: Y4 j' ~7 d' B) `
}
E; v1 D$ l" D //////////////////////////////////////////////////////////////////////////
; n$ K. _5 J! f5 N //开始移动
) a: z, ?# x% o2 p% P if (nSrc == nDestPos)
1 {, m( u& g& e3 }; D {: Y+ F/ @; Q$ \- R* O0 H
//原地不动
1 @# f6 i4 p# J nDestPos++;
, v! Y9 d3 {% e7 R2 I continue;
' w2 T/ R) h+ G1 f8 P% h, n }
& u& b( B E6 x! e3 D* x6 g, f pInvSort->MoveItem(i,nDestPos);4 N: ^2 S* l% k) `; h
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
6 i7 `" a J. z0 H Sleep(5);6 L' Z" j3 j0 `
//Error("移动 - %d->%d",nSrc,nDestPos);
8 y5 E2 ^3 A; g4 e% ] nDestPos++;
! `! k( T! N) C( {; R- d$ V! ? }- K* N9 r0 W* ]/ Z
//取第一个元素的信息
. T) ?' p, b/ j! H /*
& k4 ?3 c7 |6 j+ R9 X+ u5 \, ? if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)& d% Z/ M+ g* F1 h
{% j0 x8 u) U0 F3 V3 w, Y& T1 |; [
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);% N3 c/ _, ?) h' |0 q" z+ {. t
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);- {- A' l( P8 |/ r3 U
}# G, H3 `9 M2 k- G) q
*/$ o3 \/ f T- k# N0 ?# a, p; c7 J
//////////////////////////////////////////////////////////////////////////
/ J9 k2 [# a* L: B q' c6 D+ X5 U @ break;
! M2 D5 w$ I' I) }8 d/ h- E/ f- `8 B }
! q6 J% z& p, |3 c }
* k' i% U" o4 v, i' s0 } t1 v* Y}# |8 u" A) x @- S+ C* i- l" j' i
m_wndMenu.SetVisible(FALSE);/ j: W, d2 `. g) x
f4 g: V; c$ f% O6 ~4 t/ I( G4 _1 J--------------------------------------------------------------------------------------------------------
- z0 Q+ @" u- K/ d! P* {" E; w搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
' g d- m e6 @- `9 X{6 w* a; U! j! t# u
BaseMouseCursor();- H& f( @: }2 K9 }& F- j% I
}
/ C, I. U- F4 V' Q* \$ u5 i5 m在其下添加:
: z3 `, k, X P! S# R! U' k+ ~void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
_5 W1 n/ P( s) m! z' [$ s; N! n{
{; @ L8 k' |8 ~9 Jm_wndMenu.DeleteAllMenu();
7 x% k. c7 y( F2 J5 J/ N" g' c( Fm_wndMenu.CreateMenu(this);
+ H {3 h0 O7 k$ vm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");# C$ u4 `2 m) Y( y8 U8 G# r
2 @, J, |4 n! Nif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
: p5 F" ^- v3 F3 g6 F% T2 h, [. |{
^: s3 X! q& a: U //P以上级别才可以删除所有道具0 h, Q' s0 ^1 j+ s) \3 z
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");7 ^5 z- {. l& |6 t3 u) e
}
K- D8 ?- \ \; j! Gm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
2 `: C! O3 N# K" Im_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );, f; R, i! ~% L$ G5 |. I7 p
m_wndMenu.SetFocus();
5 w, i4 }0 r5 {2 p1 R+ u& M( Q1 f}
! G( x0 H. g O m1 Y( G------------------------------------------------------------------------------------------------------------! q: t r7 S6 a+ e! m3 V
*************************6 l3 @# R: a4 ?' p6 v2 ^/ ?
WndField.h文件) C$ f3 f) _/ Z: b* g
*************************
$ S& ?) p N3 W9 x搜索:BOOL m_bReport;2 r/ l* U. k7 N7 A( h
其后添加:
1 T9 o) m. L- C1 xCWndMenu m_wndMenu;
6 O! r* f6 Y: l搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
& ~: p9 R) a$ M3 a0 @+ e6 \3 t" n其后添加:( `; I' m) Z' u: ]6 l* m* p
virtual void OnRButtonUp(UINT nFlags, CPoint point);% \( M/ O! Z% \+ z+ E& i' k. l
, T1 `6 e v" w V$ O+ R/ p9 L
6 u, e5 f- n# p F5 m$ o4 [* [ |
|