|
|
源文件中_Interface文件夹下WndField.cpp文件: _/ u+ Z% D* I. ?& S5 c) K
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
- ^8 }1 B% J5 G+ C- y$ w- T+ B6 j4 n9 _) E- a1 n/ G
struct sItem
1 _; [$ u) [+ H; C3 y: {{7 \1 \, y* L) j; F) H. ?
DWORD dwId;$ F! u! z9 _8 r4 @" C: \
DWORD dwKind2;' O) R$ a1 U: G/ b3 C
DWORD dwItemId;( t* B' T6 T. o+ l' T. H
BYTE nIndex;
, N, J7 a, k1 v2 Y( WsItem(){3 \( E( b: F" d3 ]
dwId = dwKind2 = dwItemId = nIndex = 0;
) t& C/ G! Z; @, a8 O2 P/ K0 r, Y}& @1 i# }; ~% u+ F
bool operator < (const sItem p2)2 R1 q$ v C" N
{) }7 f( y4 K$ q( }5 `& d
if (dwKind2 == p2.dwKind2)1 J; H# {- O" q5 |, I4 l7 v9 q
{
8 s- h- p( |- }8 S! s, } return dwItemId < p2.dwItemId;
2 e8 L) o6 W% E) U! x$ l }else{
4 M( m9 @4 p& Y9 G return dwKind2 < p2.dwKind2;
( Q) x; }% n7 S3 s }
% u0 C8 y7 C+ g: ?2 U" ?}
1 G: Y M8 K; v! [9 Z; B};4 m3 e) V; h7 \
class CInventorySort+ r/ |% ]6 l$ f# e; f% ^
{3 }- r/ h# g6 f) {
public:
' e% F, M: y. I! z; w, K3 o. zCInventorySort()
% w" v G* U. k) n0 h! d) [1 x{$ W6 m5 u! W& h3 u# L% c8 C. }8 U
m_dwPos = 0;# K7 z5 |) h/ N, k A, Q7 s% U N
}
+ Z( h( i8 y5 R& n" ~7 J~CInventorySort(){}- c1 G4 B* b$ U6 e/ W" p( M
private:
/ _5 i9 ^2 U( N3 ]) Q( `sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
1 v# j0 C* O1 ]+ u0 B+ K2 sDWORD m_dwPos;
/ D6 [6 \# c5 [* P$ Wpublic:( d* V$ c; b g, D; N
void Add(BYTE nIndex)
2 o+ i1 v7 F1 Y) q$ r{# y( o0 j& _: O
if (m_dwPos >= MAX_INVENTORY)2 A- [/ X$ F, M+ ?" L: n2 j
{
* v! I7 R6 u/ f# Z9 T6 [- z return;% F* \" {0 V! P" y+ x# b0 B C0 M! @
}! [5 T9 `3 I1 g
m_Item[m_dwPos].nIndex = nIndex;9 O; m, O9 f# }4 e
m_Item[m_dwPos].dwId = m_dwPos; F& ~* ~. I# k3 ~1 s5 e
m_dwPos++;
! `- j& l! S( v$ F0 G- Y* a5 k+ |}
' K" O, u( h# y3 y9 ]8 ? }BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
! l% P0 D, S& d. c{( z9 H h6 W! y& f! C. r
for (int i=0;i<MAX_INVENTORY;i++)
B* x5 g) {; c& c/ B! w {/ W; a& p4 z( g1 H
if (m_Item.dwId == dwId)5 P" }# n4 U" m# W) Q, |( ^$ j
{1 z: d, _4 }" F% M) E! S
return m_Item.nIndex;* C* R- P; V3 p3 D) D
}
/ P( S s5 J9 c7 O$ ?/ r } k X$ R; K$ n4 B3 [4 b
return 255;
( K+ C- {$ N/ X+ z0 f" D) k}
. D! e8 y9 l, wvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
+ t" Y, Q# Q9 u* X5 o% D) u{4 ~# F9 [4 U# ~
BYTE nTmp = 0;( k: p* L W7 J, E4 s3 z
bool bDest = false,bSrc = false;/ B, c7 a8 M- C' C
for (int i=0;i<MAX_INVENTORY;i++)
2 l3 q2 l! N0 m {" y8 e" H! w @
if (dwSrcId == m_Item.dwId)
8 |* W# R" E$ n3 N& ~( [* z {
! h" l! E* O- p" B //id相等 则 改变对应的dest和src
g& I* ~( U4 T% v% m# D nTmp = m_Item.nIndex;
7 Q2 b( e F3 G# `, n m_Item.nIndex = dest;% \, l) v- n% ?. a6 N# O9 v
}1 I- j8 a1 z2 A1 D+ e8 Y [ t
}; x* F$ K. l/ j0 Z. }5 R
//临时数据保存完毕,交换开始. F1 U$ M7 u7 a' E
for (int i=0;i<MAX_INVENTORY;i++)
7 y! z% g" |. \. k& A- f {
! J; H5 W/ y5 A% x8 u4 Q# K if (dest == m_Item.nIndex). u7 e" z5 C" Q0 t- l1 z
{9 p5 N1 t8 {9 H- U" t. B! y
//id相等 则 改变对应的dest和src3 p# h! ~2 t3 k+ K3 A
m_Item.nIndex = nTmp;
' u+ P5 T+ v: Y! i: ` }
: u1 L% h6 f5 \: I3 o9 O }0 [9 N0 ~. l. @$ k( ?6 A
}
" P% p; g2 S! l8 |( `' U};/ l/ K5 ^. k; I. s6 N0 M6 ]
-------------------------------------------------------------------------2 {. b$ L: I+ Z
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )# s+ k: o P/ ~1 [
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
1 j' b, x6 T0 I+ b2 N紧靠其上添加:
+ U5 z8 E; _' }9 w; V8 W r8 Nif( pWndBase == &m_wndMenu )# W& V$ b1 u& k- a) t
{
/ T- p7 K$ D! _" y switch( nID )& W, n* `) S& x2 I) U$ K4 G* i8 }
{
& c$ |) `8 L: A+ b case 2:/ b$ i+ S0 v9 G8 K
{9 a/ o- D( A) }" [1 o: P; q7 G
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
6 K, ]- C. h/ z- S9 I) ^9 U4 Y if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))1 X4 X2 E. ]" r, x
{: f6 W* H. u% M* Z
break;
7 u6 F4 X: O3 L6 k% O }
. z. ?2 y" e0 |$ ?# p) S2 t for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
; H0 Y( M6 n/ ^* g j {4 o" n, T( d% C
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
7 [+ r- q! j" W* k% L$ H( f if( !pItemElem )
) O3 m0 y7 Q5 E( d: c. t* W6 \ continue;/ D5 F: ^2 j% x5 ]
if(pItemElem->GetExtra() > 0)7 @1 D3 W$ [6 y8 S8 p1 }
continue;% M7 Y8 B/ p7 q
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ; y9 ]: c) [7 G
continue;5 X0 k! f6 j8 d/ L( n
if( g_pPlayer->IsUsing( pItemElem ) )
% G& e- k7 W6 N; n& a9 i2 n continue;) n6 M" W# O0 D( v+ D' |5 q" O
if( pItemElem->IsUndestructable() == TRUE )6 t. P. x4 I* a
{, ` h, S6 T1 S0 i P% X
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );' j* C: T [% z2 q
continue;
4 |" o5 e1 A$ o0 \1 [% z }. f- H9 r+ J3 m3 w2 @
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);* F- O. k4 G# D, x8 c
}
8 |8 B& a+ n2 A0 t7 E8 i: J3 c. e break;# _4 q# h7 m: U1 U) t1 F
}" s; l! _% P" ~( z
case 1:
! u1 j3 c3 E v6 p {# O1 a4 X1 |1 u- y
//整理背包2 ~' r- Z1 N3 S9 z1 O% W2 b, T9 m' l. b
/////////////////////////////////////////////////////////////////////////// `; E: q7 v# U& r: v# w5 D% l8 j2 h4 }
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) ); i- d! N4 e. o% U- _8 J
//////////////////////////////////////////////////////////////////////////
5 a3 w9 {! e8 T5 G //////////////////////////////////////////////////////////////////////////4 q% L( M4 M* c% ?
CInventorySort* pInvSort = new CInventorySort;! T6 T1 C7 S7 {2 j$ B
vector <sItem> vItem;
( v/ b5 e: i% q6 R vItem.resize(MAX_INVENTORY);//初始化大小
; s$ w4 R( _5 Q5 i. @+ t+ E //////////////////////////////////////////////////////////////////////////5 D% d& b |) s5 e; g% [
//填充数据7 H Z5 _4 }% l2 d" `4 A
for (int i=0;i<MAX_INVENTORY;i++)2 E( c- C7 {1 o! O( M
{' r% d! }( K5 {& z
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
9 N1 M' Y4 j! L& I2 X4 Y if (!pItemElem)
) q5 o# w0 j8 z- v+ u {; R7 v1 D5 {+ r/ k, \4 G0 ?) Y
vItem.dwKind2 = 0xffffffff;
+ e! d% |1 ]* F7 @$ T vItem.dwItemId = 0xffffffff;
2 W6 C3 B9 j) e. k* @! D vItem.nIndex = i;
1 i8 l8 }8 g( t% c4 ^+ C: n }else {
& M& f2 |' V9 g! c: s ItemProp* pProp = pItemElem->GetProp();
0 J% Z+ J/ z2 f vItem.dwKind2 = pProp->dwItemKind2;% B! o9 {% @: P q/ p7 F# {: Y
vItem.dwItemId = pItemElem->m_dwItemId;7 a( v1 a- F6 O
vItem.nIndex = i;
, m* H* j; G0 d! P }0 [1 t3 o0 K5 F" Q* h
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);3 C" f) H6 B. _- P! {* I
}
& E( L. u( U) |$ b; ~$ Z7 I; }* P //////////////////////////////////////////////////////////////////////////
% z4 T0 ?4 q" W$ }2 y' ] sort(vItem.begin(),vItem.end());//排序
) e ]0 B) R# \: w- U /////////////////////////////////////////////////////////////////////////// k" y! ?+ D0 R
//交换
7 m( T; c( w) b. k7 o6 |& O0 |9 r for (size_t i=0;i<vItem.size();i++)
, t+ g6 D$ z4 q6 y* c- n {2 g# F1 k+ B' L) k$ D$ N
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);) B# [, N* I, a/ W6 j4 K& R1 j
pInvSort->Add(vItem.nIndex);
; G9 c5 Q6 R% r6 {* }& F }+ e+ V: |. O( m- Y8 |& ?. Y) z
BYTE nDestPos = 0;
9 J7 i6 H. N; H) ? for (int i=0;i<MAX_INVENTORY;i++)
: f- R' C3 p1 } {8 I3 G k4 X3 Y9 U
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);! P c. q4 o% P8 m8 b$ ~: L
if (pItemElem)4 E8 O& v8 A, |$ c R" ~) V
{) H0 w/ t6 ~ J2 H4 `4 r4 z C+ N
if (IsUsingItem(pItemElem))# U1 h, l$ X2 x1 B, F. x% V; W) \
{
+ e# B( \2 v6 K/ y5 }; h //这个位置无法放
: u# \- K+ p" B9 m$ a1 W nDestPos++;/ {) \" z4 f$ c$ b0 P a
}
; N+ r9 U* @; T6 \ }
6 \8 ^8 Z$ b) d$ @ S7 c$ h BYTE nSrc = pInvSort->GetItemSrc(i);- U3 [) M* @( Z: ]3 k. w
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);6 g" [1 F/ x) C
if (pItemElem)
, y* t+ N4 T2 e( W' k {
- [: j" r# M' j& ^% v2 b. h if (IsUsingItem(pItemElem))
/ p) m' m" |9 {& _; U' G# Z {
5 l# q( d0 ?9 B9 |5 B( j- X% u/ ? //这个道具无法移动,跳过
, r# n' \( q3 [* V2 [4 N continue;
7 {+ V3 H3 W# U }- S5 a, B8 \# v9 Y8 c! Y; e4 W$ q
}else{
$ ~; V% N' X; \6 U) c% h- } //空位置 不用动
# l9 ]# u; I5 Z6 S$ w continue;
8 Z8 e' m1 d9 t2 X: x }: D0 U, B K' J
//////////////////////////////////////////////////////////////////////////
# K3 i6 I- m8 M( ~) b& }/ b: b //开始移动
3 H9 ?* V& A j( _4 T5 E0 W if (nSrc == nDestPos)& o% t; k/ A" ^1 d4 m' ]
{0 j% O; x" X" V1 D6 S* }
//原地不动- k7 n7 h8 c- b
nDestPos++;$ U; G5 u2 j0 U2 V' Y
continue;9 \! _% [6 b! G. @- [, A1 _2 p
}
8 X) I" |6 a7 }* j pInvSort->MoveItem(i,nDestPos);& g8 V/ r3 x; [& B
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
& i) }) @) G L" v1 `! ?, @& B7 j Sleep(5);' E* R3 u' H- x% ?1 R5 Y3 c
//Error("移动 - %d->%d",nSrc,nDestPos);& _1 Z5 Z5 ?: @/ N3 m
nDestPos++;5 s( V! P) M5 P7 ^* F: h
}
# T5 t7 O2 b1 D //取第一个元素的信息
- u9 q- i; z% e5 }: {+ `# E /*: k7 T7 e) n$ r7 S7 T# |2 n
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)3 N9 a8 |8 D, L4 O% x
{1 E* y+ u) q" z2 W
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);, s U6 V- _6 j( X8 N* W# U
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);; R9 `3 b. }6 _4 t) N8 C( W. z% V
}* p4 H# v1 V: s: m, {
*/
4 u# g' d. ?9 Q/ E& [, x //////////////////////////////////////////////////////////////////////////7 ?- @8 t+ A( i9 s: b
break;
9 n3 J5 t! q0 i3 u/ z' I }
8 z# w/ ^! u$ ^ } 8 M1 }1 V8 @: V3 C( o1 j- I
}( y: g4 ~0 N) l0 ^
m_wndMenu.SetVisible(FALSE);4 n, X; L- _- y. k
) D: E( w, e, r( m4 g+ |--------------------------------------------------------------------------------------------------------
8 s+ g7 t1 o) Q3 K8 R搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
, ~2 w; P) F, X" w{ M( B r; L) O, [ [+ `
BaseMouseCursor();# V2 n, A8 U @* w& r' p+ {* t% t
}% ` P( W+ m! A/ c0 b7 b/ j
在其下添加:8 [# @+ ~- M* I& ]/ R
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)$ v7 d o; L; I) w
{5 A$ U: l* l* t$ t$ n" \
m_wndMenu.DeleteAllMenu();
) b& i3 o0 v% ym_wndMenu.CreateMenu(this);9 m) l+ B) X8 h
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");4 F i. Z% O+ F5 `6 E( h9 S
0 g/ @ O0 q; Z( O; u
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))7 t, |2 Y2 y) L$ a# ~3 z; K3 a
{
; h4 u) m( E" Y3 o6 O8 |& Y* ] //P以上级别才可以删除所有道具
5 b4 u% u' f. a m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
' d! w6 N) u9 Y" ]' x+ u}; b0 W$ q4 s: I* q
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
# W+ d. e2 a6 u! q: o* s2 b$ V; n7 Dm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );, O3 |0 H/ t6 [9 x
m_wndMenu.SetFocus();8 }' D0 k1 x1 d8 a. w0 V
}
& E7 E' c3 v' l------------------------------------------------------------------------------------------------------------
) m. [7 Q% a5 `*************************- E$ c, `8 h- a/ V: d
WndField.h文件( U! Q, c5 C. U; @' U
*************************# E0 W; `- L" z& S& J
搜索:BOOL m_bReport;
) ~ q) c3 L e$ [+ Y% x8 b' j$ ?* Z其后添加:! o6 B; L' X. `' M
CWndMenu m_wndMenu;
& u! }( p; A3 G8 h& `! B搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);. P4 H- u! _6 X; h- p% p, Q/ k& }
其后添加:
9 v4 {2 T( ]1 s* ?2 y. b9 Zvirtual void OnRButtonUp(UINT nFlags, CPoint point); d4 ]8 s1 Z* H& z
# ?! y. ?4 M2 F+ f5 ?8 V7 ^! ?. l) P
|
|