|
|
源文件中_Interface文件夹下WndField.cpp文件3 l# f% s9 u$ `; N8 B
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
- {7 r/ O& \0 e' Q4 l) e4 H9 J9 w3 s$ h# s6 K) {! C1 n2 }
struct sItem
' I1 x; E t0 G5 O' H `: E" [4 s{
~3 q% m+ v- O9 cDWORD dwId;" L0 u" o+ {, q4 w; `- T( t/ V
DWORD dwKind2;9 n' t9 w. x( W
DWORD dwItemId;
, C8 ~6 C; w! T4 sBYTE nIndex;
8 g0 G. u; A. OsItem(){: L. n" }5 e6 t9 p2 E8 A' k5 y
dwId = dwKind2 = dwItemId = nIndex = 0; n F, |& y, s9 V7 O& s4 Z
}8 X3 \( D: y! K/ p& }
bool operator < (const sItem p2)
' {( [& R- ?, [8 o7 f! R' {( `8 O{
- K5 g% i+ m4 ~& C( C6 N if (dwKind2 == p2.dwKind2)& ]# A0 G! |3 d( g( M. G B" Z' {
{: a }9 W& V9 d( d6 G) I
return dwItemId < p2.dwItemId;
: F3 f9 m$ m( k( `' g5 W }else{
+ {, R# E, T6 K1 X) m return dwKind2 < p2.dwKind2;
& m8 ^$ ?, T' n; H }1 U! ^. a7 j( Y8 f; ~: Z5 Q( p
}4 b: K; e: t0 H) Z* D
};
1 |0 ?5 `7 }3 dclass CInventorySort
9 z5 _' X7 W3 L8 e0 v' S{( S: J' W, M5 D4 F) q
public:
: h" B# O. E- B( m* @" b/ VCInventorySort()
, t# X. f- j4 z4 f{4 A8 k9 A' G# x2 A
m_dwPos = 0;( q- Z( t% _7 k5 U7 s/ w; w
}1 u$ e2 X( D2 Q Q7 J- h. D' j
~CInventorySort(){}4 E$ _8 s4 e- o0 V" `1 ~6 x+ y, X( a
private:% @1 A7 ~" S5 x7 c/ \
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
8 c+ X2 j N9 k. I! ~# [* l% `DWORD m_dwPos;
9 \. e( Q1 @" X) |/ Qpublic:5 ~+ U6 Q0 P, U- ]9 Z
void Add(BYTE nIndex)" G# C+ y8 \. ? j- `% M
{
; u% p1 \' k, ` O' ~$ R if (m_dwPos >= MAX_INVENTORY)* H2 H+ [& m- E+ i+ C# E! u
{* p. O& q% i4 |
return;
& C. Q: c! K4 B1 U" r' z6 m; q+ u }
/ o# b* `, N! s2 J$ l m_Item[m_dwPos].nIndex = nIndex;
' E8 t2 u* o- C8 w) v! \+ @ m_Item[m_dwPos].dwId = m_dwPos;: U* v+ d% ?9 F6 I4 \" k
m_dwPos++;
o" R, B$ k/ E2 B9 l. _, @}
; m6 F) Z+ K$ Z; E$ }, B6 SBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
+ u9 b0 I2 K' s$ [( m3 W/ \{$ ?; j5 Y( r1 m1 H7 S
for (int i=0;i<MAX_INVENTORY;i++)
3 A) Y2 \/ E; C5 f# A% R0 | {
) u4 D3 K! {. F; E3 B- n* J if (m_Item.dwId == dwId)
; _" d0 B8 x5 i* N% J {7 v+ M9 c4 z- f$ H8 d1 u2 _
return m_Item.nIndex;3 Z' P6 q- C# w
}
% t7 F- q4 t4 X1 N! r) \$ b }5 ?4 z4 q7 B. s. D! _( w4 L
return 255;
4 R5 D1 j% |- a6 {. n' r* D}
' D! R0 k7 Z$ I/ L' s! wvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
* P1 q; B/ ?9 Z5 a. E7 e8 A{
9 g( ]& [2 k, }2 L BYTE nTmp = 0;
1 i1 P# k1 @4 [5 @* R# P2 g9 S bool bDest = false,bSrc = false;
. F, S1 l4 y6 a0 j7 h2 f2 J for (int i=0;i<MAX_INVENTORY;i++); E ^! y3 _# B* E& C+ K
{# e, y) W* H; I
if (dwSrcId == m_Item.dwId)
! ?6 a3 @. @5 A1 n6 [ {7 } o$ B" U# f. B/ Q- d- @
//id相等 则 改变对应的dest和src0 Q3 {& r. T2 L' e, G7 ?- X+ h
nTmp = m_Item.nIndex;5 ~3 ~5 G* `( P% v* R4 t: M0 z0 P* `
m_Item.nIndex = dest;
9 x0 v- ]: s" ~8 X3 i }
' X; w! i0 h" Z! {9 _ }1 f- z; \8 o- s! T, \9 |8 a+ u
//临时数据保存完毕,交换开始
' D7 r. W! d! x7 t0 a for (int i=0;i<MAX_INVENTORY;i++)
' y3 F% |: @* Z5 Q! v5 [% V7 k {2 D9 Z9 M4 [) O# X x
if (dest == m_Item.nIndex)
6 T: ?3 ~) N. Q- j% A" } {
' y( Z* a5 L* p3 t3 y //id相等 则 改变对应的dest和src7 O: ?$ t1 p2 c
m_Item.nIndex = nTmp;6 ^8 P6 e! e6 n4 h' {
}
% S+ l3 I& |, I0 `! ? }! r2 P. Q* H c7 L) l, f6 z; Q. ?
}
- @5 N. a$ R* X$ |" Z0 J: k};
0 w$ q( V" |+ z0 [2 [) h6 l1 [% ~-------------------------------------------------------------------------
_) @2 ~4 V, C依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
- ` `# H2 s7 P& R5 o! w; h% V搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
( f, F7 ^9 f' A. H9 ^- q/ u2 X3 D紧靠其上添加:: N5 `. Q; a: L1 T9 i
if( pWndBase == &m_wndMenu )
2 z, B, |8 K: L W6 B5 T0 O{
, r7 S% B3 ]- @0 d switch( nID )
, ?* d2 {. d p% e6 V {
5 G& |2 J/ R. ^- `& o) V) B case 2:
+ R, U# d( R3 i {) [8 l. ^$ T& c r! c9 D& B7 L6 H
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);" A0 a8 h k: c/ h
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
: V1 L4 s. B% U4 ]3 J# G0 K' X% Y/ } {5 X. T5 c9 \3 V* n' y3 k6 Q
break;
" M6 N' M, @) A( R }
, u( |9 f _4 F% ~# \ for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++) k, E6 p& O% m
{- M) Q) A. Y; F6 }$ ^6 D
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);$ f( F6 t2 X# U; u
if( !pItemElem )
* e$ u+ |( v3 u# H* t& R0 N continue;
0 }+ [% `# A, ~7 P% @ if(pItemElem->GetExtra() > 0)
9 s0 l2 [; r: X$ U" ~ continue;
) \0 ` S; u H; a if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 6 }% O+ [( g2 t; v1 J
continue;
( o! v- K2 ~3 n$ s6 U* s+ ~ if( g_pPlayer->IsUsing( pItemElem ) )0 h1 Y8 C7 U* m: `% y
continue;
" o2 ` N& i _* c: ^6 O" H& i if( pItemElem->IsUndestructable() == TRUE )
( K) m- o9 O! [. W' Y. d! o4 z( d B1 M {# i2 U6 |6 b7 X" u
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );1 x, L+ R5 L! q6 a- K
continue;& k. T( ^: m0 E
}
2 i w5 o# k7 e V3 A g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);* y' L j: ]. K& x0 b0 y
}7 x, o: j0 B [8 O6 J, G& I: [
break;7 i# k$ q9 @1 S, `( d
}
$ W- X B" G, w( n& e case 1:
! }/ z K: f0 B9 g) T {
# T8 m! L9 O+ }* V //整理背包
& R' |. x+ h, u3 j //////////////////////////////////////////////////////////////////////////5 t2 C# w( J: e- ^4 O" U
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );$ w& l" M n5 ?8 L/ G
//////////////////////////////////////////////////////////////////////////9 K/ ]2 ], s$ Q: `$ ~
//////////////////////////////////////////////////////////////////////////- g' p$ V v/ ^6 C( r \9 a
CInventorySort* pInvSort = new CInventorySort;5 N4 ]4 n1 g, F' L. ?
vector <sItem> vItem;
( L8 S* c7 H! _$ x4 ~1 p) n vItem.resize(MAX_INVENTORY);//初始化大小
1 k- i' P) x% l) X% z. \* o //////////////////////////////////////////////////////////////////////////, d- a; c$ ~0 q, R
//填充数据
& K- p3 l' s2 _" r for (int i=0;i<MAX_INVENTORY;i++)
* u: |$ d" o$ p8 S2 o {
6 D" _! a N+ p( W% K0 F3 d2 z CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
* K+ h/ V& ?; ` e, N1 ^ if (!pItemElem)
; O- d3 F" S. c9 j v {
1 R; r: H8 @4 u) T) u vItem.dwKind2 = 0xffffffff;6 c" D4 P* W- _6 b: p! P; Z+ X
vItem.dwItemId = 0xffffffff;
3 w' E) }; J8 ]" | vItem.nIndex = i;
- c" U& W( d b% ] }else {) p/ N: Z/ y5 x/ N/ Q
ItemProp* pProp = pItemElem->GetProp();8 o. j& a3 u6 j5 _" z9 t
vItem.dwKind2 = pProp->dwItemKind2;* A# Y3 E, e6 h9 ] H v" `
vItem.dwItemId = pItemElem->m_dwItemId;
6 u5 l" q3 ^1 l3 i vItem.nIndex = i;
$ R& N( Q) s8 C }$ J5 z( A3 @7 h
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);7 e: Q+ L/ c7 F' x- u' ~9 o
}3 W( {0 G! u$ e5 V
//////////////////////////////////////////////////////////////////////////2 E- i6 v$ J+ y# @- `% }
sort(vItem.begin(),vItem.end());//排序
) u3 P* X5 \3 h8 g6 Z8 W( `- z( ? //////////////////////////////////////////////////////////////////////////
/ Z! ?& Y2 X( L7 V4 t //交换
6 M+ D1 a$ i( \ for (size_t i=0;i<vItem.size();i++)
% e% y' G4 T( } I6 U0 f {
2 \+ ]7 D/ E" b( o, F //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);6 D' T% }; C6 S- i( I7 I" s+ E
pInvSort->Add(vItem.nIndex);, @8 K8 F6 z( v( J, y. v& v9 z
}
3 g* D. e; g4 S6 p/ O BYTE nDestPos = 0;' C1 C$ s `8 R1 V* P) T
for (int i=0;i<MAX_INVENTORY;i++)
+ C/ E0 f2 p u6 G( K) N( q {
2 l$ ]- h8 ~+ m/ X CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
$ a% ]5 i9 r$ c& G& R" L' z if (pItemElem)
' W$ ~' l! k7 v {7 s! L" J( \0 L! A$ M) y
if (IsUsingItem(pItemElem)); m, \9 S5 V* u7 X
{. n) u7 S# C) x; I W! t/ R
//这个位置无法放
2 r6 Q, W3 W7 O: J0 R; r4 y5 d2 @ nDestPos++;0 P( Q+ s" P ?, r
}
/ F& ^; B9 d' g { }. r( R* `6 C' K/ Y, c! l- s2 k2 `
BYTE nSrc = pInvSort->GetItemSrc(i);
0 Y. i' m' v- f, Q* F+ [: | pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
1 M7 M% M3 E$ l3 `& t+ P! M& w# n if (pItemElem)5 m5 t( g8 I# b" v# o5 d$ F
{: R- g! L2 j$ T9 T) r4 W
if (IsUsingItem(pItemElem))/ [6 _: J( \. r. [
{/ W! A* V" j: x
//这个道具无法移动,跳过
4 ]- B* n5 G! l, x6 N continue;
. Y- {9 J. u- K! K: Y3 ]1 |# ]3 d; R. H }
' `4 [0 Q# Y6 v- N' t( j) A6 c$ q4 s }else{9 P. f d: T8 Y+ B2 U
//空位置 不用动
+ p+ g0 x# \8 l- M. V8 r9 P& Z continue;
) F! L5 s" S- k$ G( P7 c: O }( L4 W0 k6 B7 [( m4 i( o: s
//////////////////////////////////////////////////////////////////////////
1 Y% E) V) H4 p7 P# T/ ^& { {2 p //开始移动& }( u0 W" ` c5 Y# D7 B p
if (nSrc == nDestPos)
6 ]" M: W4 X* i {
( A$ X5 H m: N$ ?: y9 n //原地不动
* [- Q) \1 F: O nDestPos++;
! R6 h' @1 b, O. H3 C' L4 P continue;; o. `; C& {$ g2 ^5 R+ o
}$ C6 x6 V3 V. z8 [; n% C( u
pInvSort->MoveItem(i,nDestPos); \) q7 e0 T; ~% B$ P& [% D
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
* a7 m* A$ V9 K( f2 \ Sleep(5);
: `6 {3 i9 x6 }% M& d) ~ //Error("移动 - %d->%d",nSrc,nDestPos);
) A2 i, }( S' w* K) V9 Q' D# T, G nDestPos++;
& l. ], ?9 W+ n1 l }
) I- w4 p4 s0 \. e' \; z% Z/ \! p+ W //取第一个元素的信息$ x* h9 H& G: c* ]
/*7 \ _6 N- o; o$ T1 r4 q
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)5 z( H8 y' @) g" F" |" r
{
" \* i2 d0 S! ~- v" Y3 U: m Error("Move - From:%d,To:%d",vItem[0].nIndex,x);1 O( T4 h2 f! i K' Y
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
0 d; W8 Q) w0 K* i+ y4 r4 Q' { }5 N" w: J- _5 c
*/
! O1 m3 u" M- @ m! h* q //////////////////////////////////////////////////////////////////////////
9 K$ @" W2 X* w& Q break;
3 [3 H' t( \; T* I; M }4 q: [6 \0 N" Y9 _. _! P0 y
}
3 d# ]5 e6 Q2 g1 B}
. Q6 l4 v! ?1 um_wndMenu.SetVisible(FALSE);2 [# g% {8 t \: S P2 |; E
8 ?7 P1 P! `: I; o0 }& E3 U--------------------------------------------------------------------------------------------------------
: O; H) Z/ h; D, h0 a y搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)7 M2 k3 X# D/ _: ^) A1 j0 n' A1 @
{, u: z/ N/ O: t+ {' I: q: F" m h
BaseMouseCursor();
9 D) O; v4 G* s3 p3 p" X( ?) o% F}
6 t( j, _$ u4 \, f3 D* I' c4 C在其下添加:
5 m+ Q7 [5 C; cvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
0 ?; w: t( M% I2 {$ U; A{
. r( {2 P& y1 `) P: e1 e j+ Cm_wndMenu.DeleteAllMenu(); ~ C% g5 W& R6 k9 e
m_wndMenu.CreateMenu(this);
5 T, Y( r5 b. [) v- Lm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");0 o) i' w5 E7 u. G7 G' `
; s% O+ T- E/ X# ]9 {
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)): v3 H1 [' k3 X/ B3 m* e
{ H7 h" H8 }! d
//P以上级别才可以删除所有道具' z# B, u) N$ k2 g
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
/ o- I4 S2 a+ P7 Q1 |! _. ]3 c, t9 F}9 k4 i" S0 Q0 I
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
* J4 z/ }! q5 U+ {5 s7 sm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );' Y! ~. R: O8 b$ ~' J
m_wndMenu.SetFocus();8 Y/ {* W; x/ v2 I
}
# i c7 G# q" Y------------------------------------------------------------------------------------------------------------6 g0 O; u2 e; f; |, ?5 R
*************************% v- N3 n d* O1 ?
WndField.h文件8 {: @! ?8 [- a
*************************
, e2 `6 ?" n( z/ Y2 q, K搜索:BOOL m_bReport;
; a! |! B" A5 v' [+ @8 _: ~其后添加:+ f1 g' y& W3 n* h
CWndMenu m_wndMenu;$ j9 I' `9 E: ^+ @0 Z" V8 m3 g' m
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
( f0 \" X: f: n0 \ n+ _/ T, N其后添加:
% Q6 Y) C) c6 q1 w! q, M+ Cvirtual void OnRButtonUp(UINT nFlags, CPoint point);
) r6 X0 p# ?( g( s$ r& w4 Y( F2 }# t4 J* q, H) @9 J, \
. t% k$ U+ [3 j& ~ |
|