|
|
源文件中_Interface文件夹下WndField.cpp文件; s* f, O3 R _2 O/ H! g5 p
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )7 n/ {" ]7 B& I9 H
0 t% L# J" X% H$ \9 m3 F6 astruct sItem
, n: i- J/ Q0 D4 k{: r! k& p# v' A
DWORD dwId;
9 x) m! j" ], S5 f# I6 nDWORD dwKind2;
# {. ?% u4 J/ ~) A6 PDWORD dwItemId;/ d# e7 `; W4 x/ v8 Z
BYTE nIndex;, f0 A* t. b1 r. W; P3 R; `
sItem(){
4 L7 J9 @8 Q( g9 ~* [ dwId = dwKind2 = dwItemId = nIndex = 0;- |; Q3 @* J4 G: O( j8 ^8 f2 }; S) j
}
' P; V* E* ]+ Q& d7 Rbool operator < (const sItem p2)2 @) B0 z* n: V) K' o
{0 E7 U$ @- E% w( E1 D3 C! c6 {
if (dwKind2 == p2.dwKind2)4 ]5 ` H: D* m. S6 O- \5 |, Y& E
{
* F. w* a" t. n; Q' f7 o3 h) o9 F: Q return dwItemId < p2.dwItemId;4 R" F( h3 |- o: Q$ A
}else{6 N5 m4 C8 a: J3 U) W9 ?4 r
return dwKind2 < p2.dwKind2;+ l; K. M( a$ j
}
% l1 |# O' z6 ^3 M1 }- J}7 r: ^" W6 I+ X2 X" q
};
& C+ f, r7 x3 R7 m1 }8 Z7 Q: uclass CInventorySort
! `( v ^4 j8 k1 {' O6 Q' D{
7 \4 d4 k7 W0 N! \public:
, A0 t5 x& x& W" @1 @8 _CInventorySort()4 s5 U3 M$ F2 J; B6 c7 J e
{4 H: c: N/ v5 e- `4 J
m_dwPos = 0;
8 D$ ~# x% H" y% y I}7 ~8 b% ]. Y+ l
~CInventorySort(){}
' Y3 N3 {; \3 x5 yprivate:
/ e8 w! z8 T( V3 @2 t3 x% v- YsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
) L7 J5 F0 t0 Q/ j! v. LDWORD m_dwPos;& h( y# x3 b1 l: o
public:0 l& X$ D; l( f. _) L% B
void Add(BYTE nIndex)& l, K: d! C; v: |8 a
{
R( I( T6 e, i if (m_dwPos >= MAX_INVENTORY)
% Q$ w( c' l9 O$ V. P$ i2 g8 o, F {- |$ u0 O5 l6 G6 n* @- P
return;
\: G4 m0 q/ X7 [ }% \* v' B! _: Z1 [
m_Item[m_dwPos].nIndex = nIndex;
4 M: B' u/ ~2 A5 _- F m_Item[m_dwPos].dwId = m_dwPos;/ U" b0 V2 P5 l) y
m_dwPos++;, M' r" F3 V% }" ~7 J- [$ e7 D3 n5 j
}
" B$ M, T1 K& @& v4 vBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列) ~' k3 V; L2 w5 H/ ~* a& P' Q
{
5 m; [# u8 V8 K for (int i=0;i<MAX_INVENTORY;i++), _: n4 a3 u( {6 ^: A* _/ J
{
7 Z2 s- C8 o, j, j5 b# Y/ t* p if (m_Item.dwId == dwId) ^/ R' z6 {' r
{+ t) L6 i2 ?# N2 J x
return m_Item.nIndex;- w/ [. J5 c4 n& Y, r( J8 T
}
& k& F9 v3 I/ M; L+ J% t& \ }( ^1 p) c9 e/ R0 _3 m, R
return 255;. S4 F2 `1 B* t
}" P' `/ r' ?5 X; T4 S- v
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置5 ?. R( t3 X3 q" f, M, O; @5 D$ u2 Q
{
, e3 Q- t9 ~; C- x0 K- W# y BYTE nTmp = 0;
4 o* d/ @) R% e! }; t bool bDest = false,bSrc = false;4 V7 ^" ]: ^2 _& J* z$ I4 o9 m- J
for (int i=0;i<MAX_INVENTORY;i++)
) Z7 k2 `8 H0 U! q/ `" [9 M {6 ]8 o2 e! r" D' Z) }
if (dwSrcId == m_Item.dwId)* k: l) t" d- p1 y; G5 O
{
7 V- B+ U! h8 [ y0 F( H; Y //id相等 则 改变对应的dest和src
0 R) c' c4 N# S _2 B nTmp = m_Item.nIndex;
3 p# x) |3 b( Q: x, N m_Item.nIndex = dest;
" A# B5 L) j* ~; u1 p ]" U5 _ }
8 y* P4 V2 [4 ?$ g+ h }$ p( l( t- ]' N; x
//临时数据保存完毕,交换开始; [) G; {3 f1 e" T3 Q' k
for (int i=0;i<MAX_INVENTORY;i++)
' D) P! Z+ R4 s W( b' L4 |3 {6 C {2 g+ D. W( R2 `6 W z. |/ G+ `4 B& d
if (dest == m_Item.nIndex)
: Y) d6 b6 _, _( W7 c {
6 b& `# [) O! P0 K- ^ //id相等 则 改变对应的dest和src3 ]; w' @* s! b! a, y# g8 B
m_Item.nIndex = nTmp;( S. Y% g7 W4 O* T$ F7 `
}
8 \7 X: V4 r, \( `5 I2 @4 Z }
' w1 A9 X5 p( d7 Y7 D c6 R}2 ~- n8 _' b6 }& x8 q9 r u
};: p) ~0 g: k7 _, x1 ?9 h
-------------------------------------------------------------------------4 _% U! I$ t) l3 t" q8 a
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )# T; E( c& h0 p3 x; W
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);7 i/ C" p7 [( a; {1 l' O5 i% e
紧靠其上添加:7 G h$ |8 U" J% p+ n: ?
if( pWndBase == &m_wndMenu )
& p) g& `7 ~( C{$ s2 U# D/ z7 i: Q) N; }- h
switch( nID )
- d% K3 L( J* c4 y F$ q$ \ {9 x, d+ Q( }. N v3 C4 I
case 2:, J _4 A8 c s$ f" I! i7 k
{
0 w1 b% I# R6 X+ w0 E8 C+ s$ r //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);# M( t( s( U9 s( l. p
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
' @" |6 j+ M3 a9 n; u' P8 V' V {; C# G' F1 q+ g! T0 e1 l
break;
* X# A1 d4 p6 J }4 L* |" }, ?$ ^) ^
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
( J& z6 ?1 V7 x/ e2 T2 }5 h# N {3 N! ]9 o3 q6 W# n( G$ T, u+ J9 L5 r
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);0 }# r: i( ^7 s! d5 z. n5 t2 y9 [
if( !pItemElem )
! U" @' T1 v+ g continue;- i8 d# Q9 |6 u) M) e
if(pItemElem->GetExtra() > 0)8 i# w' O5 O- s: M* P5 Z
continue;
9 T, k1 L* D5 Q& c Y if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) % p; r" B, n% i: C A* d' L; x
continue;: g, u4 w, s8 m/ W# D$ G: A
if( g_pPlayer->IsUsing( pItemElem ) )* m- b/ B; r5 H0 H% X
continue;
; Z& r1 p/ g5 |& t+ l, Q7 ]0 q if( pItemElem->IsUndestructable() == TRUE )- H. H) T+ [. C/ H7 \
{
) h7 K8 g0 _1 G: _" D, P5 \ g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );" ^8 ]6 L& G9 l% j/ N4 P$ [
continue;
! U/ Z6 H/ Z4 x! x: ] }
" R- L2 o+ |& ?5 @3 Q6 K% {/ p/ S' y g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
5 Q) l% g9 r! H' T7 e2 G }
( r2 j S v% x! j) m' C$ ^ break;
4 s5 p# k) l/ `) r! X+ R; a6 ] }
: p) `- L: n* v, f/ p case 1:+ K6 g$ {. m4 D" O% w
{1 C( Q+ a+ _: V, Y
//整理背包2 @0 }0 r2 u) b$ S0 {
//////////////////////////////////////////////////////////////////////////: _) a: _( m- r
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );8 H+ {0 v v; p3 a5 [5 F# J
//////////////////////////////////////////////////////////////////////////
( d. D" n( y' H" V //////////////////////////////////////////////////////////////////////////
H" d7 M I$ }4 d% z; u- @ e CInventorySort* pInvSort = new CInventorySort;
9 w L' Q* L$ p0 Q4 V5 u vector <sItem> vItem;
4 n5 {2 V4 X9 }$ W vItem.resize(MAX_INVENTORY);//初始化大小4 @$ @0 J: v3 k" S* D
//////////////////////////////////////////////////////////////////////////
% B" i# d0 B H //填充数据 h/ g C7 K$ x. k$ V
for (int i=0;i<MAX_INVENTORY;i++)
2 Z- g1 F3 y* [# c! f6 E/ u {
& @! S, |4 W$ z9 j" k7 g+ d. R' u CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
3 @+ v/ @) |8 `' H if (!pItemElem)
# c8 j' ?4 m! x. A% u/ N {6 V% @- d& h1 \4 n! r' q9 N" x' a
vItem.dwKind2 = 0xffffffff;
- V( g+ A+ ]4 r4 p. R2 k/ n vItem.dwItemId = 0xffffffff;/ [ G9 `* ^$ |; Q* H
vItem.nIndex = i;
6 T6 O0 ]$ S9 w Z5 n5 T4 r1 t" ]* M }else {
8 Y5 g5 G( I1 H! Q3 u' d1 [; _ ItemProp* pProp = pItemElem->GetProp();
0 O- L) a2 p& s; `9 R+ J) B vItem.dwKind2 = pProp->dwItemKind2;7 D7 H: x) X( X* P! j# s G! r3 z
vItem.dwItemId = pItemElem->m_dwItemId;
$ g0 U. }" p2 p% `( d vItem.nIndex = i;
) T0 ~& M H. a2 U- Q0 R- S) F& g, N. P }
& p2 F2 D! S. [ J5 t: M. z //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
% }- y! t/ D, C# D$ Z/ c0 j }
- M3 e0 l* z0 r! D }" Z //////////////////////////////////////////////////////////////////////////
4 w: R* E# t2 x! V# t5 N% d0 W sort(vItem.begin(),vItem.end());//排序
1 \% A1 i' U4 ]! A, } //////////////////////////////////////////////////////////////////////////8 _* M4 ]! ?; y, N! Y, o4 \
//交换
) v/ ?: s5 C: P5 z; D( T( x for (size_t i=0;i<vItem.size();i++)
; O' _2 ^! J0 N' M {. j4 Y& L, K) t; Z' m
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);% S: A( C! C' ~6 u+ u; L) a
pInvSort->Add(vItem.nIndex);0 w8 |. _$ N% I
}1 Z. q8 L) W4 _* \
BYTE nDestPos = 0;
! f$ Y/ D* Q, b) X+ ]. G for (int i=0;i<MAX_INVENTORY;i++)5 O! z( T2 w4 b! A, L1 ]1 f/ F' o
{# v; C& R- l6 B' ~
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);, p! i3 o! c4 s3 v, Q5 P2 B3 k
if (pItemElem)' L8 j7 _# L& g0 C' ~( l. c
{ a# w3 t" T6 s& t) L$ P
if (IsUsingItem(pItemElem)). A/ l" G# s- m2 K- }. G
{
" d$ E' I) v" A# ^* E3 E //这个位置无法放
. x( Z7 g& H0 e& w2 [$ b nDestPos++;: z3 e2 R+ W$ e$ \' u8 P
}
* W& b: R ~5 P% b l- W1 J' D A }% F, o7 \; f0 s
BYTE nSrc = pInvSort->GetItemSrc(i);3 |, o# d# B3 N7 r( {+ F+ w
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);" H+ [( ]5 Z( ^( t3 F x
if (pItemElem)( w& r5 \7 |0 b2 q7 k
{
, f. W C# R& y1 G2 q if (IsUsingItem(pItemElem))8 Z. _5 D7 O( N7 l
{' I+ w. ~1 w$ w1 g& b* O( @- Z2 M
//这个道具无法移动,跳过% e' s% r! d+ u) m1 V
continue;0 [& q9 ]( X0 h! J
}
( y4 ?& L; D) @* a4 F; B0 G }else{! e$ t) ? N+ l5 p W- n
//空位置 不用动& w% L, Z& t# i& l3 M& b. K% p
continue;8 e5 y1 X7 ~2 {. ^9 o' i
}
# d3 C& U1 Y5 C; t) n //////////////////////////////////////////////////////////////////////////' b3 B6 H/ R3 |' j0 t. D5 L0 T m
//开始移动
9 [% Y1 w# H" W) ` if (nSrc == nDestPos): G8 k B5 \6 d. o7 \+ P
{
( s7 \" H0 v m Q //原地不动( q, u- m5 e; Q6 B
nDestPos++;
/ b6 W+ s0 m J' S$ g* c& ] continue;
$ Z8 c- z( O9 K, C& k' a }3 M$ N) W1 D! `$ L8 V7 N9 H- Y
pInvSort->MoveItem(i,nDestPos);/ X9 N2 R6 R* u" j# R
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
3 p2 V# ]8 ^- G" A Sleep(5);
* ~0 C/ b, z/ e' t //Error("移动 - %d->%d",nSrc,nDestPos);+ S% J7 Y7 D l4 t
nDestPos++;
1 y6 U0 f" V* d. o }
1 U% c4 o" w {. |) | //取第一个元素的信息
( }+ V% D. [; |( Y9 a7 _ /*
: x/ B! k( V; R; C" G: C1 ~' U1 K$ G* O if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
$ b5 D1 m8 W4 {2 W- M7 w- h {
/ \+ E' f# m/ H: \6 r Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
5 Q" h8 B8 F4 J. D+ v2 |# B+ M g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);: e; ^- i6 u2 e1 s' L4 L. p2 v/ }+ a2 s
}
! _1 }- r. G$ M */$ Z& w( c1 }" s
//////////////////////////////////////////////////////////////////////////1 N B. ? J1 l4 V! m3 c; `
break;
6 }' O( {9 q) o3 w& H, G/ D }
( c1 v: |; }$ i) t } 6 A" Q5 |8 V9 a w9 f9 l' \
}
h) l5 Q/ ~1 L) lm_wndMenu.SetVisible(FALSE);2 R; a8 Z' p& I1 y& B/ C0 ~+ u
/ S* i/ c) h+ G: P7 p& W/ e v--------------------------------------------------------------------------------------------------------
+ \& @) [% ]4 E9 |搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)1 `: r. K* Y: S7 |
{( p# d6 y7 |1 f8 P/ T
BaseMouseCursor();
: }+ w; u- l5 p% G9 _}6 T3 ?& m' c! U; D& J ]
在其下添加:+ r* Y+ H' [) S4 A. w; g7 j, |5 _5 P
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)' R! w) N! A9 |* v) ~7 j* I
{% M; G4 f9 e* I3 M/ r( D, C2 [
m_wndMenu.DeleteAllMenu();, t- M% w& F& H, N" \+ o1 ^3 d
m_wndMenu.CreateMenu(this);5 V# I# E2 _0 b6 a' B! g% D
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
' L8 t5 |2 p0 u4 ^( r2 l* r) ^+ {% O
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))& a! X$ c. d& ~3 z& b, _4 U
{
$ V/ X1 s5 s7 R) Z6 Q //P以上级别才可以删除所有道具: U6 w! O+ v, c4 \
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
4 I8 Q7 k( o& `# h& a}
# ^) S$ J8 y% h$ ]8 Jm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );( u- y: n3 {$ \# `; |/ s
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );9 y; [3 P5 u d( u
m_wndMenu.SetFocus();6 O/ W) Q) L* q% P
}* ~! @- t: o9 E. @. f# Z9 u
------------------------------------------------------------------------------------------------------------
, b6 V3 T3 W9 E( J. A o2 p6 e*************************
/ l- J4 K, T9 B) g0 iWndField.h文件
, q6 T$ Z" j. [ p+ q$ e9 c! Y. d$ P************************** n, C9 r8 `! ^. G$ U. Q/ F) Z
搜索:BOOL m_bReport;. y, D" @+ o+ c
其后添加:
4 h% S) J! L- h( z- GCWndMenu m_wndMenu;9 A2 E7 c8 f( U
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
6 t% ^' k/ w8 F9 @7 M+ T) l其后添加:
I, q* @# H. z3 o8 e6 tvirtual void OnRButtonUp(UINT nFlags, CPoint point);. L" d6 M. _% H3 y
4 j" n1 ~$ }, A V, ^7 e0 [% C9 K& m6 @9 ?0 ~
|
|