|
|
源文件中_Interface文件夹下WndField.cpp文件, [. @. o( s l
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )+ M- N. a- K5 V( b" q+ R
/ J2 ?% c+ p2 u* O1 S& M& M. N
struct sItem+ P1 ^% R' L" h! @' T$ K
{
( f, ^( W% |( ?9 l/ d1 d8 H1 ^8 X' EDWORD dwId;
1 A" N4 }- X! ]* i: HDWORD dwKind2;3 C9 d( `3 T" e3 [# k
DWORD dwItemId;
3 V# {0 ~5 y9 l' K- w# I6 e3 \! d$ h, yBYTE nIndex;0 ~. q) R9 B; c2 j3 D3 v) Q! T
sItem(){
9 k$ k9 k6 H3 U$ Z dwId = dwKind2 = dwItemId = nIndex = 0;( u8 L' G: [$ H% I( B
}
4 U3 u" H% @4 q. u) e' o* Tbool operator < (const sItem p2)
. L( x- Q* o* I) a- W+ J{
; v% w. f4 \8 L7 J5 P if (dwKind2 == p2.dwKind2)
7 H6 ^+ T( m+ L+ m4 R! H {" z p; q4 y' ?
return dwItemId < p2.dwItemId;% L8 y5 }/ X% ~5 h
}else{9 y! ^) y$ x) N2 L. n
return dwKind2 < p2.dwKind2;5 m( X( u: K5 N1 a" W) n
}+ c6 k" ^) e, R3 d/ C K
}
( h1 [$ D% T) p7 r9 h% Z! p& X$ E- V};
4 V+ {1 Z. g+ h# ^class CInventorySort9 Q1 O/ e4 V% D4 k* f; ?) b E
{9 `' S% U s0 {4 i% ^' }1 w
public:* A) B/ r$ u6 b
CInventorySort()9 t4 M, p6 H1 T9 w) G; ]
{" Y' @! s/ ]5 {- v
m_dwPos = 0;
6 R- z2 {7 ?0 R" W% A. T/ p* l e+ m3 y}* y0 z0 O. b2 y" `
~CInventorySort(){}
# s+ Z* ]- G1 f2 S# kprivate:
* ~) f' X% P$ s, ^& R0 y! esItem m_Item[MAX_INVENTORY];//存放排序好的道具信息' `/ \. a, ~4 G/ X: x4 ^6 K
DWORD m_dwPos;4 `/ _0 q) f2 e, V
public:7 E2 z3 y u! f- q
void Add(BYTE nIndex)
! l5 P u+ e% p1 O5 d# h{% J4 r1 U- q$ V0 }3 _/ q, @( ]
if (m_dwPos >= MAX_INVENTORY)9 l. v$ r# Z3 `/ l
{$ S* f; t4 h9 H' V& p9 q
return;' }8 F! v! D# ] Z, a X. P2 Q: N
}5 j" Q9 Q' p- L! O$ B
m_Item[m_dwPos].nIndex = nIndex;0 [) ]. J/ V: x9 f" q4 Y7 u$ ]2 |0 ^
m_Item[m_dwPos].dwId = m_dwPos;, I, c- `7 s, x, k/ Y9 O6 b' C
m_dwPos++;# s' L! L8 a0 |. a S' i8 S. x
}
+ m3 i5 U0 E/ H! h3 d4 S3 vBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
* }% ^+ a$ u5 q; o6 ]; P# r5 H{
) J; |5 w4 i, E% d: {6 o" _ for (int i=0;i<MAX_INVENTORY;i++)9 E- z/ M* N8 ?" E* r
{3 D# ~6 q8 s9 i& a
if (m_Item.dwId == dwId)" g* w# }9 R8 p. y; s# x
{" }5 @0 o! W( H* m! W
return m_Item.nIndex;
9 r* |4 V* d& q! `$ r/ ? }) j6 s; s4 b# ^; q
}
+ G4 m) V. \$ Y2 r. a: ]9 z return 255;
, u H9 p8 y/ G}
( K4 o& |- ~, {3 U. h, xvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置* ?: n: O: ? Z
{& D- \/ m+ O R7 L. w9 Q* F& ~
BYTE nTmp = 0;
, o: t, }( e/ ?7 M4 i7 G bool bDest = false,bSrc = false;
, G1 [& o1 _5 C9 W$ d5 p1 k3 K for (int i=0;i<MAX_INVENTORY;i++)2 l. d" Z; F4 Z6 Z! [
{
- X" X/ I* @9 V9 r% H" W+ e' ~) H0 c if (dwSrcId == m_Item.dwId)
; [3 d; ]! K! ? {; l8 r z! C4 i6 J; ~1 Z
//id相等 则 改变对应的dest和src' @) w; r1 V/ e |. ]1 ^
nTmp = m_Item.nIndex;( H* n9 t+ i3 K* x m2 b
m_Item.nIndex = dest;% L3 P& W" @- |; S5 W; C+ d
}3 H+ b C4 i' a3 K7 U/ z1 |2 o
}
. i3 l) N) m' _# o4 r //临时数据保存完毕,交换开始
: J, a7 p3 ` [; ?, I! d6 [ for (int i=0;i<MAX_INVENTORY;i++)
. K; L4 n& N; I' w {
5 K7 M6 @, `$ o! ~3 |5 p if (dest == m_Item.nIndex)
- E) O F8 S \- u0 b5 o* `7 m {
$ v1 Y1 E. V. |& z c9 ]4 q( R //id相等 则 改变对应的dest和src$ j0 N' O0 }' h) I3 `: s, [7 ]
m_Item.nIndex = nTmp;2 ]4 Y! s3 l. Y: U8 C0 q5 [
}5 ^% `% R7 `- o+ ]" }/ g2 K
}
3 } ~/ P& i" W/ ^, n/ m& H( m}
) V# L8 c/ K, h- U) r};
, p9 Z0 J/ @5 i. x* u-------------------------------------------------------------------------
8 w4 H% P1 s" \依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
' P2 ~+ L! Y. u; F& d& a0 N: d2 u/ R搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
, J: w: N9 C- ^- g" R9 \9 E! F3 T紧靠其上添加:
; {# k* E* O8 w L; I3 W3 D7 s. tif( pWndBase == &m_wndMenu )
' |' A4 ]. k8 h( `6 w{
- v3 p' U* ^" m. b* ?7 c! r switch( nID )
" p& J6 m7 L, _2 L. p( I {
6 V" `0 W. a& N* i case 2:
0 V. I* F7 x, y {
6 |" r2 ]: a/ s3 W6 ^# ^ //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);& u0 t% ^! M3 E7 P- S a
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))6 n, U6 I- s8 P x- a2 D+ V3 i
{
$ t/ v" j- \' m- A break;' ~1 N& `5 f5 o% e ?; L5 o: S
}2 l0 i8 B4 g1 p: ~$ E- M j% }) s
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
8 e1 j, D+ e' N9 E! V1 u5 l k {) j" o( Z" C" K+ ?
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
/ k+ m2 ~) z% B, D if( !pItemElem )% i2 w& V! l! |5 a5 L0 A- `
continue;
3 Z5 y) Q Z$ U9 o' j6 x% N if(pItemElem->GetExtra() > 0)
, K5 s" F9 a$ `- K continue;% V R( X; ^4 I0 W
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
3 k0 y6 h/ ?' [/ U: r3 F, m& h continue;
; K0 f3 e" B4 ^3 {: D/ M if( g_pPlayer->IsUsing( pItemElem ) )6 _' X" b! W) D6 t0 }& o
continue;
7 w8 Z$ O2 D" x! }* u% n- e if( pItemElem->IsUndestructable() == TRUE )/ k; T$ t$ r) y" Y$ V; T% ~
{4 w8 B+ [. Q: l. ^3 a! g* E
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );' S' \3 O5 w) L, z$ D
continue;6 J* Q/ X) y( |; T/ L/ p
}
/ Y! j7 M8 C% b, m0 Y6 s g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
x6 Q5 B6 K* e- X T( \ }
+ M7 P0 k' p1 [7 B break;
7 C8 t- v A3 [; O; z }
, q0 x! |0 p' P$ i4 } case 1:
4 w! n# F7 O, Q) ? {, h9 a/ u% M7 z m5 Y1 E
//整理背包% z7 S/ I4 r9 ]8 d- L
//////////////////////////////////////////////////////////////////////////
$ W8 C) E# [3 f5 D' X //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
7 ^ O5 k) J# u3 n7 Q8 c* H. u //////////////////////////////////////////////////////////////////////////' h5 ^ e( w7 {, D
//////////////////////////////////////////////////////////////////////////
* Z ^" J: H1 s3 P" y CInventorySort* pInvSort = new CInventorySort;
( @9 S. ]/ d/ a: A vector <sItem> vItem;) r1 N4 ^- U/ w/ Q0 |, }
vItem.resize(MAX_INVENTORY);//初始化大小
" g6 D: P: m K1 G; W //////////////////////////////////////////////////////////////////////////
1 p l# G' { n F3 X8 S, } //填充数据
: l8 n. J/ s! ?% x" t5 D$ r, V. C for (int i=0;i<MAX_INVENTORY;i++)
5 ]& x; a7 J* J! J {
% b7 c! w) ]8 o8 | u! A* [+ A CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
% F4 W, y: ~" n) Y% M0 _3 M6 c if (!pItemElem)
) w7 d8 V' u0 }" g, h" a/ K+ q4 ] {8 _( b' l* H2 L5 X5 }/ g- V
vItem.dwKind2 = 0xffffffff;
, r( z% _& h o! v* O# b vItem.dwItemId = 0xffffffff;' t5 ]$ J- |9 m3 l# r) z. |
vItem.nIndex = i;
! ~7 l( c: k0 {) x9 l }else {
" d. M" d% [7 g# O) y# m, { ItemProp* pProp = pItemElem->GetProp();
& t0 ?9 |2 Q o1 ^8 \5 N vItem.dwKind2 = pProp->dwItemKind2;
. S8 T8 c: V* y vItem.dwItemId = pItemElem->m_dwItemId;# c# ?3 c2 q7 v* [" l2 z
vItem.nIndex = i;
6 b+ S7 {( b: b7 b) T r }6 H9 j8 A0 G$ I: O6 B; e
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);: T, ~ ]- m7 b7 S* B7 t6 X4 E
}
( M& W! z; s, u* o //////////////////////////////////////////////////////////////////////////
5 J1 @1 B9 N. X' ?$ |$ s sort(vItem.begin(),vItem.end());//排序
. o. X; W) w2 s9 U5 Z% R //////////////////////////////////////////////////////////////////////////
& a2 o- o/ I* ?" o! ~ //交换
6 d. B! d" L3 r for (size_t i=0;i<vItem.size();i++)- |! R5 h9 y7 G" \# N
{
5 s: b& c. C3 s //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);2 O6 n/ H3 n5 C
pInvSort->Add(vItem.nIndex);7 V% t% n; z0 q ]9 _: \
}
8 M. K4 |3 s' t, S* A$ X6 G. C' ~/ w BYTE nDestPos = 0;
7 A' \" f) G" ]* I6 \ H- [ for (int i=0;i<MAX_INVENTORY;i++)
! L; l! L5 H* E+ ` {1 B8 J8 q5 B. P3 @$ e- U, K. |/ j* @
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
( ^6 R K, S' @* {( r9 J if (pItemElem)
2 N7 {, Z! y) R" o {
/ P3 I; n9 l8 y: H/ W if (IsUsingItem(pItemElem))
* q- Q6 L* T- g! d) V# T# g) }5 q {
* Z& A8 H9 u( |8 Y4 H3 K g3 Y //这个位置无法放
: S# o4 x( a. o% z nDestPos++;7 a: _6 i6 v8 ?5 k
}% {! r* R: A# D1 K
}
$ u% L# o5 w! V- m BYTE nSrc = pInvSort->GetItemSrc(i);
c: k! q% j0 G% ~) H pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
- h: w! z9 n2 b, D if (pItemElem)
4 H( H o, P7 J' H8 W H. R {; u& G% |0 o0 q& ^& i: N8 x% c
if (IsUsingItem(pItemElem)), d; U9 ]: l( i- u" I* [/ L- p
{1 Z; T0 O) G+ j1 U" D& n
//这个道具无法移动,跳过
- e+ t" y, T7 T: J continue;
: K4 k. V% t- f }8 N+ e3 K2 y4 G6 O% y
}else{
& {3 R% j" N6 x7 m; n //空位置 不用动3 U7 [0 r; w# T/ T1 U2 k7 C5 X
continue;
# w; O: E9 S6 w3 b }
+ j( g4 W" H Y3 O9 ^! q: V //////////////////////////////////////////////////////////////////////////3 h7 Y1 F( o9 e: }5 A/ w4 r& B
//开始移动 h$ I& Z( N5 M$ G) O$ l1 e
if (nSrc == nDestPos)
( E3 @- y6 C n6 a. [ {
1 v+ U: E) ?/ e //原地不动
: ?" J/ e! y, Z nDestPos++;/ [5 J" U5 \- L8 ~
continue;
: H4 h8 l0 T6 M F }' |) v/ y' y1 E: `4 ^
pInvSort->MoveItem(i,nDestPos);5 o. M+ C& f5 I0 f) o
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
9 n/ p0 @7 `( h6 Z Sleep(5);2 S; T. Y1 P. @& a) B
//Error("移动 - %d->%d",nSrc,nDestPos);8 t) X6 ~" i* r: o4 W
nDestPos++;& J9 F4 q9 I( T/ e6 A
}$ f9 p8 ^$ [2 p9 \3 b' e9 `- }
//取第一个元素的信息
" E$ [1 ^! G/ s% \3 b q- { /*
% \! h' m& ?3 ]% ? if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff), N% A' F* i% `# b/ v8 j! p0 P
{
8 Z, ^# _5 ?0 ~# M1 j7 i' [- [ Error("Move - From:%d,To:%d",vItem[0].nIndex,x);" `3 b' `. t+ O4 Q
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);8 u' R6 y$ v C; V& Q+ s+ O* U
}+ Y- |; g4 A5 w' w; T( M! N
*/9 W" X& X# e% _6 U$ D& J& j
//////////////////////////////////////////////////////////////////////////0 H5 U# q+ r! q, b
break;% Z- Y1 \% g- r4 D6 T
}
% U/ Y8 `/ h' g }
9 ]6 x, G8 B4 D" b/ y1 T, u}; @: h+ Y5 d0 j k; N* c! M, g6 u
m_wndMenu.SetVisible(FALSE);$ q* W7 A- g" j6 {
5 }) G1 B2 r+ d. ?--------------------------------------------------------------------------------------------------------
3 |5 [( Z; ~. w搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)# Y/ |0 n# k. x; j1 |
{
) u" F- U' E$ _7 ]. n: t4 Y- mBaseMouseCursor();5 a% Q. d! Q1 m! l. y7 j% ?
}6 O6 m/ G! ], t
在其下添加:/ P) C9 i0 W; s) E% r/ _
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)7 v1 K9 n! y1 ?/ d' ?
{ U- _& ?$ }1 k1 H y& O& e9 x: _1 S( B
m_wndMenu.DeleteAllMenu();
, A1 t' G! b" j2 Om_wndMenu.CreateMenu(this);
, r3 i: e8 y* @4 Cm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");7 Z* _+ e& d$ P
. x9 O p: n s i+ }* n8 pif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))$ m4 w, f( w3 J+ J- x( F
{1 ^$ f4 p! A& _5 k+ C; q- V7 r; w
//P以上级别才可以删除所有道具/ G$ L; j7 F/ Y, L
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
9 a: {/ f5 K" ?# ?' o, O2 K9 ?}
1 C7 p J+ f6 X% w& r3 h% t" Hm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
0 c1 K$ l9 E5 A. Y: Pm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
q$ y/ n4 `: `m_wndMenu.SetFocus();0 M7 P' @( M8 g2 f: H
}6 k) q, Z. a9 J6 h' A3 V
------------------------------------------------------------------------------------------------------------
9 F, s R$ i7 C' S; p3 U*************************- z/ w' Q) g( p3 b/ ]
WndField.h文件! [2 B. f7 x2 A. }' @0 S3 I o
*************************
+ R& q3 ~' o4 O/ F搜索:BOOL m_bReport;
, ]( Q6 d6 x/ o, T7 j& f0 u其后添加:
7 m& m: Z: V) u' q/ E% @CWndMenu m_wndMenu;
# n) }3 J; j) F% j搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);" [ I' ]5 a8 ~+ h' M! W
其后添加:# j4 m; i. p* Z
virtual void OnRButtonUp(UINT nFlags, CPoint point);
7 y ~1 \6 W( E
2 N2 p# J' X7 t/ k" P" z1 r) o& I5 l
|
|