|
|
源文件中_Interface文件夹下WndField.cpp文件6 O9 r" i. U) f( B# S3 a
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
0 r2 i7 @# ]; _6 t! b+ Q
7 J& Q! ]' q$ L \! w \struct sItem/ |8 p0 d6 k7 [# b
{
- L' d2 Z8 t6 w% ^* {DWORD dwId;$ x( t& W: h2 X J5 e0 A
DWORD dwKind2;) u1 e0 ?8 [& }; g: U) X" C
DWORD dwItemId;
, o# G1 z, H& l( S; f! q7 `BYTE nIndex;+ A* Z" ` f3 w+ p$ J) N
sItem(){' }0 n1 ~0 c# C2 E
dwId = dwKind2 = dwItemId = nIndex = 0;
4 X0 n1 U. U, g, f1 w6 k- @}& p! {$ \; d, q$ Y) r2 J
bool operator < (const sItem p2)
- p2 J, b1 L- G+ U! i& S{- m+ g9 [) W6 d
if (dwKind2 == p2.dwKind2)
; M5 Z, t- Q9 `2 }7 s {' A8 J; G; p& f- P+ X, F, Z
return dwItemId < p2.dwItemId;
! C+ H. ~7 ~! C }else{, J2 i4 n9 X' l: ]) f1 f
return dwKind2 < p2.dwKind2;" W2 _" G: K" w4 t) D, {" y: [+ e
}
' X. s% H7 R6 z. ]9 ^: U h}
) _0 N) n0 J' w" e! H1 O4 e$ ~5 ~};6 F9 ~8 x$ {5 M% }
class CInventorySort
9 J, z. D* u. \$ e2 U2 s7 ^{
5 Z3 K5 X/ @- V# bpublic:' B {9 Q! }0 D: f
CInventorySort()
7 {! G$ ]7 J- a{1 w. t: U/ J0 {* h
m_dwPos = 0;8 k- M; y9 R$ i) z& t0 ^7 b. u
}* n- \. x+ W, ^5 G* o$ g0 i$ J$ t
~CInventorySort(){}
- A9 |- ]3 r; n; g" v/ q: J7 j; c; l! Yprivate:8 a; k5 \. L0 b% y e5 B
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
/ ~* _# u6 @! N2 \4 ^6 N) E8 |DWORD m_dwPos;0 P- a% k5 K2 y" g: K4 J
public:1 G7 P, E: @5 A, Z- }3 H8 t
void Add(BYTE nIndex)
" \" t% j$ g4 K{
- N5 J& K! F7 D4 ` if (m_dwPos >= MAX_INVENTORY)
8 G3 t& v( s+ e! ^5 V {
9 i5 ]: J5 q+ A" b; @" [ return;
3 {8 g. o- b) i }7 I. U" ] f) y
m_Item[m_dwPos].nIndex = nIndex;/ P; Y0 B+ O1 f0 t
m_Item[m_dwPos].dwId = m_dwPos;
) h- |, z- B& O m_dwPos++;
4 o! i% F& Z) i W+ a( ]* d}5 r* v! Q2 ^- X, e- T7 H
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
3 R5 [) o7 z% \$ \; A1 N{
5 G1 [5 \; m y# G6 k for (int i=0;i<MAX_INVENTORY;i++)6 c# }7 |+ u8 A
{ g/ t3 o; u% Y: N' A1 B
if (m_Item.dwId == dwId)
3 u" L% U' |6 M0 H- ^ {* M+ N9 |8 `% Z4 m% ` ]* b; B2 f
return m_Item.nIndex;- F/ V4 ^, n& s# i
}/ z+ S+ G! @2 a6 ?
}
/ d- m; U) ~" G$ ]- R" _, p# X return 255;0 V9 ~ l. D7 r; w# S6 u) z8 L
}
0 J; Z J; K2 I0 f: u9 Nvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置6 A9 |. B& e7 f+ S. U9 ^4 `0 } F
{
9 A; U! C3 j! Q. A& y BYTE nTmp = 0;
1 _6 s8 a; e8 P9 _( d3 J bool bDest = false,bSrc = false;; w3 N9 K: P+ V" x4 i
for (int i=0;i<MAX_INVENTORY;i++)
3 G2 T D5 x7 F( N& Q [ {- e( x# z% q) o4 b8 d% {) ^/ m9 E" S. p
if (dwSrcId == m_Item.dwId)! f, E A$ k$ t8 J9 {( _
{- v/ V- @8 e) h
//id相等 则 改变对应的dest和src% D3 }9 ^( l$ }: \5 }
nTmp = m_Item.nIndex;+ _9 x1 R- w3 N9 R1 M
m_Item.nIndex = dest;: I' r; L- ^5 I: s! `) | `
}
( N) j2 f; w& \1 m4 o# }$ L# Z }
1 e0 W- b: ~) S6 o. v; p. i# f. W //临时数据保存完毕,交换开始0 H; ?% @, w2 R0 U
for (int i=0;i<MAX_INVENTORY;i++)* ?% k3 N* p0 r; G4 `( F
{
; z3 ^% d4 s% u1 N, [# B. e- j if (dest == m_Item.nIndex)# t7 J# \, j0 @9 d
{, q, b; e2 n) }
//id相等 则 改变对应的dest和src
) R0 g. v+ j' @- Q- Q m_Item.nIndex = nTmp;: Q# Z# d) j7 U& c, O9 q
}# h/ m$ L. ], s0 C5 c$ T5 N) x
}4 f) w+ ]( z1 A) n
}
* F7 H% P3 V/ c6 B7 K};' l: ^6 y- M/ E2 c7 X
-------------------------------------------------------------------------. q1 k+ ~" j8 P# D! z6 U
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ). |# k% X% a3 y1 [ x1 l
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
& q1 z: t. a {* i" P6 V紧靠其上添加:
$ I, p$ U6 `1 @* `' V" m2 gif( pWndBase == &m_wndMenu )
% Y. ?" D# ?2 r: w1 D{# M3 z6 d% n- G6 X8 G
switch( nID )
3 M0 e; h- X$ q" F- w {
7 C. O. m9 }! t0 B) q6 {3 z case 2:
9 j8 o7 K! p( \& g! t9 t0 Z {* r" v, J: e% T. T
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
& u' K6 A" Q, o# \4 ]( F* D if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)) T( Y0 E( C5 w% l2 O+ e$ G% R7 Z
{" F; S* a- L: h/ y
break;* S! c% f3 f) H' `# S V
}
% F9 g8 K# U0 X0 V% j0 a for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
, Z' j8 x! C6 s# D" @ {
$ q& v$ _' x: I CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
7 g6 A3 m0 V* t3 \6 ?5 A" x' ~6 y if( !pItemElem )
6 X+ Q1 r+ h& K$ B( ?+ z+ q continue;
2 N+ |% b7 G* L5 S8 f5 Y$ N) } if(pItemElem->GetExtra() > 0) ^" u: ~5 X" [. w3 N9 s3 L
continue;
3 q* U* q' ~2 X( L if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
1 }( C2 r3 D! a2 U- Z1 m9 u continue;
/ C! y! D2 i) U" N4 N if( g_pPlayer->IsUsing( pItemElem ) )/ ]! G8 x5 |* o8 I1 P$ ]
continue;
7 g5 p- q# o( c2 m$ Y if( pItemElem->IsUndestructable() == TRUE ) z0 I g# ^! n& M. z4 N: t
{
2 z6 D8 g2 i. W+ }2 t$ f/ S) }1 r! X! F g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );( e' H( i# d9 I$ S1 u6 |
continue;
- J3 {2 E6 N- O, q& ~ }
. K4 k1 g) }" E. \* X' ^, { g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
1 y- F! Z) F: t }
% i6 @) j, a- Q. v. r$ U break;
. g7 R; Y1 s/ H# v }
; n- H5 H. o; C' Z$ ` case 1:
* }$ f7 x; w9 \+ B0 r5 M" H: G2 K {+ U$ L1 X v% v4 ~4 `0 Q; n! ?) e
//整理背包
/ K! d0 ?% L: i8 y# p9 b //////////////////////////////////////////////////////////////////////////
* P8 `% B: ^0 t3 h7 t" [' \ //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
, r4 z- | W# ~" E: g6 _3 _ //////////////////////////////////////////////////////////////////////////4 j G# R" w; i% x
//////////////////////////////////////////////////////////////////////////$ ~- k, Q7 ?3 p7 ^8 g; `4 O
CInventorySort* pInvSort = new CInventorySort;6 ~! i2 k* r$ m& W5 j g! ~% r. |/ v
vector <sItem> vItem;
+ Q/ a6 F) r7 i( W) ]" E vItem.resize(MAX_INVENTORY);//初始化大小
2 A& d+ Z1 R8 P) z //////////////////////////////////////////////////////////////////////////
4 R4 P, y5 K! B$ ` //填充数据
3 t/ W+ J% ]4 @2 g G y for (int i=0;i<MAX_INVENTORY;i++)
) Y2 ?( l+ W9 y/ f4 x8 x {) ^5 |5 A: }& e. l' \3 i
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);( t$ ~0 [- k7 I/ ]
if (!pItemElem), k# ^% L8 _- J" w
{; x/ U6 W# I( L/ _3 S: H+ f
vItem.dwKind2 = 0xffffffff;5 L4 q6 V* v) |0 d" U
vItem.dwItemId = 0xffffffff;, k0 x# I$ t( u! y2 q4 J
vItem.nIndex = i;$ J% V0 h$ {; b- C
}else {+ N. ~9 } K3 a. ]5 a2 K- m' c( \' ~
ItemProp* pProp = pItemElem->GetProp();
# B& U2 H2 T# } ^" s vItem.dwKind2 = pProp->dwItemKind2;2 B: A3 |9 k: H2 { ^+ g$ v6 j* _
vItem.dwItemId = pItemElem->m_dwItemId;* Y% Q2 m# b0 x5 A0 z; J
vItem.nIndex = i;$ W4 g. A) Y2 U* d$ l, C7 v1 G r) _
}' g) N8 J/ E4 W6 {
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
& @- W$ J. H2 w' H2 ]5 e+ R }# m$ u( @/ b; Z" J
//////////////////////////////////////////////////////////////////////////
& X0 f# |3 p. n3 u sort(vItem.begin(),vItem.end());//排序
9 X( v" J! Z3 a //////////////////////////////////////////////////////////////////////////' l3 f* p, ^3 D% B! B) s- g9 a
//交换
2 y& T( A: }' o6 Z/ u8 w$ O+ d; z for (size_t i=0;i<vItem.size();i++)
5 l% ]% y* Z' o W {
# L S6 m5 v# T) ~: G" [ //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
) N* M1 ] j8 F" d. T" V. } pInvSort->Add(vItem.nIndex);
/ M8 Y" a( ?2 U; H$ j: x }( u# c r t7 x1 P. W
BYTE nDestPos = 0;( n8 B0 `% m3 O. g
for (int i=0;i<MAX_INVENTORY;i++)
2 C5 O. Z: G+ r5 v; { Y {
. P# r8 f. |% \1 m: P: k CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
" B6 d% ?# X1 o6 p if (pItemElem)
. d: X; Y% w$ T9 P" \; M# E7 a1 @ {
# H4 ^4 o3 B$ q: E5 j7 z if (IsUsingItem(pItemElem))- K8 X1 ?6 `) u
{, }( F7 X& ~" h7 K1 ^
//这个位置无法放
3 ]+ S& _. j, U- A! z/ r nDestPos++;
' l# A5 p0 F3 {9 V# N% h8 G& } }6 G$ y- w2 ^7 x# c
}
, \- E& _: m4 S4 H- t1 [' z) e7 r BYTE nSrc = pInvSort->GetItemSrc(i); h9 h; |" v1 ^$ M( `- j7 j
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);* |8 d7 T1 S2 l/ e
if (pItemElem): Y; Q" M+ V: j; w7 M& s8 s
{/ `0 i* q* S0 i# ^$ Q: Z- ^7 A( Y
if (IsUsingItem(pItemElem)): J( J" g. b( W9 s0 _0 t! V
{. y: M3 U- {2 ~# C' { W3 ~
//这个道具无法移动,跳过* | \8 x& j6 e* W' E6 C
continue;; c+ g& A+ }1 m8 a; d% K7 Q( K8 E& z
}
& ~# V% j7 j, Z5 @2 N$ U8 y- c }else{5 l" k7 D F3 |5 j
//空位置 不用动
6 [$ m) H S0 X. P: u& _ continue;6 Q5 Q. D; f J4 ` i% ^
}
* E, W! |$ D0 R9 v. b" h //////////////////////////////////////////////////////////////////////////
7 [: [% z9 ?2 e. W; L. k //开始移动
' F% g' T) v4 K" b& x if (nSrc == nDestPos), A, _: f! r* v9 Y% e5 Q
{. J: J5 |; ~% y: a( H. H
//原地不动
% `" _, d& E" G, U# D- G nDestPos++;
' g' t& H2 t% H, Y a4 e8 e$ _ continue;& K' H+ [) ~: [& }( n/ C5 d" o6 \
}
0 ^$ a) t/ U8 J+ b! T pInvSort->MoveItem(i,nDestPos);
) n: Q# i( n- l5 d. Y3 O6 P8 ]/ r g_DPlay.SendMoveItem(0,nSrc,nDestPos);6 C5 C" L: j6 ?" U$ \$ {4 Z
Sleep(5);
7 u, J2 L& C3 z/ ^+ M6 x //Error("移动 - %d->%d",nSrc,nDestPos);
) ^) Y! R" z$ g7 R+ G- y5 _ nDestPos++;' b6 N2 E2 L/ l; Q
} @) S8 F) u4 o' i$ O2 \ H
//取第一个元素的信息, Q9 B- v2 A: t( o. p
/*% R7 r' O. n0 I% M9 H
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
( q+ z- j( A( I& k5 m {) n- G% X/ R* A( @
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);& O1 L6 `( q( y7 a+ c6 d8 c# q
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
' ^* @1 `* z/ w) ^ }9 C0 c d w2 m) T
*/
, g2 h7 W8 R7 r0 D: S //////////////////////////////////////////////////////////////////////////2 M( s9 Q! ]- r. K/ k) l1 y
break;" p% q7 Q% w, I" J2 A+ z
}( I( m& L8 p6 L* O
} " R1 i e/ i5 ]; R' s+ Q8 A6 a3 Y
}
) R; o8 W' ?! {m_wndMenu.SetVisible(FALSE);
' J [. F2 x' ?, R
+ \1 w/ |4 @1 Y6 I' @- v: Q8 |: O--------------------------------------------------------------------------------------------------------
( }$ C7 U; z$ M0 x搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
& F- h8 t) U* c6 r! M: F/ W* M( M- R{
0 D3 b5 u% u( }1 [, QBaseMouseCursor();- Z$ y( m& e# ?! M2 A" A5 ~7 F! Y
}
! ]( U- D* S0 t$ e% {6 Y) t在其下添加:$ e6 j( V& ~3 m
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)0 u# J1 W! z* w% t! n. N3 X
{
, E, k/ f0 j- P. R2 a* Wm_wndMenu.DeleteAllMenu();- Z0 h1 X/ s! I0 A* U
m_wndMenu.CreateMenu(this);
5 [! s3 ?( B# {/ M& D+ em_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
: u% ^2 ]7 O; r* m, i- {, P3 ]0 {3 `/ I$ T/ [
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))9 p( U$ c0 s) Q& I% w) U: W
{, v! {2 o* h U& `( T' }* e! w
//P以上级别才可以删除所有道具
: @/ D4 x4 ^6 p* H' Y m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
! }1 G; S3 {$ S: O}
& e0 o; x0 E. Mm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
* @1 v4 t* c# ?/ l. H- G% G+ r% Dm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );" i1 X- V; L5 X/ c% ` @! ?- o
m_wndMenu.SetFocus();
( F3 H% V/ j% D; g( J}
9 s3 f& @' F9 R# {------------------------------------------------------------------------------------------------------------3 [0 F+ J% }3 `5 d
*************************
0 F( K" a5 x R! I y5 fWndField.h文件2 E/ i' s* i( w* z1 U9 _
*************************' n/ ^3 u. k1 p; U, P
搜索:BOOL m_bReport;
; P7 d0 j3 v5 H( C2 l其后添加:" F) b- j1 b2 Y2 y$ w9 W
CWndMenu m_wndMenu;
! P6 L7 u! J# h/ K' I搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);7 S2 N2 v) j8 I, C5 x
其后添加:7 B" I; e* _, R+ S( P5 p
virtual void OnRButtonUp(UINT nFlags, CPoint point);. w5 \" Z. ?& E& d: z
4 }/ n4 d" w$ U
7 j" }' B* Q4 }1 c6 H" o! P |
|