|
|
源文件中_Interface文件夹下WndField.cpp文件
6 j2 Y$ k( ~& l0 x. \搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )# B* [* W+ y( V7 U! u! E T
9 K9 ^% X" u. ^2 s; U' estruct sItem0 O$ v8 {0 [" X3 |! L; T, C
{
8 X# |7 t& K6 Y9 s. q% rDWORD dwId;
4 \( R& B' d0 y! _# nDWORD dwKind2;
) t; @6 d8 W2 F% r! eDWORD dwItemId;6 q( X% v. j3 I, m7 ]& B c
BYTE nIndex;+ v+ E3 i6 J# J1 k8 S o% [; X1 F
sItem(){" q7 ~" }0 G, q& w s) `5 p9 Q
dwId = dwKind2 = dwItemId = nIndex = 0;
* l0 m" d- c; I* }}, f, j1 F& \/ n4 i& n
bool operator < (const sItem p2)
! V8 d) \3 O5 ~' E{; p) |3 N3 G. b: ^ R8 Y5 x4 b5 P
if (dwKind2 == p2.dwKind2)0 [' j: M4 a1 W' a* B
{# W U* L% d2 r1 p, P. @! s' r
return dwItemId < p2.dwItemId;
( l O4 k6 K1 ^1 K }else{ @8 P' j, d" _( S' s3 d! C1 o6 @" o9 }: `
return dwKind2 < p2.dwKind2;
. q+ b) C2 l- m: a( @ }3 @9 S: U8 n- v% s+ J/ \1 u
}
* g, O2 O, g6 a) {- c};
+ s- q; _1 k6 S* j x. B- d3 U2 D9 o8 ~class CInventorySort
9 q- P+ A2 v6 u7 |{
+ C' M6 I2 i5 s4 e' V( ^0 bpublic:/ r6 _! v+ @9 f% e P7 a
CInventorySort()
" V: c0 Y8 D& u+ h C* P{' h; @& X, K- D0 A6 U. r
m_dwPos = 0;
. p8 v& H9 Y: @) |0 M: j}7 J/ @9 k& m! m* N
~CInventorySort(){}1 s$ e4 k9 R C. }+ v; S: ]) {
private: o, _% Y1 x( [0 [) o
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
% V8 L. M ^" j$ pDWORD m_dwPos;2 B5 V- m8 a1 s+ f4 b" s
public:4 s+ Z$ A) t x! F. B" m- N4 |
void Add(BYTE nIndex)
, O2 T L8 m& D$ W. u0 v+ x0 R{
1 H: y2 f }4 n if (m_dwPos >= MAX_INVENTORY)! ]! X# l+ R: K4 [% T
{' o0 l! M+ g- U1 A z4 H1 ^
return;
6 ^6 ^5 F3 @( _* m) f }
8 l) ]4 u i9 S# | m_Item[m_dwPos].nIndex = nIndex;
" l4 M$ N5 K2 S m_Item[m_dwPos].dwId = m_dwPos;+ R7 o) L& I- f" y0 v9 _% C
m_dwPos++;
@- c5 t) L! J# i6 V- i}4 b+ c- M- h6 A E/ F. W
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
, E$ [/ t# h0 O) i) G; h3 ^4 y6 c1 F# c1 h{
8 ]" e) Z+ R( w0 r; } for (int i=0;i<MAX_INVENTORY;i++)
{, r) X& D" W7 Z/ f! b3 Z. c {
0 ~3 @2 r& A1 o! n* _, t if (m_Item.dwId == dwId)) B7 B3 O8 X) E! q/ b
{& f+ b$ s" c3 [' B: r c. C" v \
return m_Item.nIndex;
. D( D7 E& ]0 Z; f$ Z" O }
9 R) W7 v$ E; ~& N+ n }& e3 f1 p5 J/ I; _
return 255;# z3 M* O/ U% m$ q% o; n3 x
}/ i# o- W6 u7 L% z* i9 ?
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
$ w. ]* P4 q& Z8 [+ r, z{6 ^+ e" C( R; |: l: k- x0 G
BYTE nTmp = 0;' T, F: f1 @$ _. k5 l6 ]
bool bDest = false,bSrc = false;
# ~' a" x6 _ F% P% L; e9 r for (int i=0;i<MAX_INVENTORY;i++)
0 _& J. C% H# y, L( b0 q4 V! k5 ] { E* J3 t0 ]! I7 ^
if (dwSrcId == m_Item.dwId)& I3 w# A m$ l8 m& H! P) p+ r
{& n4 G6 C1 W! d% @
//id相等 则 改变对应的dest和src+ R7 c2 w U, n/ E1 ~1 h
nTmp = m_Item.nIndex;
5 h& \$ t* |$ i/ G m_Item.nIndex = dest;6 k0 f: D1 y9 n [$ N+ J
}) X" o$ I1 G$ S/ f" I( F- [* y: p
}! U- h9 w- G# t$ B% j* g+ X
//临时数据保存完毕,交换开始& m% K5 F2 X' L+ j9 ]0 z# o2 m
for (int i=0;i<MAX_INVENTORY;i++)
4 \4 X6 R! e$ p% B" m9 \6 c l$ S {0 j, {- p% p6 S. \- d* r
if (dest == m_Item.nIndex)
7 t2 k6 I; S: O7 } {
2 M* o* E0 B; f9 @# Y) a7 [ //id相等 则 改变对应的dest和src
6 T" P1 ]1 W* y. a6 a m_Item.nIndex = nTmp;+ Q# `8 r0 V6 X8 P. t- w( A
}% r: G$ [& t& `- b
}
0 ^0 W! W6 e7 ?% [- Q6 e- _}
1 _. Q7 H' t& U% t( x. f# ?; b, |! J- W};
6 W9 u% C* W" k* t0 C-------------------------------------------------------------------------( G% n$ ]6 l" ?8 F9 a
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
5 S) q0 }" x! h# L6 A搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
& |5 D9 R% }# J7 i6 M紧靠其上添加:
$ o6 y, c/ w& L/ {if( pWndBase == &m_wndMenu )
% ^3 h1 I, k/ `- S6 P1 R& I2 `{
' n3 R( S* O' R: |9 Z9 X- c$ G switch( nID )# N( y; H G, q% u
{! A1 t' W; i, o# F3 Z+ t
case 2:$ x! D$ b$ o* f5 ]- K) g& B2 T: z
{
3 L" G: }; L: g( d+ m //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);. a7 P; n/ _: E( O- ]% {
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))+ U; e O, b; f: y
{
' ?; U" p0 h. N7 W6 I break;
- J+ l5 Q" ^0 `# a; H0 |1 h }
; z( j4 W' J( X9 ~+ r2 Z for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)* c* n) b: u/ r; i2 N
{
, M) J0 ^8 ]; A. p# z- A5 R2 ~ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
/ R1 }7 \/ v( M* S0 Q if( !pItemElem )
+ Q4 A0 v$ O u' ]8 Z' N continue;! X) t% C# ]2 c* k0 e6 H
if(pItemElem->GetExtra() > 0)
! @5 U( ]. Z, N' I* y1 W. o; C. f. q; q continue;1 N) P1 u) o: H% M7 m1 {
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
( z$ i: W$ p8 h W% @5 r continue;/ I( z G' ?+ `& B3 Z
if( g_pPlayer->IsUsing( pItemElem ) )* W6 N5 f- V2 K
continue; h- T$ ~( ~: g3 L
if( pItemElem->IsUndestructable() == TRUE )% a0 U9 k0 J& T, d+ O
{
: H4 _; z0 T% U6 F! r/ Y g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
% O# E; I3 j9 ~# w- a- u9 _ continue;9 W# P1 o+ g1 A; u' x# I: Y
}9 W; l6 |, P6 \- \0 A
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);1 s& h b: a( g, M$ x1 ?* ]) [
}' U4 S# @- L3 W( E# y
break;
3 u: z5 m2 M7 m7 A: [) o! P }& S0 ?7 u' u- X- f9 P
case 1: U4 J @ H9 }8 c9 v5 Y) r7 V5 V; ]
{% P% L( e& }+ i
//整理背包
+ _. |* v0 s; g1 ~ _# B //////////////////////////////////////////////////////////////////////////
* C3 b6 B g% r [. T5 j/ p0 N5 w //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );& H+ h& M1 x; `3 _
//////////////////////////////////////////////////////////////////////////& }% k" d- B( a2 Z
//////////////////////////////////////////////////////////////////////////
% M g0 ]: M k CInventorySort* pInvSort = new CInventorySort;
* x& _9 T! y/ R) T4 A vector <sItem> vItem;0 W! @7 V. L" N3 `
vItem.resize(MAX_INVENTORY);//初始化大小
3 `& |7 T, D7 n! |% \ //////////////////////////////////////////////////////////////////////////$ Q( Q& P2 N0 R* T/ _" b0 c
//填充数据
( o7 {+ l7 H' ?+ s8 Q! P for (int i=0;i<MAX_INVENTORY;i++)
* m9 {) E. S- R6 v- A) a {- y$ G! B9 H8 U* Y `1 B
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
- U; [& I w. {% }: R3 H. ^ if (!pItemElem)8 Q% r4 C' M: s3 l/ Y7 b* `* i. X& D
{
3 }4 \. h) k) | g5 Z+ r4 G vItem.dwKind2 = 0xffffffff;
6 N% F8 k* m1 s# ^4 F& Q! Q; g vItem.dwItemId = 0xffffffff;, R( k7 \7 @' A" P4 m) y
vItem.nIndex = i;4 L9 @+ T+ I! W# F7 U5 M t' }
}else {
: N+ B6 D+ U8 c a/ _( H ItemProp* pProp = pItemElem->GetProp();8 A' y3 y0 T/ Z* F2 d x
vItem.dwKind2 = pProp->dwItemKind2;
D5 X, I# ?! w# M6 A ] vItem.dwItemId = pItemElem->m_dwItemId;5 k6 j, N1 V% ^' R* t" [5 c
vItem.nIndex = i;3 z l4 ^6 D1 [
}- o* s5 x& a1 x4 Z& U) v
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
# R0 ?6 V; b; Z4 } }* B3 g. m$ L; V1 F
//////////////////////////////////////////////////////////////////////////
' T& `& P2 M$ V! C sort(vItem.begin(),vItem.end());//排序% j. G% j( K+ L3 J: L3 N. `
//////////////////////////////////////////////////////////////////////////+ k7 `3 {1 N! J+ U5 y3 [: a \
//交换3 \' \6 `% l$ R+ Y' }% X; c
for (size_t i=0;i<vItem.size();i++)
2 {) [: E+ J7 p) z8 w6 ` {# ]& W% j0 T: B8 c+ g! H; {" G( ]6 O
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);% e( _ \9 c, P P
pInvSort->Add(vItem.nIndex);+ i4 p* a1 m6 a9 x* }: C/ A4 o
}6 l# E; }7 O" N& m% b, b) n+ {
BYTE nDestPos = 0;
3 {. m" ]# ^- R- h7 N for (int i=0;i<MAX_INVENTORY;i++)
' b2 Z) M( J" I, e% f {& P4 n7 D- a6 t6 f- Z( [. B
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);/ |: C3 X- ?$ F/ S
if (pItemElem)2 o$ y1 M# h" z) |/ p* l
{
8 _( Y& [; ~" J" `2 n3 t1 C if (IsUsingItem(pItemElem)); g8 D# i: b+ R3 z* [
{4 h9 C, j, q7 a, }
//这个位置无法放
& _" T/ @# N0 e$ m. [$ N u& u u nDestPos++;
( z# Q, |* s* h1 L5 @3 |' _: W }
' s+ z% n8 R4 c& m# Y1 Y8 K }1 O$ q3 l/ y- G7 }
BYTE nSrc = pInvSort->GetItemSrc(i);1 s9 H& t( w; ]5 j/ E# O
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);1 l8 i ] y# W" ~0 X' F( I
if (pItemElem)
' s" }6 f7 N, C& ] k! W" i3 C {: R( m# z7 m& e' B" E [# ?
if (IsUsingItem(pItemElem))
. t: E1 k: g/ Y3 J; c( v) G {
$ S6 i: r, G+ o$ O //这个道具无法移动,跳过
]. I7 u9 y1 ]+ q continue;
) u& n; g& e1 e# ]3 K* {- | }6 R/ n# q. R! E! q9 A1 q& r: Y
}else{
/ ]/ U, X# J8 a# y //空位置 不用动9 E) G& _* u$ _" L) D
continue;2 Z! {, p% l9 y& Y2 q7 p
}
/ Q3 r& H" |* k$ y: e+ ?- W //////////////////////////////////////////////////////////////////////////
8 b, Y( `! Q) W A4 o //开始移动: _6 E/ W) Y5 L1 L3 {! L. w
if (nSrc == nDestPos)* [6 I7 i! p7 V: H; f+ t
{9 M8 v1 i- Z& ?8 J0 n4 h5 o5 y' c
//原地不动2 v, i$ x) G6 Z0 K0 i- e2 ?/ K& F$ M
nDestPos++;
0 v$ ^1 G w, v. V5 Z) S continue;
& ^. S4 n: j/ L }. s7 `% u; h. u8 ^
pInvSort->MoveItem(i,nDestPos);
) a' t) ]6 D% e7 [; J g_DPlay.SendMoveItem(0,nSrc,nDestPos);3 l4 \3 |- N) u: L/ ^
Sleep(5);5 k8 i4 Z+ I I7 j2 r
//Error("移动 - %d->%d",nSrc,nDestPos);% N* }) V( U2 k |- b
nDestPos++;
! L, a9 j$ y( A0 g: d; g" Q+ o: K }
( x6 u& _ Y- n& o& ` //取第一个元素的信息8 z( ?, ~1 z6 s: W
/*
9 \6 @/ B6 b! G0 G if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff); |: |, ?' i2 I6 |$ V4 v7 M3 R
{9 R4 `# h1 |/ P& p
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
- R W3 d4 h& K. j, c9 L; M e: V g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);# |' W, g# z ^+ X
}9 e) T% ~- U4 T6 u+ `% [
*/1 I/ R' [5 ]. E- u* z5 G
//////////////////////////////////////////////////////////////////////////+ J& [0 E! S# o, S. m
break;9 x6 F8 o6 O' B8 B
}
$ C" H2 |/ a9 }* X } 0 z8 N& P3 f* v, s0 v g- V
}
9 n, x/ N2 u3 ^% u1 Vm_wndMenu.SetVisible(FALSE); c1 [3 o, k% l9 T( ^% g
& u7 a) S; b, V4 A, P
--------------------------------------------------------------------------------------------------------
; \2 e. T5 ?( k4 ?8 [! k+ ~$ }搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
8 X) P2 _& U( X{
. w" ?/ ]( h- `0 w! K5 U+ M6 mBaseMouseCursor();6 H9 A1 ]* k( ^; m7 ]8 n
}
2 X2 U- C' q8 R* U( W在其下添加:- N7 p2 ^, L$ P# D; B7 o6 M
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
0 T' Y) ?1 ~. v% ~# U" D/ D4 @' k' v* K{
( {7 C. f! @" X- P! v' R* Zm_wndMenu.DeleteAllMenu();1 K5 |8 l: d8 E7 ~8 U9 C
m_wndMenu.CreateMenu(this);
6 f. u; B1 N3 [( Wm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");$ H/ s5 F$ _9 O. Y' [' i2 U
2 c! e! q7 {' C) Y, x/ ^& I1 gif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
2 @) u z6 P1 l* M! J! A{
' r% _- Y5 A/ \( ~ N) ]/ |" O //P以上级别才可以删除所有道具7 P( \& [5 }" _8 ~
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
* X/ @' g! ?+ ?; g P% T% |}
* X# f! r8 j: {# y/ tm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
5 f4 e( J0 {, Z$ k5 dm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
# _4 h2 ^: R2 x- h1 C2 c* ?m_wndMenu.SetFocus();) \% U U" r) e$ b9 o3 p! X
}3 R0 ^$ a( }2 ^
------------------------------------------------------------------------------------------------------------
2 C& i( k' P. C' j$ E8 t*************************( `1 |0 l' t8 k$ D/ {1 U9 K
WndField.h文件
0 ~. l6 `2 C3 m4 Y( @*************************
. ~' L6 s9 D$ V4 y搜索:BOOL m_bReport;
$ @9 [: Y8 R! c: j' A. C$ ~其后添加:
- E6 Y, ?; P% e* pCWndMenu m_wndMenu;* \' i3 Q2 J) V& c9 ^, d1 Z! ^. j
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);: C, T4 i% |6 v! i
其后添加:4 ]7 T8 y9 w. ~. v* S `7 X1 A! B/ j+ K
virtual void OnRButtonUp(UINT nFlags, CPoint point);
8 l7 R. _4 ] m L8 T, H8 l" }' S; r8 B( s- p$ a$ d; B2 ]
( }/ {1 p! R2 A8 R! W) Z |
|