|
|
源文件中_Interface文件夹下WndField.cpp文件5 I; W( e% ?1 g& r9 M
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
$ ^5 G( I. e3 L3 A$ C3 o" s: M+ o0 @5 k. ~! s# i% {1 Y
struct sItem
' }* f, h' ~$ E5 o{
' E2 z+ k- a ]; r" UDWORD dwId;8 T* J3 |0 y1 {, g3 E) m
DWORD dwKind2;& o' ^8 z8 w- H4 y7 I* v% P# o, s
DWORD dwItemId;. }& p: J: d# U" E5 V9 }
BYTE nIndex;2 I, Z0 k/ @2 w7 { E8 g( f* |8 V
sItem(){5 i3 u4 X" y7 B! ^
dwId = dwKind2 = dwItemId = nIndex = 0;; l4 ^5 J6 n u, h' Z/ J% J& w
}1 T/ t7 L: b2 {6 O% o& W8 E h
bool operator < (const sItem p2)
: D( x- D0 Z$ c) Q{
8 p. d+ f7 ]$ x7 H0 X% u5 l if (dwKind2 == p2.dwKind2)
+ i0 g; ?5 e* m5 p' b$ a0 D4 ?3 R& Z {
+ g' O; a% @3 ~5 P return dwItemId < p2.dwItemId;. T0 w, q+ p' d7 q* F
}else{
, R2 n1 P' p& @3 j/ ` return dwKind2 < p2.dwKind2;" {* L0 n" {: r) o
}
+ G4 O9 \$ E. `" c* Q, r% ` j0 x}* J0 F7 N* p; b" Y3 n
};
+ }2 c, T. v& g3 Rclass CInventorySort
! Q7 j7 {% h% k7 t4 w. P7 ]* P{
! {3 f( m$ U! G; spublic:' f2 |* t n/ S' m
CInventorySort()2 x: k, H) S4 o1 G+ b
{
4 P) ]" p! _' q: U0 L9 i6 ] m_dwPos = 0;+ c# s; _" e5 j" V+ B8 `4 V
}: \: V( J. I4 ~& y$ V+ W
~CInventorySort(){}! E+ f5 l, }. E/ o$ l! A
private:
8 x. x1 f0 ~1 d6 S) p9 ^sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息: Y5 A" T Q6 m1 M' p g* _
DWORD m_dwPos;
- O$ y+ t3 k5 { B8 r3 `5 j8 Apublic:
, r2 q) ~4 P ^4 D6 j* @) I& yvoid Add(BYTE nIndex)
. r+ _% z s0 z2 \6 t# i, ^4 z( h{& J( L; F4 d% a3 b
if (m_dwPos >= MAX_INVENTORY)
* _9 S% q# R8 S! x# {1 T {$ V5 T7 Y& S1 q! n
return;1 V2 w) g: W! n2 v R
}
% M! o9 D& t. H" z% D5 Z) ~ m_Item[m_dwPos].nIndex = nIndex;- k4 R8 g: y5 k
m_Item[m_dwPos].dwId = m_dwPos;, }, P8 `$ t8 w* u ]* x
m_dwPos++;. Q0 w8 a& m6 W' Z
}' O/ s, Y/ q3 o8 i
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列# E) q: C t! Q. N' f( C8 Q" A( y
{
1 B2 P( M( \, |. S" v% \ for (int i=0;i<MAX_INVENTORY;i++)
) N, l5 ?; _/ D1 d" g2 Y. a( A8 F# a {
: i+ n$ O0 w }. w+ b* K: V5 B if (m_Item.dwId == dwId): V. U5 U4 i5 ~1 V7 W
{
! `) o. a- X8 G8 h return m_Item.nIndex;6 G: T: u8 z3 I* R6 w
}1 o O' }7 ?2 v& X9 }% h
}! P7 s. m; {( K, i
return 255;/ K& l$ x/ M! ^" f, T8 s* S
}
2 ? R5 q" ]7 j: `void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置3 Q d" y3 `$ K- {! B, n+ N
{5 X. e/ j+ e% l9 I, S
BYTE nTmp = 0;
) {5 {0 I! _' { bool bDest = false,bSrc = false;" [0 ?$ p5 L. X$ w6 X
for (int i=0;i<MAX_INVENTORY;i++)
X& [+ Z* G9 [; ? {
* j+ l* q0 u; |, y! \) X% N3 V9 O if (dwSrcId == m_Item.dwId)' e0 v* J; @* q+ |! l
{
. V- ?1 @; m3 n1 s; ~ //id相等 则 改变对应的dest和src
2 Q9 }: b& `$ o nTmp = m_Item.nIndex;
4 u2 E& P1 [* O/ v" N m_Item.nIndex = dest;
" I) c2 n9 l8 o2 }% n. L' _ }
7 k) Q/ P0 w5 B1 g1 a }, I: U& U6 \4 b8 O3 ]% Q7 |9 i9 j. J
//临时数据保存完毕,交换开始! S) g. b3 P* D# ]9 R
for (int i=0;i<MAX_INVENTORY;i++)
' f- @8 m& x( w5 P$ } {
! l {& H1 F" d0 d; M! C if (dest == m_Item.nIndex)% m" ~, {) I/ g) S: I
{
! J5 Q6 t, {" @! d- k' r7 O, ] //id相等 则 改变对应的dest和src
* P: j0 ^4 B. ?0 R! x( K m_Item.nIndex = nTmp;* s3 I X: W& E$ @4 @% Y/ T
}
8 z9 ^. `: Z9 K q }
! f6 c- M) t" \}
6 Z* L! m; h( ~, D) e; W' i: x: [};
" y- K% [- R# Z* ?2 O/ k p5 N5 Y-------------------------------------------------------------------------: A. y6 Q7 c' Z: u; F
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
. ?5 d+ u% e& y3 d搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
+ g5 c0 U7 T1 |; B' l紧靠其上添加:
1 o' c+ V% K. L/ R8 U4 Jif( pWndBase == &m_wndMenu )
|# H4 V; S. d2 T5 R1 t6 r2 b% j{
. }* [! I, N' M6 x p8 d5 m switch( nID )( P! i( }% J2 p) w1 p
{1 T& I" B: @9 e& j4 @+ k$ Z1 a
case 2:
8 i9 M3 E8 w5 n$ _ {
. L3 @2 S" E- I2 l5 I( ^8 L //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);6 Z0 @0 t L1 N7 G& y$ s
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))& [ F0 a5 d0 O! s8 I- W* I9 E) z
{
4 k) F2 s. R9 h5 c S break;8 f& p4 C! n8 y) m; ~/ J8 X3 \( S
}
{5 q7 b9 p* H2 G, ? for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)( t& J* ?9 I$ _; }: B* J
{& Y3 L. y8 b% B2 U& p% g j3 c
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);6 }" j& N# x0 w7 D& f3 P- U0 @
if( !pItemElem )( o7 f& l' e, n
continue;/ ~6 m" I# t* p$ a
if(pItemElem->GetExtra() > 0)8 u+ J9 g' F1 A2 Y5 E/ I6 E
continue;' P' A0 L% t& Z( U
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ; U& N: a5 K# y9 W8 ^
continue;( ~+ A: r: c3 Y/ \" @$ P, y5 a
if( g_pPlayer->IsUsing( pItemElem ) )
( [# C8 k9 T* _2 @3 p4 V continue;/ k8 I% o7 E- B' |; ?
if( pItemElem->IsUndestructable() == TRUE )
# S E$ I) Q7 G/ i# E: |* l) R {
6 u( g! o) U( H9 M$ F; ~! h g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
, Q; q) w& V8 L* ?4 i/ t+ K continue;
# c' O) O: f8 x6 S }
2 r( G; \( L4 X- ?4 {6 u- j g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);; Z \/ v# u$ b) B
}
, H5 C* G' _0 I, `% P# }2 q break;) u: t2 {" U0 S
}
1 B$ o& G4 s+ u; a/ u4 O4 X case 1:7 J4 L5 \" c. M: B8 ]
{3 {6 x+ o4 x; }; b/ [3 l2 H; @
//整理背包
% J& K3 H5 K% `2 }( i //////////////////////////////////////////////////////////////////////////
6 ~ U3 L- |2 _" _, B //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );6 { F; U* W- q+ {" U6 f
//////////////////////////////////////////////////////////////////////////
# X. u" S j7 v' Q2 ~9 ]5 h //////////////////////////////////////////////////////////////////////////8 P! w5 d7 G; k4 F
CInventorySort* pInvSort = new CInventorySort;
( t% |( ~8 g- L+ M$ Z vector <sItem> vItem;* H) I+ c; j s8 @
vItem.resize(MAX_INVENTORY);//初始化大小7 r! ?7 Y ]' h- G- h+ M( m
//////////////////////////////////////////////////////////////////////////
! U& a$ W, R- W8 [; G6 | //填充数据
+ v3 `1 ]5 E5 Z( z8 j for (int i=0;i<MAX_INVENTORY;i++)
( O/ q4 u8 h7 T: ?9 k( P2 E& R, e {( e$ s. {4 a; r2 r7 @" b+ t
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
& P2 }: Q6 G9 d0 G; ?$ {: i: ? if (!pItemElem)9 t/ j3 k# A) y5 m9 T+ z
{+ o$ [ F; C/ r8 J7 V: B
vItem.dwKind2 = 0xffffffff;
, \. t y6 Z- `" w vItem.dwItemId = 0xffffffff;
4 k( J4 r1 u5 h8 j6 t- Y vItem.nIndex = i;! p1 p) t$ q0 C' V3 j
}else {( ?/ n3 a# @' D
ItemProp* pProp = pItemElem->GetProp();0 e. y& L! I9 }
vItem.dwKind2 = pProp->dwItemKind2;; @& j6 z7 S3 t- C* m
vItem.dwItemId = pItemElem->m_dwItemId;' }& O2 k0 k9 @+ W! d9 M3 H6 t
vItem.nIndex = i;
8 m: \' k% N; d' P& \! n H1 c0 B }
3 W$ T6 D7 A' N //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
2 S! B' m0 k9 j5 X! A }+ b) F. v: u" B- `6 a, t1 l
//////////////////////////////////////////////////////////////////////////
; c7 t1 ~1 w- R7 @) {4 | sort(vItem.begin(),vItem.end());//排序. U/ Y& z* M2 V! ^* n* Q
//////////////////////////////////////////////////////////////////////////
6 W# Z8 U4 ^7 Y8 A1 o$ S3 Z! W //交换* _$ F; u; J2 B# _/ F; P* Y
for (size_t i=0;i<vItem.size();i++); ?6 v8 b# s- ]" r7 O' S
{
+ d9 Q- p4 z+ N3 N //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
) @" ?. [* F0 B5 o( } pInvSort->Add(vItem.nIndex);$ N* q% |& F5 O% g/ q3 ^
}8 M) t7 ~( n0 f6 {
BYTE nDestPos = 0;
; R2 \0 F5 n2 p for (int i=0;i<MAX_INVENTORY;i++)
+ o& h/ X) K ?7 D! _. ?7 p {
( E G9 ]: m+ c! x, n( x ` CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);% @( q; E' }( h* r; e" m: J# F! ~
if (pItemElem)7 D$ F$ i4 k+ J' A% \; V
{4 {4 q" C; m3 ~9 s6 H) D
if (IsUsingItem(pItemElem))( M' s2 |: d& ?4 j% s9 A; R# y6 M' e
{) i6 v: j" z8 A
//这个位置无法放8 U9 [, k/ s& k% v
nDestPos++;
5 Z, T8 v8 ?# \5 p }
9 i, a7 F) a& F$ P/ [ }! q% H i: v) X3 `! Y3 l. j) p
BYTE nSrc = pInvSort->GetItemSrc(i);
0 e$ H. c8 x) O& E pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
* K# k( ? a9 k+ } if (pItemElem)/ Z* e, W& d# p, I* W/ G; `' T
{
( v& D4 ^2 w; V6 ^3 Y. H if (IsUsingItem(pItemElem))
' Z o+ }& a, w; B; Q {
8 ~; V! Y) L ^) P, |* ] //这个道具无法移动,跳过
& i) }' B; U2 Y8 n. V( C, n continue;# [+ h9 `; W. i
}9 d6 e% e3 d* N4 a2 H
}else{
4 G6 R! v3 ^7 Y! l //空位置 不用动
- P2 U$ A& V( ?9 K continue;) {' c7 u8 Z2 E/ u& |6 p% u0 A- P
}5 L, [6 x' Q" Y( h( J3 ~
//////////////////////////////////////////////////////////////////////////
' m2 G8 S+ h, A //开始移动; _% u$ j) n% Q1 {8 U# u2 V+ _4 K
if (nSrc == nDestPos)- {; v; o/ [4 n: w8 g
{
) ?- Y: b/ g. P( L- v$ r& a //原地不动" Z0 y1 [. x% m( {% W3 f8 \0 M) Q- q
nDestPos++;
9 i4 W/ p' O8 e# \5 Y continue;4 M& B N6 g( K$ P: ?' @
}
+ `0 A, G3 R8 E( G& U" b+ \: j pInvSort->MoveItem(i,nDestPos);: T" N" L9 X* @" G
g_DPlay.SendMoveItem(0,nSrc,nDestPos);3 z2 T( X- Y: x/ W S/ K# B& p
Sleep(5);
+ {3 \: ]: I5 q) H; l( ] //Error("移动 - %d->%d",nSrc,nDestPos);& x: {/ K: U2 H6 X# D) ]; z; S' r
nDestPos++;
/ b8 n; B4 R5 }! C4 G$ w: M }
. S3 h6 n9 x g& b; V3 c8 q //取第一个元素的信息
1 e2 a' v+ ]$ b/ A5 y- p0 d /*+ y: h. |' Q* D+ P! }/ w( Y
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
7 R% v3 ^+ N/ q' B3 y3 e {# }. G4 x. _# T1 H- a* Y0 Q
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);8 y7 \2 B3 c, q$ T0 B" f. }
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
* R$ c9 ?8 o8 H7 Q& G. z( h }2 b6 @7 _2 }1 v+ a$ L3 l
*/' F1 c1 i+ b. @9 E
//////////////////////////////////////////////////////////////////////////1 r$ f% ~/ w/ n
break;
6 u( a, {9 o t, r) b0 ]9 f }
0 g! ~/ {& D' c9 d/ k6 m: d }
' n7 t3 J; }+ _- _! u# {}
* w* \/ u, y) dm_wndMenu.SetVisible(FALSE);
( K: F+ M" g1 d, I: U1 _2 b* t- m- Z% V; J, S. q8 g+ t" L
--------------------------------------------------------------------------------------------------------
3 J9 f! Y5 I, l! E搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)8 w+ g S& O/ F) Y9 d( x
{/ Y- ~; C% d) b% d0 e. x
BaseMouseCursor();
" R- w' ?" ]' j}
+ y( u0 b% i9 a( `+ D% A- j9 E在其下添加:9 B, p2 T, | ]) v3 y
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)9 Q1 \/ U6 i- i4 Z3 c, ]
{2 w. N7 K# e# M7 q4 v# c
m_wndMenu.DeleteAllMenu();
, G& p7 f, c0 j% [& Tm_wndMenu.CreateMenu(this);
P5 n( q. T6 W+ u. lm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");9 a" A/ N" ^ {# p! E3 w7 a, }
5 s6 H. {6 v" [( `5 P. ]$ |! Hif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))5 O' ^, g' C' C+ h: N
{- S. \, H7 }) ]( _" M4 B4 J
//P以上级别才可以删除所有道具
" b# b5 p2 k" S! F' j; l m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
W) @3 N; g1 Q+ @, N}0 B/ _% Q2 n; P' H) `
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );' L+ L; S4 R! _1 i9 N3 B: F6 v
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
- r6 M Z3 Q' K* T$ E2 ?m_wndMenu.SetFocus();3 q$ m/ |% f- r3 c
}* _$ @& W& W& V/ n6 h* S% N
------------------------------------------------------------------------------------------------------------5 s3 L9 g; J7 s0 V% A8 c
*************************
# f7 J$ u2 k& }. b) g5 u8 vWndField.h文件$ C6 v2 D/ x4 k/ V0 X/ u
*************************
5 f. x7 k$ u6 k+ k+ }2 @; M8 r搜索:BOOL m_bReport;" C4 l! P, E6 O# O9 l
其后添加:
2 ^! a3 x+ H n9 HCWndMenu m_wndMenu;
& H( I# ^' D7 T$ G- f) S搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);' z# [- {7 W/ w
其后添加:; \$ [( \0 ?0 Y \) c; d, _- W
virtual void OnRButtonUp(UINT nFlags, CPoint point);
" W/ n# S/ d" H* {4 {$ C! C- a, q" H3 o* X
! ?- o* }/ }" X |
|