|
|
源文件中_Interface文件夹下WndField.cpp文件 K. X1 j. o$ Z# X; f [
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )9 |) b8 P4 u+ I2 j* o: `6 B
2 g2 d3 x& o- k& q: E. l/ d i
struct sItem
) y. C/ S& V2 j" M' o; Y/ Y2 i{' D2 {* a9 H: x' b8 h
DWORD dwId;% {" ?( {3 E8 b; k( e
DWORD dwKind2;2 `1 o+ I+ z/ \1 S
DWORD dwItemId;
. p0 B! E; u3 X$ `, `BYTE nIndex;7 S8 X. r8 X' b9 R
sItem(){
8 W% ^7 B* e: \& J# y+ C2 o* R dwId = dwKind2 = dwItemId = nIndex = 0;5 ^! x* _0 E9 `8 D2 {) W
}
. p* J' r5 {$ g3 Q: j3 x- }bool operator < (const sItem p2)
& H5 f' P+ c- T- N2 D( v u{
+ z6 E a' i1 L$ } if (dwKind2 == p2.dwKind2)3 u& l' P% L/ e: ]
{; d1 p$ h, I v9 Q' S5 w4 ^
return dwItemId < p2.dwItemId;* H& S* I& P' Q3 }) H+ Z
}else{
. V8 W5 T; r/ q! R a6 T return dwKind2 < p2.dwKind2;+ s9 p9 ]1 ~, r: y4 Q: j
}; D- J% ~8 X! v* q6 Q( z
}
/ a- j. P4 n' N+ J4 y* o" P. ?};; v+ j1 u# ]) i. n
class CInventorySort
6 b5 ?* b O5 M2 i{
: x% V% U0 c. b2 Q7 B/ ^ v! h( dpublic:
& e/ v9 y- o2 P7 G+ hCInventorySort(), O! H' Z; b% v
{8 P! \8 l9 d5 Z) q {- p7 I
m_dwPos = 0;
. @& x3 z9 \6 N* `# U% K* y}0 r9 }4 W; Z' S5 Y4 K& j
~CInventorySort(){}. a# X% i! m- y! w* l9 q9 q
private:
; m2 s( }: n; H9 E2 XsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
8 C+ L+ x& G9 B I9 d2 ADWORD m_dwPos;
! W* ]2 Z1 I6 ypublic:; W2 S; o3 ^2 F" h. c& e7 ?7 S
void Add(BYTE nIndex). F+ c2 S8 F+ V
{# f' |1 F: o2 p4 J6 T$ J4 }. c
if (m_dwPos >= MAX_INVENTORY)
# A y# z4 S/ R4 ^ {
5 w( D' n& {; }3 F. `# q return;: I( Z" ] K, o2 b E
}
. \5 |+ I d( F m_Item[m_dwPos].nIndex = nIndex;" L+ L! e' ~8 f: M
m_Item[m_dwPos].dwId = m_dwPos;+ S$ H/ Q% o/ u9 _: f8 ~- N. l m
m_dwPos++;5 n4 C0 z5 U. }7 |2 U& k% y1 T
}
2 @( I/ F; d5 @BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列/ U4 ~$ Z. L5 L N3 j: w
{
0 ~* ~, X5 {" s- G( O for (int i=0;i<MAX_INVENTORY;i++)" S& t) |0 E4 ~$ ^: B& t7 u3 K
{
$ P1 Y& c' D6 P/ _! x r7 @ if (m_Item.dwId == dwId)
! c& R8 x5 X1 \ {
# ~& o: C( [: a( E% ?$ B return m_Item.nIndex;! Q% c+ y) R6 n' X# m2 I- p
}
" B2 f3 {# |$ [( J' p( X6 q- x }* [ n4 a0 {0 Q) F4 g; k
return 255;
* j3 |5 \3 d3 }, c}& e9 `: g) R- O9 I
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置 v: t T m9 Z' `4 E6 T
{
$ @$ z4 H1 I, p3 K8 I+ P3 V BYTE nTmp = 0;
1 I# y- h" x/ m6 ]$ S bool bDest = false,bSrc = false;
0 `- j4 p7 q" x" U) s4 m for (int i=0;i<MAX_INVENTORY;i++): w7 o+ Z4 T/ v6 \8 ~* a$ ^! C; D% I
{
# j+ W) v" j. p4 T2 b if (dwSrcId == m_Item.dwId)
! [$ R3 k6 J/ Q {, G8 u% G. e! K( {) `1 r g
//id相等 则 改变对应的dest和src, G, d* c; k7 ^0 N4 D9 N: z; T6 S4 |
nTmp = m_Item.nIndex;. B: l" a! c0 X% k. ]) N
m_Item.nIndex = dest;
8 _- z/ | h" j }
* y3 j* j" Q7 i }6 }/ L7 |/ c) G) z- N
//临时数据保存完毕,交换开始& k; | y% |9 _
for (int i=0;i<MAX_INVENTORY;i++)
% S* \( s/ C/ [7 N( \5 T" h2 Q {
" ~! {5 T5 h! C: m if (dest == m_Item.nIndex)
; ~% p7 {2 E I6 z" f, M9 \+ ?9 z/ u {
/ c i' h" z7 O4 t. c" I //id相等 则 改变对应的dest和src4 N9 G% F* x! ^& [6 {/ q
m_Item.nIndex = nTmp;
) b1 _0 c# w# M0 N% X' b: j! F) c; B }& T6 p- w% w" ^6 |, l
}
9 e+ u* l! v/ a}; t# L: w. e$ k; U9 B
};5 v7 J0 u7 _/ I" o# G9 j1 \& G7 @' ?
-------------------------------------------------------------------------- O% U0 j$ ^$ A" a, K) R
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
# A$ E3 ~0 s2 t& R* g搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
' g+ A# w! H* J; e紧靠其上添加:- p* q' W0 Z; C1 N
if( pWndBase == &m_wndMenu )
( h1 _5 r: J% j( w{) C7 ^9 G \4 t. T! z
switch( nID )
( w" Z" K, m+ u( p: r {
# b* z0 b }6 _/ {1 T" _9 F: k case 2:
9 e9 Y$ `" r: v$ W, H {1 k! C% e9 a/ C5 e' S0 z8 U$ t
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
4 r6 P$ q, m0 n4 {- z& t if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))( M- k, f, l# ]; V8 W% L1 N5 c% Z0 }
{
: K) s1 n6 U1 i break;
2 k% U' [( ]' W3 x7 v7 G2 G }0 Q* {) v- \2 `8 V- K* ]
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)( |) `* t. ~+ \
{1 A. l" p, P: {: |' P y0 q0 g
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);; ~" v: s0 d$ [ O$ ~
if( !pItemElem ); F S. x8 `4 m% C) l
continue;
8 m. O( a: |9 X: e& [/ E/ I if(pItemElem->GetExtra() > 0)
- N; j Z, i: [ v% Y' G continue; N! R- ?7 C4 z- h
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
5 [5 t+ M* o3 P* E5 R w. A continue;$ Z4 `9 g9 o4 m& U2 b3 f* i8 ^# ]
if( g_pPlayer->IsUsing( pItemElem ) )1 @; y: ~0 F% o G: n0 _
continue;3 p; P6 S* h+ o0 g
if( pItemElem->IsUndestructable() == TRUE )
# c9 n0 t& ^; ]' x, I, B {/ T! P% j, J! R
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
7 ^, w$ D6 D2 ]% n5 L! M7 S continue;) N) K; @ r) l: s
}7 I. n9 |" v* w8 ~0 C
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);, h! q- z) r) V8 w' {2 V P; L
}5 P- @$ a& b6 R8 d0 m/ j0 ]
break;
7 I `! T* c" ?& h! W' s- y6 K. d }% c k: Z3 b% q& b
case 1:! ?, v- U; u3 _! T, j
{* `1 c2 I% d3 K2 C2 ^6 E$ S
//整理背包
9 g, U0 ^! O2 Z% l) S' ? //////////////////////////////////////////////////////////////////////////4 m- z. _& R4 y$ x. H! J
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );6 ?/ R5 v% o5 Y5 l5 U
//////////////////////////////////////////////////////////////////////////
& ]8 Y2 W; y& q- q! L3 { //////////////////////////////////////////////////////////////////////////- {3 Z3 {& Z6 \/ H0 H0 R2 ^
CInventorySort* pInvSort = new CInventorySort;
- @. G8 b/ y) q0 Y; D vector <sItem> vItem;4 M+ X1 z% _: M. `! t
vItem.resize(MAX_INVENTORY);//初始化大小6 i) e: ?& I: R5 ~* E$ W
//////////////////////////////////////////////////////////////////////////
# g4 @0 s6 T' i2 l) w1 @ //填充数据
- C( ~+ x0 E' T( `) \4 \" |- \ for (int i=0;i<MAX_INVENTORY;i++)
+ S+ ]+ n9 L& u" [; \ {* x' l% o( k/ {: G# m
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
; Y9 y" W9 `( b; y- Y if (!pItemElem) o% R, \; R4 S8 O! v8 f& E2 g
{
- l# q$ @: x7 P) E8 }5 ~ vItem.dwKind2 = 0xffffffff;( S3 r, V/ P2 \0 `& m4 I
vItem.dwItemId = 0xffffffff;2 Z9 @. _7 O% L* M$ |3 r
vItem.nIndex = i;8 E4 q6 @2 \/ T" o8 q" J
}else {
- D6 Q2 [( Z3 H. Q- i" v/ z ItemProp* pProp = pItemElem->GetProp();+ o( t' v6 A* K" F
vItem.dwKind2 = pProp->dwItemKind2;% r/ s; F9 b0 ~1 t$ |3 ^, ~. v
vItem.dwItemId = pItemElem->m_dwItemId;
7 ^5 C& }8 i$ F vItem.nIndex = i;5 i7 T; F% _ F {2 B* {6 k
}8 U4 Y. z! H# g5 t" T6 d. O
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
0 n0 b2 [& A9 b1 j- W Z z: {+ o }5 V9 _7 t& y E& w/ o2 j
//////////////////////////////////////////////////////////////////////////3 D! ^% r5 I+ R2 y# f" _# X5 p
sort(vItem.begin(),vItem.end());//排序8 p% X; V& E: ?: M7 H; n
//////////////////////////////////////////////////////////////////////////& N! b3 b0 v# w. @
//交换
: k/ F4 a0 z( f! h0 y8 b for (size_t i=0;i<vItem.size();i++)
+ d4 r: `" }" @. m+ r6 _5 U {
5 e8 O* y9 k3 @2 y7 d/ y //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);# M9 n+ |/ i7 L7 x; f/ o+ U2 W* V; {
pInvSort->Add(vItem.nIndex);
0 e: E$ Z9 f5 l4 ?* |$ i) J( L }9 q$ d6 C, v0 j* i1 {9 `5 X
BYTE nDestPos = 0;
; ]* D6 {4 ?/ ~5 Q for (int i=0;i<MAX_INVENTORY;i++)
1 v& y1 Y2 V4 `9 H/ X Q {7 Y0 o. {: k* u- F' N4 _& F
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
+ f9 o: W6 m& U4 O5 O5 A if (pItemElem), Z3 r. N" ^7 H
{
. o* K4 W/ H3 o5 I- H if (IsUsingItem(pItemElem))
9 |) i. I6 S9 p {# U5 b* S' c, y) Z8 M
//这个位置无法放: y% g$ _- X" G6 X" x: S% `
nDestPos++;3 {4 g+ @6 s- Q) A" E6 l8 g
}
! N# b* k( Q' ~5 p }
0 i. P2 V* w; _+ y' ^7 V) e( R BYTE nSrc = pInvSort->GetItemSrc(i);
- G( u3 d7 w$ B( O5 l0 B+ b+ I pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
7 ~' C3 P, x& _9 \3 _8 Q) ` if (pItemElem)
: K; g3 x' O1 j; f/ i, F; Q( [: N3 ] {. r' P5 {4 \6 v" G. ]& W a
if (IsUsingItem(pItemElem))$ i# c' t3 u+ W
{0 H }: y F* Q. C) d, o% t+ _
//这个道具无法移动,跳过9 |/ @0 T0 ?4 [6 D g, U
continue;4 b( V. c" O& E% u, ?$ ]
}
3 S' o7 @, U. v# } }else{% S( S, h; H6 ~2 q+ |; p6 z ?
//空位置 不用动
) \4 _- E( W: _* V continue;
! C, Z5 ~% Q' {7 |% s' a! P. q }5 k+ Q' U4 S( I2 O
//////////////////////////////////////////////////////////////////////////
" A9 X! r% P* o //开始移动! ]- E7 c' p/ j5 O4 W, n
if (nSrc == nDestPos)
5 f2 A& y$ B! j2 F- { {
4 K* Z6 G) _5 e7 A //原地不动
" K3 X- y" y. Q1 ? nDestPos++;+ I4 Z- m& h' p0 z& Z* i% n9 j# u
continue;
9 J8 g. Z4 r+ E1 }( q! ^ }9 I* t4 b, s! M7 M1 a
pInvSort->MoveItem(i,nDestPos);+ v) s( V5 F+ M
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
, d' s1 n+ K7 O; x7 ?' x4 C# Y3 m Sleep(5);& H0 u v, G3 J7 v* G
//Error("移动 - %d->%d",nSrc,nDestPos);
- A* m. v" {& p: S* ^ nDestPos++;* P) k: I! W: R
}) Y1 f) w8 R9 {; l& k
//取第一个元素的信息6 K/ Z8 ]# P/ i/ O Y" D) S+ h+ n
/*+ E, W$ Q1 \3 i( s
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
! ^! |5 T7 {! T1 F7 X0 O {6 r5 R; Z6 B$ i: f2 `# `' G
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
. N) Y7 T; I$ J, A! @ g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
1 C4 g( s# ?5 w }
% r, s* l* E$ U2 G8 M4 A% I5 e */0 d/ W+ r3 F& t+ o/ G4 K: e
//////////////////////////////////////////////////////////////////////////
% {' i& ^) h0 H7 W. S& V break;
- u6 }6 h8 O. P }- `4 e; m% \1 l0 n) n5 w0 z& a/ s
}
8 h- q( P# g% I: c4 }+ U}. D* S" I8 {+ Q
m_wndMenu.SetVisible(FALSE);
# \# _' F6 L* w1 k" X
# t4 a9 f/ S/ g! F/ h& B5 a* W--------------------------------------------------------------------------------------------------------
4 l$ b6 }* D; O A/ R9 K2 r搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)! U) m6 L# f; \' _: J5 _
{
% u1 j$ m9 V5 Z7 P6 XBaseMouseCursor();0 d0 E Y" a% L6 d& R9 v' f, V9 S
}" L; u) x3 o( }
在其下添加:& X# ^+ z% J; C: z: B9 z
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)5 S" [% G: O* t: ~& i* C$ Q
{' S$ S/ y/ ?" N2 |. O
m_wndMenu.DeleteAllMenu();( t0 j( t5 u( n
m_wndMenu.CreateMenu(this);
: j1 h% t. B6 U7 R; ^( [m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");) \" {0 `+ s+ N- ?6 C8 K
) v1 F+ f6 B# R2 a/ i# w% sif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))2 l0 N. l, Y6 q* h8 o0 l
{2 a8 a. D% E4 N
//P以上级别才可以删除所有道具
/ q3 p8 f# _# e* f+ t8 U$ @8 o m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");* L% d( J2 P" r: a y" |
}
. s! [- M7 w6 t% Am_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );! V( o8 Z' a! P) _/ z
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
2 P2 D, w9 T4 i& t) rm_wndMenu.SetFocus();
5 q `4 k O/ W}
# h5 C2 M# T& C9 F- c. ?, @1 T------------------------------------------------------------------------------------------------------------
( G& O' F0 r* |$ T1 g; X*************************
, R/ |0 ]4 `7 a7 v+ q" ^WndField.h文件
9 _/ w0 Y/ B1 P% z5 S/ D*************************
5 `7 k6 M4 s. p; W5 {搜索:BOOL m_bReport;
7 G/ x4 q# F* s其后添加:
3 P7 a0 ?) x- q# NCWndMenu m_wndMenu;- H5 _ d, F" {4 ?6 f! R
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);$ c6 \ f8 P/ a4 ~) h
其后添加:
- j+ H% h g/ ]5 h) z- dvirtual void OnRButtonUp(UINT nFlags, CPoint point);
' m& X- }9 \1 _- i2 P# u1 T' G! x! B* d. ^7 [/ O
4 V* o I# J( K |
|