|
|
源文件中_Interface文件夹下WndField.cpp文件' W. v- `* n* J( V# s" H8 s
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
3 i/ n. t+ ~& U1 f& Z
- y$ i; P8 a+ H/ u0 p5 o& W4 T- Xstruct sItem
7 k9 R9 z) m2 i8 u, H; o" }{
% p# V% {- {: s% \DWORD dwId;
6 `, L. X# f$ G6 a- p- a5 {DWORD dwKind2;
9 @. o7 y8 |3 jDWORD dwItemId;
+ L: e2 c$ w4 x9 B4 UBYTE nIndex;
z8 J5 H$ S3 @sItem(){
+ ~+ O/ ~# W4 z dwId = dwKind2 = dwItemId = nIndex = 0;
+ ~: \( c) s- B; h4 y5 c0 M) ~+ v}
' t, P+ J) K" O1 Z- Obool operator < (const sItem p2)$ p c- D* H; v0 Z; [: c. f
{
2 b+ [* O, S2 v if (dwKind2 == p2.dwKind2)
6 n- y5 T2 A# o$ r {9 t' y" X- k" W* k& o3 Q9 ?. K
return dwItemId < p2.dwItemId;. O& `; f1 _3 z. v% L- g
}else{2 z% o/ ~. ~3 C0 i0 ^6 k$ e& h
return dwKind2 < p2.dwKind2;
! J) v* i ]5 P0 ~" M }# u4 |) ]% |/ w: r9 E7 n
}! h/ x) E2 F. B
};& ~7 b0 O+ A r! f
class CInventorySort
2 _% r4 N1 }! f( m- J{- Y0 C- F! ]! _5 T ^% J
public:
7 J. `8 O. d1 p6 cCInventorySort()5 X) \( D$ O: w: v
{
; F k+ j. V8 |" \ m_dwPos = 0;
5 \" v& @/ D! X2 D k2 [: l2 v}- I, ^/ S( E6 V& W
~CInventorySort(){}- q0 T* G+ z* H+ |% ?
private:
0 B6 `' ]1 }3 I) f0 G- q$ ysItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
; R3 t2 G* J, F2 x! R9 d0 eDWORD m_dwPos;
7 B/ p$ e# ^3 g. Fpublic:' X0 c5 n9 W: g- Q
void Add(BYTE nIndex)5 e! k" p9 m6 `- d Q" s7 r* U
{/ v# W9 `( @; c3 P
if (m_dwPos >= MAX_INVENTORY)
5 C) `5 G9 L c/ Y0 H x5 a! D+ Z& C; s {% O3 S: s! r/ x$ ]' \/ F
return;
; q' h) L, K Z) Z! d }
. Y4 L. t% P1 v* V# f7 h) G m_Item[m_dwPos].nIndex = nIndex;1 \" j' _, ?( A# s6 \+ }# y/ l
m_Item[m_dwPos].dwId = m_dwPos;
, b1 r9 I3 C' r0 M m_dwPos++; O, n/ k* ^" \( _9 l
}
1 x# `4 l2 R- ^+ Y+ y" i% zBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
# E. @6 O2 N4 U( l( D& L{; l! s/ ^% t; H0 | q6 Z$ F/ P
for (int i=0;i<MAX_INVENTORY;i++)
# U3 d9 w+ O9 Z% K! x& s% S+ f {( V) B- [5 z% a% p
if (m_Item.dwId == dwId)9 I+ i9 P" c# ~) @0 G
{* R1 m+ l0 a9 p; Y
return m_Item.nIndex;1 w" ?: l! W% G3 u/ Z3 P3 [
}
3 C) |3 S2 D; q2 c ~3 Y2 Y }
I: @. }7 v; b" C return 255;! H- f. }% U, u Y8 T% c
}6 P+ C7 i- d& l( v5 n- i, D; z7 Q3 |! ]
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置5 G- |2 Y; q& P. G4 F# I
{; |) j. {2 l8 V( a6 s. ~
BYTE nTmp = 0;. d) h' v0 b3 M4 ^. v" m" M9 d
bool bDest = false,bSrc = false;. u( c' _6 e" n4 Z1 Q
for (int i=0;i<MAX_INVENTORY;i++)
% s6 ~' l9 q0 M) ^ {$ J1 ^& _: a3 Q4 r% K
if (dwSrcId == m_Item.dwId)
: m' e; D' y- j, f4 T( @ {: t {, W- d7 E8 J7 n8 o2 [2 x
//id相等 则 改变对应的dest和src
) A8 H7 e" `9 I/ C/ v nTmp = m_Item.nIndex;8 o; |! r( g( V7 H5 V
m_Item.nIndex = dest;$ D0 |, Y1 k% \, P
}, K3 u( b2 I+ `/ z/ s; v( ~' d
}2 r1 ^7 K1 G) ], [9 K
//临时数据保存完毕,交换开始3 F D9 W) Y8 E1 z
for (int i=0;i<MAX_INVENTORY;i++)
7 h e3 v" i2 _; y. ]4 k {
5 k/ E( ^- y) f if (dest == m_Item.nIndex)+ @$ E$ P$ L1 p
{
9 U* p5 Z u0 l8 s //id相等 则 改变对应的dest和src: F% K) g" x1 l4 H0 G" {
m_Item.nIndex = nTmp;
* Y0 X5 y$ Z/ ~/ h$ F3 i }
- C- M; `7 O- X' c j& | }
- Z- P5 \$ Z' z* n}
# Q0 | }2 A* p" G4 v};) X" h- l/ l- {+ ^+ b6 I8 i* E! E
-------------------------------------------------------------------------+ |" G! @7 C' j8 M3 K* u3 I
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )7 x3 O3 h2 e1 ]
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
8 _& f0 E& D: q; z' E紧靠其上添加:! m8 u' r. |2 Z7 \' d8 j4 b
if( pWndBase == &m_wndMenu )
5 f; K1 l' L |{
( h6 @5 N* t D3 F5 Q! Q switch( nID )( R' o5 `4 U. g( E0 l$ N' l
{
- U, w- I6 G2 h' E0 X case 2:9 S" u: A! a y6 O
{
: f) ]/ A0 ]2 c! s6 ^6 c //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
5 A+ `$ U2 A H1 Q$ |- z if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))9 t+ m' U: V& O" X
{* h& a; E$ z( F! y( ~- I2 j
break;
2 ^9 g! h6 f# h } F2 H( L U( Z2 S! O8 U
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
. U: }! x2 t4 ^% i0 v- V8 Q: C [ {
" I1 G/ D' n# h CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);& x2 k# A( O! Y ?! l5 T6 m: k+ `
if( !pItemElem )4 N7 y( E! s& s! a$ i0 {
continue;! N' v, S/ R+ \$ c. u/ T* v/ ]
if(pItemElem->GetExtra() > 0)' A4 p; r8 S& f4 f! w! {1 K* B! C3 |
continue;
$ {4 C$ d1 s; l6 ^ if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 5 l5 g+ {2 q! ^ n* W
continue;
4 z9 r! z a% k/ i0 \3 J if( g_pPlayer->IsUsing( pItemElem ) )# h3 c' U. J( I8 S6 [: Y
continue;! p' W8 Q' d) O1 V7 X; A, [# @- f' d( {
if( pItemElem->IsUndestructable() == TRUE )
: l2 I, I9 _$ d5 l: {1 ]- A* F% u- ] {
9 M M2 a% ?& k( i5 L g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );7 R* t7 C; G/ R% d
continue;$ E- l0 J( ?" Z. f, i
}1 q- H, C1 Q! o0 L
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);9 Y5 a6 `5 ~" w5 F/ j
}% M, S' H) ~0 h& V: f
break;
) b. B; I0 k$ @# F; ]& } }) g% n) }* S: U; n7 ]3 @
case 1:5 t/ Y. {$ d: l! _" D
{( g- g. V& h- i- N8 `3 c" S4 [
//整理背包
* `, f' o- M$ D+ [: L //////////////////////////////////////////////////////////////////////////
' e, U' @( y- L" _- z //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );2 T# F @/ d0 o- n1 D
//////////////////////////////////////////////////////////////////////////; {: |9 u- t# V8 {& }
//////////////////////////////////////////////////////////////////////////, F8 |0 b6 `6 K- _9 {
CInventorySort* pInvSort = new CInventorySort;$ k7 F- O8 g8 @9 I+ j6 e
vector <sItem> vItem;
5 l G1 r4 x: A7 \ vItem.resize(MAX_INVENTORY);//初始化大小# s3 W/ ]+ X2 _$ z6 \4 l
//////////////////////////////////////////////////////////////////////////4 Z9 l: |4 K- v9 p! A6 J' F+ @# M
//填充数据5 Z6 z! d) q" Z) u) }8 y O
for (int i=0;i<MAX_INVENTORY;i++)' m m$ S6 ]' Q$ p( J# Z* [. U
{
9 M0 e5 z8 B) d* \0 a CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);9 `9 i" B6 T- W' }; K; }& r
if (!pItemElem)8 `" s, v5 T: q) h9 o
{
( I) P+ g: y. [# l6 o) z vItem.dwKind2 = 0xffffffff;. U% G' G3 E8 q% W; z+ V
vItem.dwItemId = 0xffffffff;
& d3 Y# o9 u% ]0 v; d+ w9 ` vItem.nIndex = i;+ f9 j% K+ H$ U9 w0 g6 A
}else {
/ C |8 ^/ X) u( H0 \0 ?# Y ItemProp* pProp = pItemElem->GetProp();$ ~, j, g& l3 F& q3 Q( j
vItem.dwKind2 = pProp->dwItemKind2;/ |: m9 ]2 \- P$ _6 C
vItem.dwItemId = pItemElem->m_dwItemId;$ _1 P1 x9 B V; j* y& z7 |- p9 b
vItem.nIndex = i;
5 W* G$ X/ b. d5 A5 p5 f# S/ p" B- J }6 T8 _/ ?5 k: {+ l6 z8 i8 [
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);. i' u" C) `& Z
}+ X7 G: S$ b3 {6 {% R" M0 }" Q* k3 o* k
//////////////////////////////////////////////////////////////////////////
! z# h& X3 W. E( N3 w, j: F7 b5 x sort(vItem.begin(),vItem.end());//排序% ~* }2 l9 Z1 l$ J3 x. H
//////////////////////////////////////////////////////////////////////////; |$ O. d, T& j# D7 [
//交换
% |9 K6 ^) ~! [ for (size_t i=0;i<vItem.size();i++)
& g* E* r# T# @, C {8 h- |2 R; E& P6 d' ^
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);% |7 v0 u1 r" P' L
pInvSort->Add(vItem.nIndex);5 v- n9 X& h9 m! ^0 \0 _2 I" T
} l% [" F r, l
BYTE nDestPos = 0;
8 X8 b* y# l2 M2 ?/ r for (int i=0;i<MAX_INVENTORY;i++), h! ^1 R+ \1 L6 q' q5 F* O( l
{
+ m4 _9 ^ h) f4 } CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);& F# E. B) Q* B0 c
if (pItemElem)
( n) g; n7 F9 g! ?" F: J {, D. }: k5 H" @$ R4 q9 R" W. X0 r
if (IsUsingItem(pItemElem))
! a- ~$ V, K" q" a+ x9 }/ u* | { f! `0 T- C: s% J# V0 w$ D
//这个位置无法放+ q9 ~0 `1 [* c
nDestPos++;6 u$ U+ b. W( j% I1 t5 K/ U! F
}( }1 Y# F; n: h
}
' B4 V" i! I( X4 k9 I( y! O BYTE nSrc = pInvSort->GetItemSrc(i);
& {6 {7 g+ `4 ^5 N7 d: c( k- J pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
9 \+ U. F6 W- ^3 `) C4 e if (pItemElem), z3 o4 @/ R. F7 o& r! P3 S
{
+ j' v4 J. V) M/ v$ `4 s% h3 Y if (IsUsingItem(pItemElem))% @: m7 R' M0 j/ f) @$ R
{" \0 E- i: W0 Y2 E% _
//这个道具无法移动,跳过
& t6 x& o7 N; {/ K continue;
' w' `3 A# I8 Y6 f- k% b }. |. m: [: y1 m3 s
}else{7 i" O/ R* n" u+ ?3 y/ H+ L
//空位置 不用动
$ P1 u/ b6 N- V v) l continue;' \! }, {, y4 P5 P/ Q
}
# F5 V; e* U7 S //////////////////////////////////////////////////////////////////////////, g" B* S4 W! @3 \9 Y( Q
//开始移动 R' X1 m, F1 O" p* o
if (nSrc == nDestPos)
/ U( G/ }0 F. T$ c {
0 D* `$ L2 j* g) p$ T- ~% u, A //原地不动" E2 z- V8 M E! E
nDestPos++;2 T* [) Z5 E% t* y% m; q* j" o4 ?8 e
continue;
4 j. H2 k+ Q7 I& Q9 l }& s& M8 u- q+ U' B- d/ J
pInvSort->MoveItem(i,nDestPos);8 G/ g) R' t) Q3 B. T h' [! t
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
3 P/ @% J9 u% D( R Sleep(5);
& c; d: E' h7 v5 o, v* t //Error("移动 - %d->%d",nSrc,nDestPos);
3 B' ]9 F; x r( [5 g; `: R nDestPos++;
% K0 ~3 { o1 H }
d: T7 T! i( a# b4 l# g# U/ P5 ~ //取第一个元素的信息
& |$ Z$ x; [ Y& y /* ^1 p0 [: T6 x% b( z1 T
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
[) ]) j7 z$ O+ s: }& F {
. r0 q7 f4 J: @: e. z Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
" M2 |$ v, _" N g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);0 _* Z* B+ D- j. m
}. s( v+ {2 w6 u) z# x2 K; m
*/( T4 I4 d/ L5 F% H# U( k @
//////////////////////////////////////////////////////////////////////////& c; j. T7 \# u
break;$ W/ c; O) J- o0 T
}% f) j2 F7 z* p( O m$ f$ b
} / O5 x/ n! d+ m& Y) y( T
}/ l0 ?5 m! N) ^8 Y& Q/ E* L
m_wndMenu.SetVisible(FALSE);4 O4 r: ~0 @: K3 @5 {" [( B
* K( U3 C, v# u7 C! z--------------------------------------------------------------------------------------------------------
6 m- a. O# z7 e+ \8 P: z搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point) W6 Y6 ~9 E/ m$ P# h" C, l
{5 g) t/ A: I4 o% }& X( }4 r
BaseMouseCursor();
* o+ r# D$ V9 S}4 A7 f! ^6 b: d
在其下添加:
3 d" F/ |8 A& A4 Z! C/ M* [void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)+ x- T4 D' ^2 O" {
{6 s3 c* T* d J( h) A6 L" T
m_wndMenu.DeleteAllMenu();
, @6 Z% j$ g& Y5 K) h7 O+ ~$ xm_wndMenu.CreateMenu(this);5 x4 l( J( \9 {2 q
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
! V8 A" {, t f* M9 r! @* G+ g! j/ j o; S7 V
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))3 Q) A+ g% B' t5 G+ \
{
: ]+ B' M0 s* u& }, D. J //P以上级别才可以删除所有道具
( d; S+ m# i4 ? m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");3 ^: v* l- Z0 k& a, [- j
}
. F* d$ k; Y/ P/ y3 _ p! `m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );" W V3 Z4 K* s! `6 S) _3 ~
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );: @/ ~2 ~7 b5 D J' N& \
m_wndMenu.SetFocus();
) i e3 W: Y t5 H3 ^/ a. {}/ J' V' ~: K' Y' E* @* ^
------------------------------------------------------------------------------------------------------------
1 g' S0 r; [5 g+ |0 V- }8 r*************************0 z) y( k# b7 p; y( y
WndField.h文件3 t' g6 `, e7 }
*************************/ t- N1 N' b; a4 R+ R. s9 x
搜索:BOOL m_bReport;0 v o: E+ c4 Z; @0 H1 n3 v9 @
其后添加:3 j/ P) Q% P3 h
CWndMenu m_wndMenu;
" }# \# N5 r- v8 q! y搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
% [0 X. T& O; C4 W$ l其后添加:3 U4 B$ w6 ^! c" H
virtual void OnRButtonUp(UINT nFlags, CPoint point);
2 E R$ A" z- r( B' B! Q5 V( h# Z9 Q4 z$ [( @' Z( J- Z: d
5 j% j# [* |/ j" z0 d4 F/ [ |
|