|
|
源文件中_Interface文件夹下WndField.cpp文件5 Q- Z4 r8 n% ?" v# c4 q) Q3 p" B
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ); n6 `! q) _3 `: S. ?
5 h/ ]! b3 K" c6 P
struct sItem
3 Z. }0 y0 p/ M- @: J6 i$ b5 O. D{
5 a0 E- Y3 {$ ]8 q% iDWORD dwId;
1 y& y" |1 y& i1 {7 rDWORD dwKind2;. a* ]* s, M$ | r
DWORD dwItemId;4 u u$ Y) l `! u- |
BYTE nIndex;
& [$ w7 @9 M9 u) E- PsItem(){
0 ?# ^/ p- \0 C: C! |9 j! ^ dwId = dwKind2 = dwItemId = nIndex = 0;
6 g4 n% [$ E! ?' k! S; b}* G2 Q7 M$ P+ X$ K: { }
bool operator < (const sItem p2)- W# F3 j3 b, v/ a+ ~
{
7 G- X* `* K2 g% T* T; t if (dwKind2 == p2.dwKind2)
' M3 h- N" _7 J4 K {
% x+ T& X1 \. n return dwItemId < p2.dwItemId;9 V9 T4 G: |+ `
}else{) D. L( J+ B9 R2 H
return dwKind2 < p2.dwKind2;
# W8 d' N6 M7 d! h, j5 F }
' @. O. J3 H: v) F4 O}( L4 R# o6 |2 S1 ^( d
};
+ s: l2 b0 N6 k* g. C( E/ u* Oclass CInventorySort$ q3 l% x: {% Z5 Q
{
2 z! y' h* G3 Z8 V" C6 t( Xpublic:9 b5 l: E1 J+ A) t& Q5 A/ E
CInventorySort()
# o3 ^+ [9 T0 w2 G( O{* ~/ j4 g+ j* o: q- F
m_dwPos = 0;8 U" b" q' u: c1 D" \
}9 s2 l( h, u3 E, V0 I( m: X
~CInventorySort(){}
' c- h4 p/ J4 }private:
+ W1 P- z% B2 [! q" s, jsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息0 Y1 t7 _3 S: }3 h4 g; F
DWORD m_dwPos;
0 D1 b q9 U+ }1 R! P: C1 ]+ Z; ~0 B2 bpublic:+ j: r5 g* l# @7 h2 X, o
void Add(BYTE nIndex)* u% T6 ]3 v6 Y9 }
{
" r& I" j- ]7 T" c, n" u2 }4 ^' X if (m_dwPos >= MAX_INVENTORY)- f7 }7 X8 Z5 m; y7 S1 ]- t/ [4 S
{9 @, }" T% O) o
return;
/ x& f2 K/ O- P: X3 z! ~ }
6 m- b r3 }% j! H* S m_Item[m_dwPos].nIndex = nIndex;
i1 F+ O3 ]% r% L4 M) X8 ?& |( k& Z m_Item[m_dwPos].dwId = m_dwPos;, b) a9 w* L+ j8 _8 }% `
m_dwPos++;
) ^# @1 D' Y* F0 d3 ^" f, H}8 b$ V' L+ k* h7 F# L
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
% J2 I1 U( E" w" C4 O% I{
/ b7 k* q+ M; T) x. h& { for (int i=0;i<MAX_INVENTORY;i++)1 e, f* N( K5 _5 o. X7 ~5 g
{3 U1 Z0 [, w1 L' C7 q
if (m_Item.dwId == dwId)
. l8 j$ J, b7 J/ ^ {
0 O9 p. K7 W- J: P W. e return m_Item.nIndex;0 y/ ~% D! o0 u9 z( O; x; I
}
' q: s7 \# i1 E% X' Z' | }3 _; X+ i/ c% ]2 Z' v( s L
return 255;6 C$ E8 a$ T0 [- q. M1 \9 x
}
9 z$ W) p. B5 p; [void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
& S* i8 X7 q7 k{
/ {& e8 M( h! w n) ~9 r BYTE nTmp = 0;
5 v8 N }& X' X: Y- [, I4 m bool bDest = false,bSrc = false;
3 g: ^$ R8 K) ]- w- ~5 i/ Z% h for (int i=0;i<MAX_INVENTORY;i++)
' H! d! o6 \% Q! a& s: q3 \5 ~/ o {
u, W6 g" @, \3 C. P$ \4 n if (dwSrcId == m_Item.dwId)
( q% S! ], r, F$ {; v {" v) c# e2 }1 y+ G/ k
//id相等 则 改变对应的dest和src; D, S$ s) c/ _& I7 f0 N3 P
nTmp = m_Item.nIndex;, c' T- H4 n( g) O3 R4 H
m_Item.nIndex = dest;
- |# g: ^+ z) |3 ^ }
& P( h n) i. ~4 w* Z6 E }1 f. K+ x2 @. _
//临时数据保存完毕,交换开始
$ u. ]% M+ m/ z. S; K" K for (int i=0;i<MAX_INVENTORY;i++)
% V) {6 ^0 u2 U7 G# M {3 r* [0 }5 _0 u$ L1 V0 U
if (dest == m_Item.nIndex)& q! r. m/ @6 w: L/ b$ j9 a' n
{$ q, Z, \# U; J4 H+ E) m) t
//id相等 则 改变对应的dest和src
8 |; H, d8 N; r+ L8 `* B m_Item.nIndex = nTmp;" H8 K H; L; l: Y
}7 k# K. s* q0 ~1 q( E
}
+ r% ~# {7 x: @ L3 M" j}
2 T, |2 b9 O1 S; O};
3 V# F) }7 v7 k" R' z-------------------------------------------------------------------------, \) o# Z: @! t* r5 _" f
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
8 U; U- \9 i) z+ F搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
) M2 I, T! {) p- i. Y X紧靠其上添加:' Z2 Y4 e; G S4 l; N! ?
if( pWndBase == &m_wndMenu ), s6 p% _, T7 D% l
{% ^0 [, k: Z' r2 L
switch( nID )
, q) v" p- a6 ?. Q ` {
/ P% g% E1 X, e( N case 2: F/ a0 t* N: c
{
' M* A0 g5 \: s' C) l6 G //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);& f) u/ Y' i( s0 x, t& q
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
9 y/ t5 b) M5 U9 g) ~ {
5 X Z8 @+ r+ R( ?1 d; v% ] break;) Q. b6 P# Y1 R l
}
* r& R1 X: ^- |8 r+ ?" } for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++), J0 }6 ]7 `+ ]5 ~- U; s
{
( F$ F1 E+ s( h CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);6 M) E6 {/ _$ \6 K$ A4 b( n
if( !pItemElem )
6 t7 S5 P' m, J- \) w/ S continue;- |* n) S/ D* Z* y% u7 y
if(pItemElem->GetExtra() > 0)
/ ^* @1 y! V& ^' N continue;
& C) \8 o" f8 @$ R- s! F2 ~ if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ) Q+ ^5 v: t( m/ E* p
continue;
3 A+ x( p; D2 x+ A! I1 X if( g_pPlayer->IsUsing( pItemElem ) )4 w! ]5 o+ ?, r, ^8 i0 e; Y" E7 y
continue;
9 Z4 V' e* b# I! r0 |* L if( pItemElem->IsUndestructable() == TRUE )
+ d; j/ Q6 V: g: r$ h; g9 y9 h {
+ f: X' e! e1 A; d' N9 E# A g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
- M; n! G4 L- B+ {% ^/ d1 ]4 z* T continue;
" x* w* |6 v9 P( f( P {9 ^ }0 t: S6 ?5 z5 F. R; j. h3 S) C
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);6 Z B5 O- c6 v4 M# E" D. P
}
3 d% o2 J. V h, ^/ g1 O break;# U4 \, S0 }8 ?8 }- [9 ?4 G1 a
}
7 Z2 }/ K% Z* E; k- e case 1:- W i1 K! n( w
{! ~% ` K. C/ O0 F5 x
//整理背包
3 \; s6 `5 k( e5 n. \ //////////////////////////////////////////////////////////////////////////
, ^* x' B9 x$ T9 b8 V6 \) |1 j1 @ //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );4 W Q8 C- Y9 s5 t% C7 r# R
//////////////////////////////////////////////////////////////////////////; r: `$ Y+ e$ l0 z
//////////////////////////////////////////////////////////////////////////& E6 w( l8 x2 U( i- h. F
CInventorySort* pInvSort = new CInventorySort;
A |, A% s8 m0 I7 V! L p* [2 L vector <sItem> vItem;
% R, @. e9 _# X1 j vItem.resize(MAX_INVENTORY);//初始化大小
& G [! p7 R4 b. e$ n //////////////////////////////////////////////////////////////////////////% h$ J6 n/ I9 ^- ^
//填充数据 M& K* J% d9 o' n }
for (int i=0;i<MAX_INVENTORY;i++)$ a! U1 [6 w0 X) M( z. d- A1 Q
{( j6 i! Q1 Q3 ]+ n& m& ^+ g
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);* j9 w# A1 q' o& D2 ? P9 _0 S
if (!pItemElem)
t6 n' v5 o. [0 a6 h+ \ {! W, z5 g/ I6 J9 O- w) }
vItem.dwKind2 = 0xffffffff;
- d; F n# L& \ vItem.dwItemId = 0xffffffff;+ S; d" d# _" l; C0 L+ I1 x7 i
vItem.nIndex = i;
! q+ E7 t }+ { }else {) z! R3 t' r% o0 R( }- }8 _
ItemProp* pProp = pItemElem->GetProp();
$ C$ G. J/ ^) s% A$ t5 N& Q3 A9 Z vItem.dwKind2 = pProp->dwItemKind2;
* H: ?$ _; _" E3 s ?. G3 N- C vItem.dwItemId = pItemElem->m_dwItemId;: U. b0 O l+ T" ^+ _
vItem.nIndex = i;, c9 W) w& r2 Z! R% w
}
: {. b x3 z, o //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);1 r. {* C# x$ n
}! z" I" A- R; R6 K
//////////////////////////////////////////////////////////////////////////
9 N( ?) C! V' N& r+ r, V" z sort(vItem.begin(),vItem.end());//排序
6 D+ S4 x* z' B S% ` ////////////////////////////////////////////////////////////////////////// I0 w! n! ^9 M
//交换
& f# N. S' t( B* \9 } for (size_t i=0;i<vItem.size();i++)
2 A! }8 z# C$ X! x0 d0 J {' L0 P; ~8 l; z8 ?
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);! K, e" a$ i" f
pInvSort->Add(vItem.nIndex);* Q/ r; _/ v) I
} V" M4 Y1 n+ l/ z
BYTE nDestPos = 0;) E- j$ L( a3 B; t- [% c; _' b
for (int i=0;i<MAX_INVENTORY;i++)
' r- J. s% p# t" S+ c8 c {) l& i: M+ h" u3 ^4 N- d* Q
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
7 G q% n v- Q) |, w if (pItemElem)
% a7 b- m. m6 F/ i8 X {: {! V2 {5 D5 y2 z
if (IsUsingItem(pItemElem))/ f3 d$ i/ f- p+ E
{2 D. _ A+ P8 a
//这个位置无法放
8 `) k& ?1 {9 }) t( ^ nDestPos++;
6 W& _4 x3 l* C' K$ u1 p' ] } w" R h( Y* h8 E
}4 g3 h( R* |9 M* y% J
BYTE nSrc = pInvSort->GetItemSrc(i);3 d* q# q; X& y# ]4 y) Y
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);% K! c% D4 c& Q0 A: `* f" B
if (pItemElem)2 W9 g0 T/ E2 g/ I2 l( b# x
{
! X, y. D" a, M; v% }; H; U% H0 }; s8 e if (IsUsingItem(pItemElem))
: l9 b/ Y& z8 u {2 U. u1 x' z- d6 b4 G
//这个道具无法移动,跳过 y& F/ m# J* ?/ y$ W/ j+ l
continue;, \! t# \# M' ]4 [
}
9 H* @, \( _) H& A: A9 M }else{7 K$ q& x% |& x7 C- x
//空位置 不用动
$ G# b! I' E& _; T! R4 z: K' h0 i continue;) c" O% g" o9 M# Y( M
}
& S/ ~1 u2 X# a //////////////////////////////////////////////////////////////////////////+ X+ O2 `0 O! K6 ?$ p6 O, Y
//开始移动
+ {' n0 L6 x- o# V( b if (nSrc == nDestPos)% b) l8 M. H# ^. U7 _
{
9 z/ i$ J3 T% J! ^* @- } //原地不动
1 j' ]) M% f4 o/ L% B nDestPos++;
8 t0 {7 A& i# b, I continue;
3 Y6 O3 u" T6 C, u }8 G& c5 b, W% o& W+ Y
pInvSort->MoveItem(i,nDestPos);
+ O5 r; P* z, @# G4 W7 n1 F9 X g_DPlay.SendMoveItem(0,nSrc,nDestPos);: Y- M8 t5 w- ^* E
Sleep(5);
$ ^# D& |; Y2 J0 u //Error("移动 - %d->%d",nSrc,nDestPos);6 Z& ]% ^9 V3 k, x
nDestPos++;7 m0 F& l& M! M+ f9 p; J
}
2 x: j9 u2 }" h% p" D$ K: T E //取第一个元素的信息
8 F! Y! ~/ ^. k /*
/ d& h9 q% K p5 `- y if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)) u ]7 m* x( l, ?# \
{
* l/ T7 n* {, m0 f Error("Move - From:%d,To:%d",vItem[0].nIndex,x);# K! K0 m0 s/ G8 u
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);: r% E/ ^4 p# E# b4 Y8 f
}
( U' T- i! Q) w7 e: ^$ H */
4 t; I/ {6 }% e //////////////////////////////////////////////////////////////////////////
8 M$ y2 Q8 H4 e- @ break;
9 j. S& P- A/ M1 f# Q8 a% T- @ }3 N* G1 |, D, a6 E' m( T; X
} + c3 S8 J) [) w$ m" |
}
( K( \3 ]2 }+ ~1 Y) j$ }m_wndMenu.SetVisible(FALSE);
. Q1 f' D1 i8 q$ h) ~' m
, d6 G( s/ a8 a* F--------------------------------------------------------------------------------------------------------5 p1 Z/ D' H* A9 y: p# h5 f2 l
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)# B% |$ s/ ^! W! y# T. x5 S
{/ ~( `. Q1 ?* `: Y2 E& ^/ g
BaseMouseCursor();
1 U& w1 q2 N& s+ t, s1 V, x7 m2 d}
. ]1 A6 `- N o0 @& @在其下添加:
2 v0 Q) u: o: _void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
, [- w) ~3 V3 ]3 M+ S{
6 m8 X n% ~& B8 G; t+ Ym_wndMenu.DeleteAllMenu();# P# L4 k$ T; W3 h+ ~
m_wndMenu.CreateMenu(this);
& ]5 P* ^8 T; F4 Fm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");6 V" a7 y: J2 r& j' [+ A- b- @, F
1 z$ g. @9 H5 R. u+ }, S; Gif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
3 L$ L. f) N/ \! Y+ Z{' V1 f' l E/ O- ^ x3 D( N
//P以上级别才可以删除所有道具) r% {3 c+ K! M) z$ z$ R
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
: f [0 m) y# `- e4 ^/ `& F: V8 v}# k ~( o! Y; {6 V- `+ ~
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );, U# j% ^+ a7 _( e! o8 W- ^
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );2 u) n8 W- R4 V: z# ^/ v4 G! v
m_wndMenu.SetFocus();0 X ~! v; ^$ F5 v- w8 @1 T. H
}
9 D& ?6 h8 P ]' q; A7 r4 j; y1 Q, ~------------------------------------------------------------------------------------------------------------3 D7 P5 R% I5 d
*************************: l' O2 n; x- y" s8 ~* v
WndField.h文件& A+ v& k- e0 W# h. M
*************************
' O& T( n" r/ Q5 z, b搜索:BOOL m_bReport;
4 |! J$ l, l. {! v其后添加:
. t5 h }6 i1 jCWndMenu m_wndMenu;
4 x$ ]6 F: X: {9 U' P) o搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
- P2 y7 l+ R* h其后添加:
& P" v% i/ F4 Wvirtual void OnRButtonUp(UINT nFlags, CPoint point);
$ ?+ o8 b0 w3 L- V* ~8 F1 N5 r
( r8 H6 u! R( F( l e- i) N8 C* |7 ?; T1 ?
|
|