|
|
源文件中_Interface文件夹下WndField.cpp文件
7 j2 Y% O8 u9 Y, }搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
' g0 ?' @* U7 `6 Q K
. `1 Y' ]# U$ H% c# g7 b* b& ostruct sItem# _& f5 u' u' e9 R9 ^
{
, u3 b. Y, h3 E1 y2 v% bDWORD dwId;+ M2 y2 D# i/ s+ k
DWORD dwKind2;6 V! _* Q$ b2 J& Q
DWORD dwItemId;9 O% g$ l' P5 X3 D5 y& O; s
BYTE nIndex;! E, _% @* c M6 \# B- N" r) M
sItem(){& T B2 \/ c2 T8 J5 J
dwId = dwKind2 = dwItemId = nIndex = 0;. v3 g& h8 s- P& }2 T4 O
}# Q& Q h9 ~/ O- I
bool operator < (const sItem p2): l9 {& D3 G7 _* t
{
2 A& } o( p2 l* ^ if (dwKind2 == p2.dwKind2); }! D( Q% p9 c* h, O, L
{! v- K$ L x- P& y1 [0 U" z6 ], P
return dwItemId < p2.dwItemId;6 x! l6 v( f3 A* [0 N
}else{
2 L* `0 t2 s- P: M return dwKind2 < p2.dwKind2;- w6 G# J( Z7 m+ b
}
$ W `! s7 m; ~ u) P8 g}
& ~3 r; I7 B" ]0 j |. x};3 I6 `4 m! h' {+ f6 H1 r( J3 A3 U" c+ a
class CInventorySort
} d- V& H$ P0 ?4 A. V5 [0 N8 ~1 k{" K: F9 w5 N' @6 M3 c) v
public:
2 `% i" s9 |- I2 }CInventorySort()& J" N# d$ d2 D) ^+ N
{
* _/ L4 a' a& }# Q5 E m_dwPos = 0;3 @, [$ _/ U( o! @- ]$ S3 `$ Q
}' |1 N2 u0 V4 |) \# b. S
~CInventorySort(){}
8 a6 }* N. U' ~! L! Dprivate:! h( m0 ~* l6 o; o' P4 d
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
# _& f2 e7 D4 TDWORD m_dwPos;
8 B T+ t1 l1 v$ {public:6 q9 ?+ F3 g, o R
void Add(BYTE nIndex)
1 j0 X' T4 n4 B. ?6 w! ^{( G+ e: F$ y* n4 t4 i
if (m_dwPos >= MAX_INVENTORY)
/ P% r0 Y! G; E, G {
: D" o9 p- s5 o1 X$ P( E7 J6 b" v$ J" w return;
8 F G3 T% M. z( _! k }9 X9 [% p! h8 Z( [7 W
m_Item[m_dwPos].nIndex = nIndex;. X/ p( G* {* F) W
m_Item[m_dwPos].dwId = m_dwPos;
. ^2 V' A+ U J1 S2 F4 m m_dwPos++;
5 |0 r$ a+ b, b$ i+ t p}: h O* v; j2 R9 x( h, D# j9 j9 b4 j
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列+ S: ~& D: p/ a
{
. x- j$ t4 f) C% W for (int i=0;i<MAX_INVENTORY;i++)
5 c& J V4 t/ Q- K( p% ` {
/ G+ E b- c# J, k& A9 g b if (m_Item.dwId == dwId)
9 n# |0 d' E" ]1 @! w! A$ [ {
" q: M1 t5 @7 I& s* @: R return m_Item.nIndex;
/ j. [. b4 i6 T; c }) y6 S' `) g! X4 Y# T: [& n
}' N0 F, L2 I: y" c. @2 T9 w
return 255;
0 X/ Y4 I7 {7 m3 |}
3 s) w# B- c7 Tvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
; h) }" w ]3 V# c. ^{/ x- ^& k, ]. P- A# \
BYTE nTmp = 0;
9 _! P5 d5 X9 X. V bool bDest = false,bSrc = false;
8 I& r0 z* I5 x for (int i=0;i<MAX_INVENTORY;i++)$ M, q7 F5 r7 x0 @! `+ E
{% ?4 J$ m! k! S8 U# k* K
if (dwSrcId == m_Item.dwId) i0 A2 q8 P9 K
{# _2 A5 ?* I- Z, H: |
//id相等 则 改变对应的dest和src. P2 X% v( y5 ]! u
nTmp = m_Item.nIndex;
# u3 h2 p ^& g% g4 I: z. ] m_Item.nIndex = dest;
5 |1 z" d: |7 J \- K% a- B }5 r% k: Z2 F# ]
}7 Y. Y: [6 y; X" N5 H* K
//临时数据保存完毕,交换开始9 ~; x; G* h. u: n. `+ O
for (int i=0;i<MAX_INVENTORY;i++)
0 x$ t- L( c5 e8 U b {
3 z6 d% L6 \2 H f9 b if (dest == m_Item.nIndex)9 s9 {) P% l' X# J
{% O. D7 J+ X. a. ~( q6 p9 I' S
//id相等 则 改变对应的dest和src
' l/ n; C! p. H: o. w0 X! n- \ m_Item.nIndex = nTmp;
1 y( L% f& G9 Z- x: ?5 N }, X7 u% X2 \1 g/ e# ~. F, e' o
}2 ~3 A2 }" j8 t( w. m9 B0 F
}# N6 w) K6 N, M1 m3 R
};. a, E7 y( }4 s- c) P
-------------------------------------------------------------------------; ?8 r! c1 ?: ^, W. x
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )' A5 H; o! Q$ H+ j4 S, _
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
- G+ L! {% w2 J4 k: u) |% e紧靠其上添加:6 V2 b0 Q- D- v$ V7 T, F
if( pWndBase == &m_wndMenu )
) B% I) }! }9 j. n+ o9 ~8 v/ w{
+ F5 W0 {& a' m! R0 ]+ L switch( nID )- g2 u, u6 h+ N7 ]; ]
{* y* P) q5 `/ n1 d. K Y# S0 X
case 2:; D$ j% `1 c Y, c
{3 Y+ Z- e6 j) w
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);6 a5 T7 K. G$ V" o9 w9 D
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))3 _8 M( i1 G$ V4 B6 q2 t
{6 ~. @/ O. _ X6 K' l) \! z
break;
& ^3 @2 R" b3 d0 @ }
3 r7 n5 z+ ^( @5 ]2 p& O for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
7 _8 h0 }3 o9 z! Q {
( D& \( K# z3 u5 l2 J: D3 v CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
* V% c. c( O" q' g6 `$ Y6 j. p if( !pItemElem )- ^" ]7 F* M3 O
continue;' c0 U; p5 t2 X3 x/ F5 B
if(pItemElem->GetExtra() > 0)5 W( B5 B# _! T# V1 u9 |
continue;# S, \' _" n+ |# `1 I4 e& e4 K( T
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ; | I' L* h) a7 G x
continue;
! K; ~# z3 K8 l+ }3 W7 u4 i$ d if( g_pPlayer->IsUsing( pItemElem ) )2 \7 o. H( j& A1 X8 x/ x- K
continue;
( t' F( J+ ~/ ]4 H- O if( pItemElem->IsUndestructable() == TRUE )
' [" d9 q. k$ M {+ e3 o9 n0 U+ S+ ^/ r0 i: d
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
: u4 i7 o. p1 v/ C% x* F: w5 ~ continue;! W% Z6 W; E+ L; L8 o* ^: a# \0 x
}% F+ I, y. G4 b: F- H/ _; k
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);4 S; v( ?% Q, v% y. I
}1 e! p5 E2 ^9 Y" L# p" p
break;2 ]6 Y" m7 A- G. p
}/ o+ T5 P, R# p" c( K9 W" ?- n
case 1:! g8 v" l+ O( Z5 k$ l5 n( T: Y
{! S; n3 }; o' n; F% }* }$ `
//整理背包
4 J% }8 }4 U: y2 r, v' @: s //////////////////////////////////////////////////////////////////////////" o6 _9 h$ [6 i3 e2 {
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );; m3 ^) p6 R3 r
//////////////////////////////////////////////////////////////////////////8 G, T, m7 X4 B, d, D6 l4 v
//////////////////////////////////////////////////////////////////////////
' V( P, y3 v+ ?. i3 r CInventorySort* pInvSort = new CInventorySort;0 A: U! g/ O8 M& B: a& e, z
vector <sItem> vItem;, q( z) s2 J) C8 M) g% o
vItem.resize(MAX_INVENTORY);//初始化大小. A( h3 b E) i; S5 I N% S) j7 [
//////////////////////////////////////////////////////////////////////////
' t0 @0 l* ]4 g- L8 _7 ] //填充数据
2 |8 P/ s$ j, Q3 I for (int i=0;i<MAX_INVENTORY;i++)7 ^; g, ?0 H- F% q2 }0 P& v
{
& e S2 L& n E& ?" b' R+ N CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
' o9 u1 R8 x" `& [ if (!pItemElem)
& H) c u! z( G$ b% n' W {5 m0 [! W( H% B. B* O! T4 X
vItem.dwKind2 = 0xffffffff;
Q0 y+ _0 Z; l7 `5 O vItem.dwItemId = 0xffffffff;
! y; F* _- E0 i" a7 s vItem.nIndex = i;; {1 M- U A5 d* h5 w- e1 \" X+ h
}else {
* |1 e4 [' ~6 Y g ItemProp* pProp = pItemElem->GetProp();& A! R0 F9 G: c0 v) l9 n* D
vItem.dwKind2 = pProp->dwItemKind2;
, t8 {: a5 J* D: @1 L3 ]9 A; ^ vItem.dwItemId = pItemElem->m_dwItemId; K0 Q! B" ~+ k" Q+ p: P: W4 S
vItem.nIndex = i;
8 p1 I- C) Z5 l" n$ j S }5 l% T$ v4 s: h+ ]
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
( M! W* S4 z( }: X$ E; ~6 |: u, s! d }
& f: e! E2 [8 Z //////////////////////////////////////////////////////////////////////////1 x& r. u; [/ A- W5 l
sort(vItem.begin(),vItem.end());//排序
1 B8 H, t' A1 E8 W //////////////////////////////////////////////////////////////////////////
5 K) f4 R8 Q* `; U% Z* S //交换8 r. G& H& b/ ~: n
for (size_t i=0;i<vItem.size();i++)' L. B ]- Y9 n4 \$ H! c
{( P7 }5 P6 `. A- j+ c
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);, |0 H; H+ {7 @4 U( c/ g
pInvSort->Add(vItem.nIndex);
0 G2 e" W7 B# y) p }* Y+ p5 Z; W# U6 l3 M
BYTE nDestPos = 0;
! N' [( `6 W+ ?8 `- C; o7 S for (int i=0;i<MAX_INVENTORY;i++)
) i3 F6 A2 @# R {4 s' Q" S) C. _4 U- ?
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);1 K. l/ d+ V0 u2 M% b; _
if (pItemElem)$ q# x& g* C+ G6 s# _
{! O& [% |& ?6 {9 G" f6 N d: O$ t; o
if (IsUsingItem(pItemElem))
% j- R" V% e, `; i9 ?& z3 V {5 h9 t6 [, v8 w. _" k9 m; e
//这个位置无法放
4 Z0 [9 j5 E& u" i" s, c nDestPos++;
4 E* Q1 L6 e6 S4 R3 W }
8 | {$ g' x: n0 K' K }
2 P: @& x% V8 u" f BYTE nSrc = pInvSort->GetItemSrc(i);1 k0 J+ k, z, D- E
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
; O' B" o/ ~* F; z0 P if (pItemElem)% g3 X5 O# Q, n" ^; z; u
{
& R6 [; G; `2 ]: H if (IsUsingItem(pItemElem))
: f( c$ h- ~% n/ u0 ^ {9 }9 k" e; A% U; _6 v
//这个道具无法移动,跳过6 e7 d1 ~3 p7 z0 E- q
continue;
& `" G+ ?5 D9 S" @4 R& l w5 x0 m }' \8 j, b/ @& e2 l
}else{
; r X9 v/ C8 u6 \% D //空位置 不用动
- T0 q4 E6 |$ ?+ ~: ]$ H q continue;
7 Y4 a) @: f. C6 d' @) ]+ d, k }$ W. J0 `+ s6 T
//////////////////////////////////////////////////////////////////////////" C7 l- f" |/ _2 V: Y* d4 V+ c
//开始移动
: n! i; |& {& p% k# y5 D! z8 h if (nSrc == nDestPos)
; j9 J! X# I/ d q- U1 m {
* n) t) _& _! j! Q* {7 Z //原地不动4 x+ ~9 m. V! a& N2 o+ O8 i- x
nDestPos++;2 l9 m! g, f5 R& h% u3 n
continue;9 f, _9 w- g# f+ i+ i2 A/ d( o
}
' u; J! G& }1 G. l" m5 ] pInvSort->MoveItem(i,nDestPos);+ h! \* |, f$ S; {5 B
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
7 E0 |5 W0 j% |9 O6 A Sleep(5);+ W4 I5 n) a @; u8 B
//Error("移动 - %d->%d",nSrc,nDestPos);! r4 w+ h" {" _ l1 @: G- o2 Y- ]
nDestPos++;0 _1 W, B8 D' I1 |( q
}$ o9 E o* A# C
//取第一个元素的信息
# K: ?3 Z6 A% G+ q8 P" s; G /*
+ Y. M8 x$ }$ n) X4 X( p3 _' l if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff); T& W9 @5 f$ \6 J
{
$ U, \7 [ V4 i' e Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
7 f0 L/ P" o P/ \* C1 } g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
/ q, T, u# X% C8 |+ m' | }: r3 ?$ n$ a* M
*/9 W0 f# C4 |: N/ \4 _
//////////////////////////////////////////////////////////////////////////
' M0 j% l5 Q: z, Y% S! i; I/ ^ break;
L7 f8 G* X$ Q% G }1 S# U: ]- b; A
}
2 \; l8 h5 \9 v& R4 ~}
3 V2 N/ O, n- q; {4 ?m_wndMenu.SetVisible(FALSE);
: g5 f! W5 ^% I( {# |$ K4 b
, t O8 D8 V4 G& V--------------------------------------------------------------------------------------------------------
6 C" k9 R4 R* \6 R6 l p. g搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)8 B8 h/ o0 E6 c# b% o* x
{
" o3 T, F3 V5 w: |3 Q4 L( wBaseMouseCursor();
4 T/ B5 T; E% ?}
/ V: L) C9 b2 Z# u t+ R; M8 W在其下添加:1 a% I$ W) ?9 B, C! Y
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
8 r3 ]- j; z6 Y i# \1 a3 [5 d2 {{, B- ^; Y9 Q* X! b4 k
m_wndMenu.DeleteAllMenu();# y; `4 B$ F7 f, G% [
m_wndMenu.CreateMenu(this);
; w! @$ W9 c& `' [9 {m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");7 D4 O4 q# N( b0 F
) H) m2 n' L6 J2 T
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)), _- D" i i' D$ G# o
{& M# A* O1 a; J& x' e$ b1 \
//P以上级别才可以删除所有道具
: z3 j; X4 ^6 n3 N/ U m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");& N! c) M9 B: d/ D
}
5 c) w& ], R: e7 d, d% lm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );% C1 a% Y5 B& F9 P
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );, l% T0 c; A, g9 V6 ]
m_wndMenu.SetFocus();
+ V X+ j- ~8 G; F. ~& u s A @- ]}7 h% a; h, A, k/ Z
------------------------------------------------------------------------------------------------------------ r4 v. B9 b/ g4 ?
*************************5 k: t& }# D8 M
WndField.h文件
8 U, r. N# I" a* u u) n*************************
" q0 \7 M! T/ ]" m& W; i8 I) U7 P搜索:BOOL m_bReport;
3 M1 _4 N1 N' t; l+ Z其后添加:! {& s5 K+ i2 Y0 F8 c
CWndMenu m_wndMenu;8 x& U; c5 p3 ?
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);- \! l+ m( T8 @6 `/ Y, i
其后添加:' \& o# {2 d2 a9 y5 F, E: b
virtual void OnRButtonUp(UINT nFlags, CPoint point);3 E7 a' ^; u. s1 }
; l) l5 l0 c. H1 X: }4 C# s& k" x$ D0 K; S
|
|