|
|
源文件中_Interface文件夹下WndField.cpp文件5 c/ o4 s/ d1 M b" a& k( @" l
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )* ]9 t# N6 V5 B+ l" W' n" J8 Z
: C: _- s& w) }8 H
struct sItem
. y% y) c( C* T( E" a. s: n{
* c& f4 t ^2 j& ADWORD dwId;
. e# _# a5 s7 |4 R! ^DWORD dwKind2;9 B! Q5 n8 X- J
DWORD dwItemId;
" \( \$ {$ m3 G. O _% M1 ?BYTE nIndex;
7 O6 \% O. f* e c7 t, x( }sItem(){' G2 X7 c5 Q8 C6 Z1 G
dwId = dwKind2 = dwItemId = nIndex = 0;
8 O7 Q6 j- ^1 {8 o0 D8 c, V}
9 R* Y6 ?$ U, J- q: W2 _" jbool operator < (const sItem p2), r( O( R! T) U, p5 V; ~
{
8 M* A7 _) l, W7 e5 U& F if (dwKind2 == p2.dwKind2)0 Z0 X# v2 ^2 l5 {. x
{
% F* {' u$ v" D1 {. @/ ~ return dwItemId < p2.dwItemId;5 }5 }, {0 U$ R/ J
}else{* f. x/ ]9 H$ [8 o8 J. v# ^% a
return dwKind2 < p2.dwKind2;+ I% y& f8 i, W3 o* F# a3 u/ V, d/ Q v
}1 ~6 d8 r' U0 l* m4 \( E5 h
}
6 S; z6 z3 Y- p) R, D};/ X) {3 D+ Z$ o# v* F! _
class CInventorySort
+ k" x0 M) L* d9 |5 ~+ @5 A( i! g{
( x; \0 b, x- T5 Cpublic:
! ]7 w8 j( |% e" r5 b: }* aCInventorySort()+ X, p `4 c% h, A: X3 M' U
{" S/ r7 e0 q# h& g1 z. S9 A
m_dwPos = 0;
) ?: H) L- f A& ~3 U0 e; @}
( V+ F- A0 ^$ K" _, g' l* c~CInventorySort(){}/ T' F9 }! r1 S5 b
private:& d3 S4 X8 J; w- P
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息5 v4 k& T9 |; {* j. B- g' H. [4 F
DWORD m_dwPos;
* |5 J, p3 A3 l* |3 Z$ T! ]public: J. C$ j8 V, @, Y# o0 S u H
void Add(BYTE nIndex)
4 Q- `9 S9 b, W/ Y8 n8 X{
7 ]5 k( b4 F- a+ `1 ` if (m_dwPos >= MAX_INVENTORY)
4 Y4 {+ O$ g0 x {
( A# f. x* d# A g# J' M% w- e return;& o2 Y* N7 T( T$ ^' n& r
}7 y1 O. S7 q2 ]- C) x
m_Item[m_dwPos].nIndex = nIndex;/ h- c+ o3 C# G
m_Item[m_dwPos].dwId = m_dwPos;
1 H7 ^4 R+ ? R1 j# m m_dwPos++;( \; I( I8 k4 W) o/ ~. c. U W
}* b. P% s1 s+ h) p5 S
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列1 n8 H$ n6 [: c. B
{
( H5 K, i6 u# p/ I for (int i=0;i<MAX_INVENTORY;i++)2 G- z2 A& x. S7 F) i$ g
{
9 E# a, O8 z2 u if (m_Item.dwId == dwId)9 B1 ~2 H# N% [" `
{
7 {# Y/ S C+ G# T1 W" Z+ _( r return m_Item.nIndex;
1 ?* e: d# l1 R" r1 m4 P) E }; K& ~; F& ~7 g ?5 d- I3 _
}
( S) Z( n( _# R. O k/ x return 255;$ V( m7 t+ }7 _" @& H
}0 d; X( `3 o; \! n1 ~# m+ I( A
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置, r1 D, l/ B( D% C( F
{0 c6 U, h+ p ~) U3 m2 o/ |
BYTE nTmp = 0;
( m+ N" ]& P: @$ l5 ^7 G, ]3 R bool bDest = false,bSrc = false;
" H: n( e0 R! A$ ?; _ for (int i=0;i<MAX_INVENTORY;i++)! O3 {$ b9 x7 I
{
* {3 j* q7 Y( T# H( Z0 ^- O' B if (dwSrcId == m_Item.dwId)
; |% x$ H6 h8 ^ {( F, l" j* t) O4 ~
//id相等 则 改变对应的dest和src' I3 r* y, S6 f7 z' a! u4 X
nTmp = m_Item.nIndex;* s8 ?6 s2 A! r' R M2 K U' K
m_Item.nIndex = dest;& B7 w7 C1 X3 C: H9 A5 r
}
( u5 o. R4 ?* H2 {. S& F8 j+ [8 h }* J- D+ p6 h% F: c
//临时数据保存完毕,交换开始
# N0 J9 U+ L+ a0 t for (int i=0;i<MAX_INVENTORY;i++)
2 m2 z; _3 E' a0 Y% ]0 b4 n {3 e: q6 @1 Y7 F# Z+ }) X
if (dest == m_Item.nIndex)
( p8 {2 I. r0 c# z1 N! } {
$ ~" F6 ?! M2 g5 C //id相等 则 改变对应的dest和src
) ]. f( W' O8 [ V, q* J m_Item.nIndex = nTmp;
$ E P4 `* f% K. V1 E, q }
) E& H& Q: F" E3 Q2 b6 V! y% z }
' I3 f! |$ _% c' M! {5 B$ H}
- o4 ` s6 [( [5 K* E" T* r};
# A1 n* Q- g4 h# }7 a1 p; H-------------------------------------------------------------------------
1 I3 d. l* l5 l5 ]& F: b依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
; x; {" X$ R2 g6 w) r搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);; a# R3 h& X- J( [
紧靠其上添加:+ U: a8 M$ N0 W6 f; t; `* A
if( pWndBase == &m_wndMenu )6 i/ b, b7 P8 v$ y1 A$ ]1 U
{
7 ^0 E5 ]: u4 |. Q) x, \ switch( nID )1 a2 p) F- U1 y' X1 Y, { m, `* D
{
?* U b8 R% _$ M8 G case 2:6 [$ |; b* T7 r# Y! u
{6 H) @8 |9 g" l1 q( k _+ W
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
9 e' z7 J& ]9 i+ f if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))9 N% t+ {& h2 D( i' ^- X1 w
{
; T' m" k+ ^* r& ?6 f; Y u break;& X0 ~- c9 x: [8 F4 \. g
}
m% j* m+ x1 f# g3 G4 Y9 \( V7 n for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
4 a, Y" f( v/ v2 T" E8 k+ j/ W+ v; G0 ] {% w0 P- u, H; d$ D
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i); E5 a. O* H: w% r0 y
if( !pItemElem )( L3 n. {3 F' T+ D
continue;
1 i( k. M$ O; s( H( h if(pItemElem->GetExtra() > 0)0 ^. p3 T: M. W9 r2 N
continue;
' N3 }3 B7 Q0 V' ?& c if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ( D w& q3 M5 Q$ Q# [5 s
continue;5 m$ f6 z; J( ]/ x. {% @
if( g_pPlayer->IsUsing( pItemElem ) )4 S6 S& _1 f: ^$ Z
continue;
9 h. R+ A( z5 s if( pItemElem->IsUndestructable() == TRUE )
. ]; g+ O% a8 S { {
2 G0 N2 U( q. K h( F2 N7 Y g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
( I/ Y- E$ x" ~( d continue;! e+ X9 q1 Z2 e( X* r& _. `; v
}
, W* c) a7 ~( C0 C$ q4 s' J g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);6 b) B6 }, R# O4 _
}
7 Q- M1 R, H& R break;+ f4 Y1 g- c. _" h' H9 r, C8 f. |
}/ m9 [8 \8 `* ?3 s
case 1:4 L1 j9 P( H0 j& C
{, a3 E8 D, Y0 \& K
//整理背包6 h$ N" C+ ?, B
//////////////////////////////////////////////////////////////////////////6 P; C' D. B: K
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );# c! l6 R2 t4 Q6 T: X
//////////////////////////////////////////////////////////////////////////! g7 n& w. G2 a9 n$ d. F( ]
//////////////////////////////////////////////////////////////////////////" T6 U6 i: s S7 V7 Q' A
CInventorySort* pInvSort = new CInventorySort;
0 o- a9 J9 ~! T$ R vector <sItem> vItem;* b3 {$ b6 p) W& v; b' A
vItem.resize(MAX_INVENTORY);//初始化大小& v/ J6 s& A. `4 C4 Q4 s
//////////////////////////////////////////////////////////////////////////0 N8 V5 S, Y; y# P
//填充数据# P" j% n- a5 I2 w8 o0 b) f
for (int i=0;i<MAX_INVENTORY;i++)7 M7 L; S9 ?* n* k+ \, s
{# b" Z/ ~+ o' ]$ h, N7 F
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);% Y6 Q$ h0 l) b- u
if (!pItemElem)
. Q! x+ y" F- G3 Y {1 C$ v K" q: |$ Y9 P& Z* O
vItem.dwKind2 = 0xffffffff; }8 R' E# F5 r
vItem.dwItemId = 0xffffffff;
- y) R4 d: @. d# J, T% D vItem.nIndex = i;
& g% ]( B: d$ ~ }else {
6 \: W4 ^( o" B) O* y' h ItemProp* pProp = pItemElem->GetProp();
# P8 U T3 |0 F) Y. ^: Z vItem.dwKind2 = pProp->dwItemKind2;4 [% M7 E- t3 x- {5 }
vItem.dwItemId = pItemElem->m_dwItemId;
; S3 ?! x$ l+ B+ P& G: H. v vItem.nIndex = i;
& u) R b+ o; w8 w0 o- a! z0 \2 r }2 M$ ] Q/ ~! T6 s4 v- K) j4 {
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
6 O* P9 G" H" C }
; f7 i- z, M6 o& R! a- L" { //////////////////////////////////////////////////////////////////////////, p3 R5 u. K. S* C0 X5 [, _- g5 H
sort(vItem.begin(),vItem.end());//排序7 P" {( k# i9 V$ y1 K
////////////////////////////////////////////////////////////////////////// E8 C7 ]' w$ \1 ]5 X8 F
//交换. R# r3 G, a9 I- J' u% h1 z1 N( e
for (size_t i=0;i<vItem.size();i++)
# y; ^# H" Q* r1 b4 p- M {
: O! O ~- Y8 w$ {' m | //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
, j! }+ N+ Y& Y: N. H/ i. C( F+ @# z5 s pInvSort->Add(vItem.nIndex);* R1 w# {; x; K- ~7 B5 R# x
}
/ ?5 A' Z8 t8 X BYTE nDestPos = 0;
" Z: ^* v) m+ O/ V7 n) C" |2 L for (int i=0;i<MAX_INVENTORY;i++)
$ Y( E+ v' {" D2 N {
7 A% K4 M' d9 N, i3 U( A0 R6 ~0 B CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);+ d5 ]6 A# u- f- S, G( Q
if (pItemElem)" ?1 d. q# V1 a7 n9 k
{0 v2 g$ _3 W/ U* Z$ q6 q) D; K" j$ i
if (IsUsingItem(pItemElem))
3 [ M1 B; @: O7 ?/ I- c {5 @7 {7 g. }) K. Z( o, U/ r
//这个位置无法放
' P6 Y6 u# H$ h nDestPos++;# U+ g3 d1 p- [" W
}
* T0 m. @8 z7 [5 f" H" v: n }
6 I9 Z. e9 L: W% U- @! p BYTE nSrc = pInvSort->GetItemSrc(i);
1 \1 o6 [9 f. q3 u) A9 M; t7 {% K- q pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
& q& X9 r f( m# ~0 |0 a6 e0 b if (pItemElem)# r, |3 C7 x- o) B; J5 t- A
{
. r& P) V8 k1 V8 ?* H if (IsUsingItem(pItemElem))
- c5 b$ M9 \: @* E8 [' e6 O {
% m- V% y% Y, F; v- x8 R ` //这个道具无法移动,跳过% T; s: H8 Y& M7 ?- `
continue;
T2 K. c w5 q+ P8 o, M/ ? }( g, S$ ]" _* O
}else{
5 ?$ z& T, V6 {& x //空位置 不用动
3 m7 d4 U9 l" v# ?! O2 D( M continue;
0 I# h' n+ ^% a/ w }: A# r; S+ d. w' |
//////////////////////////////////////////////////////////////////////////
, d2 m! s6 {" j) C4 h //开始移动
$ j% c0 D" E2 u! X* { l2 D0 `2 e if (nSrc == nDestPos)+ \$ | B- \ V) b$ R- G& n
{( `/ f8 O. s% E3 W' m
//原地不动, [- k6 [. a$ W7 V$ i
nDestPos++;
4 Y; {- S7 E! } continue; T8 \# l0 x" o8 s
}2 J4 V$ p6 I# `) ^$ o4 _ B
pInvSort->MoveItem(i,nDestPos);0 y8 |9 }4 z( A3 u% g k* @: V
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
$ O: H/ z: _! d3 i Sleep(5);
^5 U' u A# w9 |5 ] //Error("移动 - %d->%d",nSrc,nDestPos);4 k3 B/ G5 Z( m0 K/ H9 ?6 ]
nDestPos++;( t3 r( z1 m: m% z" w
}. @) u1 g B) K
//取第一个元素的信息! E2 ^, v$ C) l6 z( d
/*9 @9 Z8 [- m; M2 I% S, `
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)6 `8 t! L2 B! |
{! v! F$ d3 _. i7 c
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);! Q, @+ I K4 F; w0 T5 ?- K
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);# d4 W8 \' F7 l- W0 E4 e! _& Y
}
+ T; E. ~6 j; B5 e: ` */# {3 Q3 d8 A6 Z6 d9 a# X# C* F& G
//////////////////////////////////////////////////////////////////////////
7 O- ?' c5 C) y- L$ R: }! | break;
$ c) c* S. [ [. j }
9 x" Q, l! Y( Z, ]1 r2 X } , X. v% W) C6 e! J
}) y% p4 R2 W3 j5 L2 U
m_wndMenu.SetVisible(FALSE);2 p! Z4 G4 v( s/ S9 S
' \0 J- M. w, @--------------------------------------------------------------------------------------------------------4 \, W9 V* f) ~+ {# \
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)* ], k: E+ }, L( I3 `
{5 Q, q$ c; y- K8 ]7 P
BaseMouseCursor();
# f5 L/ q( I3 j, ?& o. s$ i/ u h}% T+ t: {0 q' ^2 {
在其下添加:" j5 O6 J5 {/ S4 @: f$ b: l
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point). c& E" |% J8 C8 T5 f* O. z
{8 t' E# \1 ^3 K5 V% K
m_wndMenu.DeleteAllMenu();* L0 v5 Z& z' T! C( F! M
m_wndMenu.CreateMenu(this);
' ^* k9 f( t6 `8 Y' Z+ N) I/ d6 dm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
: ]$ b ^0 r/ @0 P- @+ n$ F* u, X
1 H9 Q1 q1 |8 t3 [/ vif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
+ q- A0 q" d" @2 F0 X{
' t/ n6 e, j' u! J //P以上级别才可以删除所有道具8 c% A A, L) r/ [, s8 s c* v
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");( v( h7 D$ U* E* t2 ]% W7 N
}1 s) J- d& h# E. e0 W0 ?( K
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );/ x2 c. Q$ Z6 a: p8 @
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
& d7 G/ _) Z& s6 x3 Lm_wndMenu.SetFocus();$ r' N" s; O% V5 A
}
( s, \) T' {0 l) d. h2 j+ V------------------------------------------------------------------------------------------------------------$ T# C8 y( {: O: ]3 n
*************************
. Q, {& D+ ~* I3 i. t" DWndField.h文件
( G+ d/ H1 O4 ^*************************
2 v: W# x' U; J, q* A1 c8 u搜索:BOOL m_bReport;
! Y! Q' e( v& W' _6 ~( l% E1 X其后添加:
. |/ B/ z$ U/ e6 P7 y( h7 O7 qCWndMenu m_wndMenu;
/ c9 |' L3 I7 Y( \2 y5 @搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);% v% y1 z0 O( o% f- C
其后添加:
0 r) |6 N; G; E! f( V9 dvirtual void OnRButtonUp(UINT nFlags, CPoint point);1 W4 ]& v: i+ a" h6 K
) l3 v: B N& Q$ u; U
2 U3 r+ I- D' o, l
|
|