|
|
源文件中_Interface文件夹下WndField.cpp文件- @0 c7 k0 p: I3 f1 r
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
. i/ Z* s5 ?4 d& G5 J5 ?) q% t* _) b/ t6 i/ g* z
struct sItem* e3 T3 `: _1 H# n! {! r3 d
{; Y- P( i- h, A' {3 T
DWORD dwId;8 R" s0 A5 k3 U8 @, u- v$ A
DWORD dwKind2;5 Q: X$ Y5 I% ~& t; [7 L
DWORD dwItemId;* J& i5 N- _# k f% ^* I
BYTE nIndex;
4 T' u) P# N, [( \! p [sItem(){* u2 h, a0 D- N$ _8 G# s$ V
dwId = dwKind2 = dwItemId = nIndex = 0;
Y8 k# H/ V% R3 I* l' M9 C# v}& B# k: N6 }3 f4 z% P! }
bool operator < (const sItem p2)$ @- T/ T8 w |5 u6 ~
{
G- q8 _& W0 e P( {5 b if (dwKind2 == p2.dwKind2)* y, h+ u9 p) ]& v9 T; q) Z; Y0 s
{3 P8 {4 }% v R! t; c; Y Q
return dwItemId < p2.dwItemId;
0 r A' l- G }+ Y0 ` }else{8 Q/ l9 {' i, x( Z: L
return dwKind2 < p2.dwKind2;
1 C- C! B( ?5 v/ q" D }
. r- c5 s+ `0 K8 X$ d i}
& F, D8 h7 l/ y; M) `};
- k- a; f* i: H; g% Iclass CInventorySort0 ^* D( x9 z7 w# z# C6 @
{8 h9 \$ E% z2 g6 }
public:$ l# X" i# g1 S. V* D0 _
CInventorySort()
( a9 ?( X3 A: H{: R: Z/ V% Z5 m A, O' Z& H8 q' g
m_dwPos = 0;( {* n/ f1 R/ C
}
/ }$ x9 [ ?. y3 V3 ^~CInventorySort(){}. J5 D" n8 R& N' U2 o: b! e7 l3 C
private:
1 O7 }+ F8 y; K' }sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息: c; E9 C: g* J+ C
DWORD m_dwPos;
+ G. X) ^( S. x! z9 h* c2 npublic:
! ?8 c- w* N4 D: yvoid Add(BYTE nIndex)4 L- L+ L) ~: U" \) p
{% [1 Y) B& s4 U4 F4 d1 K
if (m_dwPos >= MAX_INVENTORY)
4 r# }7 a% u8 G1 J# z* a, H {' ?# L2 o, N( [
return;
& F8 M" a4 C4 @( } }4 g* w9 `( [/ j
m_Item[m_dwPos].nIndex = nIndex; o& ^4 X6 A7 l4 V
m_Item[m_dwPos].dwId = m_dwPos;
; T) u% s% \( _ m_dwPos++;* U. R# a' `! ^6 m# ~# b
}
; x0 Y8 p4 l4 K% D- t- O zBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
2 v& b5 Y3 i) o{
! t- H0 H/ H3 q7 |- `# U for (int i=0;i<MAX_INVENTORY;i++)
3 E% U5 v% F% ~ Y' k" D& I {
9 K0 d% q2 l( R8 G9 Z. K+ _3 S/ n if (m_Item.dwId == dwId)
$ q* C1 {0 [+ `$ a, B' X {
4 R; H* z- _5 u# X+ Q) w return m_Item.nIndex;0 v; @7 `; b7 Q @
}( G- q) c W( {
}$ V# Y1 O5 w. R9 q
return 255;
! b4 r9 M" }9 o$ b' ] R% `}7 C5 j, [" j" z* ^% F
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置0 W% @3 ~) S% b
{9 _6 m: }3 P5 O0 A; j# g
BYTE nTmp = 0;! `) d; l' h/ _: j \ I+ e
bool bDest = false,bSrc = false;" G2 ~9 B# Y* C
for (int i=0;i<MAX_INVENTORY;i++)3 i- C* G0 L9 d( o8 D8 @: z9 y
{
- a1 A0 g+ Z0 S6 S4 m if (dwSrcId == m_Item.dwId)1 D# E" f( R8 F% W' l) e" ^4 t B9 M
{6 X# i. U5 |6 c% A
//id相等 则 改变对应的dest和src
) |5 F1 P+ m" z6 m; ?- o nTmp = m_Item.nIndex;5 a- b, J2 M1 w. O5 a
m_Item.nIndex = dest;
0 u' b9 d! D( w+ | E4 o }- o" X1 l9 A1 `/ D O' P
}
% u( T2 j0 I- e# X6 I //临时数据保存完毕,交换开始5 P- F, N, F5 t0 z( o8 U4 ^' C
for (int i=0;i<MAX_INVENTORY;i++)( D5 O8 t" ?% Y/ c8 m9 V" {
{
|+ z; X( W d( Y8 L* ?* k/ m9 v if (dest == m_Item.nIndex)) T2 U0 h1 X0 U) F7 r1 b" C9 B
{# N$ O. S: S( q( N5 x
//id相等 则 改变对应的dest和src1 o. y: Y' L+ N
m_Item.nIndex = nTmp;7 R3 _) O' J3 o0 i4 y% t Z
}
5 a6 \) p: y; ]7 J$ Q }$ y5 ^* t$ U; W+ G4 I
}: p1 u7 \" i# z) R
};
: ~) n; a% |2 d% U* y* ~-------------------------------------------------------------------------
- p( t; n' G& j& K$ t) b: h* z* a依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
, f, ]+ i- [9 J* d! M) t, X5 @ ?搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);2 @) \7 O3 I9 i/ l
紧靠其上添加:" k. p2 g- f; E, Q7 h) l- ]$ W n
if( pWndBase == &m_wndMenu )' f# y. G, O7 l& U! @
{( g6 s2 N6 C# z- p. x( }4 @
switch( nID )
) K1 y @# E' d, s {
|, \' a1 Y" E6 c: }+ l case 2:
) f" ?* e# \& x& p {
6 t4 |0 N% x+ \4 Y //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);0 K7 W3 f3 }" z5 ^" K$ R
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
7 a! Y) Z' ]; I( \, w* x {+ Q3 N5 ]. |. s( ?" h8 X5 }/ C8 q
break;9 `, f. g$ T1 N( y; Y% L4 y
}- S; N' `+ d. { c5 ~3 {- [% ~
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)5 P* K# k( ~: J7 W% w+ D9 g2 ?8 b
{* N7 J; } S; p' P- y% Z; y+ ~0 O8 M" g
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
t" a& I' I! ^1 x' H! v% a+ E: I! Q if( !pItemElem )9 z" r! y) N; j+ e# h
continue;! ~3 A3 J4 b2 [2 ^3 q2 ^
if(pItemElem->GetExtra() > 0)
. q$ D+ {8 @$ N: q* o continue;& l5 A" Z# @/ o t
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 0 }' n2 }! ]" X
continue;
7 F/ [4 t4 ^& [- p if( g_pPlayer->IsUsing( pItemElem ) )* w% O) c1 Z4 Z' v+ V3 y
continue;( o- h9 H' D! _- u3 M
if( pItemElem->IsUndestructable() == TRUE )
# y, }& D/ d6 Y& I {; n# @& g! g& l( C3 Y
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );+ T5 H' k+ _" \4 T
continue;
: a# l4 W0 J7 J1 e4 o5 u4 z }# f+ W/ x0 [7 \4 P% W; a3 A9 r
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum); _2 j# u+ ?2 T0 i* ]9 ~
}
' e# g9 A$ M4 e& x7 {8 j break;5 Z: K4 C. s, e
}
) E9 o. {1 X, M* E+ z. b; e3 ]6 s case 1: H% m* V& ?5 G/ F$ t! ?) r' @
{
" z z9 Z7 P' A6 f! Y //整理背包
# j0 z S3 x( S //////////////////////////////////////////////////////////////////////////
2 T8 o6 ]. \" G: G# |" |$ q //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );: e1 i8 A$ W: u2 e& f' J( ^ ]8 s" [/ x
//////////////////////////////////////////////////////////////////////////
: S5 i+ K( @3 k9 j& ]; k8 W //////////////////////////////////////////////////////////////////////////
6 U k* @ [3 |% }. f CInventorySort* pInvSort = new CInventorySort;
; x: \, x) z. T% K3 X8 Y8 C vector <sItem> vItem;) V( H5 V$ t0 x; E: M
vItem.resize(MAX_INVENTORY);//初始化大小+ a& P3 g: p' o- E
//////////////////////////////////////////////////////////////////////////
3 N, f/ b$ [+ F- H //填充数据
! u2 r8 M% N- m% \6 z for (int i=0;i<MAX_INVENTORY;i++), z( J0 r# ]# F1 y( k1 R6 S
{
2 [; M3 h4 d8 W* C2 i, z CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
' E% `0 P. r* c* a1 L6 I, @ if (!pItemElem)8 `- e4 b" F. X# D4 _- k- h. z" E
{
0 ^' b8 e& R. m& o; `" K vItem.dwKind2 = 0xffffffff;
7 z3 F$ R4 }! w1 U% u vItem.dwItemId = 0xffffffff;
" O/ ~ \. N) O% T. @% I) y# }, A/ V vItem.nIndex = i;( G1 T q. ]* ]( L4 \* j
}else { y! Y4 c3 L! k* A! K- q
ItemProp* pProp = pItemElem->GetProp();/ c" G/ E; {. l6 e' L% u3 d
vItem.dwKind2 = pProp->dwItemKind2;
) ~; c6 S, I8 Q; O vItem.dwItemId = pItemElem->m_dwItemId;, F) {. C: {& q; h" z" M
vItem.nIndex = i;
* ^% z7 O$ k' Y! k! b. f }% T6 D$ r6 z: H
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
0 u& Z$ I& `: G! h; o }5 V- ?* N- q3 J/ @* _4 P2 n- b
//////////////////////////////////////////////////////////////////////////7 X& Y% u" K' x0 b7 G
sort(vItem.begin(),vItem.end());//排序
5 P" D1 p! W5 p; @1 P+ B& l- k //////////////////////////////////////////////////////////////////////////
) P: |9 z1 Q- v# v( e //交换$ d& f: c7 h2 G+ S. Y6 v- _+ d
for (size_t i=0;i<vItem.size();i++)
. @* w4 Z) H% ^& e {% Z! n% m7 h* @$ S" U
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
1 z4 n3 l2 Z; n% n* x pInvSort->Add(vItem.nIndex);
5 U% e* D6 S+ Y1 M! g) X5 W# R }3 J$ O0 I: ^8 m+ V5 D. I
BYTE nDestPos = 0;: |% e- m" M; _ T# _* t
for (int i=0;i<MAX_INVENTORY;i++)" _+ h8 Y! J" ~' y7 P
{# M! V X0 A" [$ t: e9 e; U5 I
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
" g& ]4 s" I$ w1 F! t: a0 t if (pItemElem)
' ^9 i' s l4 i( ]) E {
' o: j. |* x7 @1 \# P2 o if (IsUsingItem(pItemElem))
, r1 l H0 S |6 ` { }, L0 M2 w' f* B/ L
//这个位置无法放. n8 O) W5 A& Y8 v( |! b5 V- S
nDestPos++;
9 k+ Y9 J; m8 z4 ] }2 Z+ t2 h( ]" T* ?* E
}
' }! P% t/ y- `9 Q BYTE nSrc = pInvSort->GetItemSrc(i);
9 ~# U( O ]7 B8 v7 w pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
9 G# c' K. ?$ ^2 _% n: h if (pItemElem)( s# W, h0 Z) H' l: W' h* {; H v: ]
{# m3 H# @& G$ p! r2 l( H1 X5 M
if (IsUsingItem(pItemElem))
# v! N4 @/ a4 N. ^1 F/ k/ C5 c) v {- U0 E. ~) \. k4 I- s( W! O
//这个道具无法移动,跳过
1 [: u. K% S5 K0 S continue;. S; t; r6 w& a3 D T3 p
}
, j* U5 y, i/ m" f- ^. \ }else{; l7 r! |6 o; S" f& C) H5 w
//空位置 不用动
$ k2 ^% z/ E( z continue;
' j) a& s7 D$ u- J8 n2 N }
2 ?2 k% r6 Q8 I+ a- Y) X; K7 p //////////////////////////////////////////////////////////////////////////8 `$ G) Y1 t3 p- J3 _1 }
//开始移动; m* B8 k4 [, ^6 p
if (nSrc == nDestPos)) C8 N, B7 t | N- p: M; K
{
3 J% z8 [" N# {, ] //原地不动
* N" |6 D# H9 Y( m& K1 |, d9 ] nDestPos++; N4 \4 y1 k/ Q/ }) a/ ^
continue;# d. n- W8 @+ C
}
+ v8 @# P" F& N+ I8 P, v pInvSort->MoveItem(i,nDestPos);
, l& R4 p$ R% b/ R5 V- ` { g_DPlay.SendMoveItem(0,nSrc,nDestPos);0 ?, R# r5 s' Y3 s' P, l2 y& w
Sleep(5);
2 K, s& [3 e2 |1 F/ e/ }- f/ I //Error("移动 - %d->%d",nSrc,nDestPos);+ q" q: \2 V# l! K9 `4 V/ F3 {
nDestPos++;" R# m6 L( S( N. p* O+ |9 R" x7 P
}. Y- m( T. B; A" C3 @
//取第一个元素的信息
6 y2 k* e% m- j# n /*" x) @: ]$ a/ |: A Q% |6 P# w z
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
6 X6 k, `7 w8 O4 @ h+ s {
: C" Z$ E& p9 @8 K+ ~6 z8 m1 x Error("Move - From:%d,To:%d",vItem[0].nIndex,x);7 X) A# j, J$ |& d
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);9 j I' |$ i, I$ o, c7 J- [
}
, ]9 J6 u% }% n8 C4 N/ @ */
. {/ {, y, t$ u, K //////////////////////////////////////////////////////////////////////////
9 r( ~; C1 ^' B# _0 \5 N/ x5 R break;5 |7 |5 c& [8 y! J) Z! d
}3 {6 D+ x$ x7 w% O3 [
} % I y7 x0 v S$ ]& q, l B: X
}; A" h0 Q" g: W6 s: ^
m_wndMenu.SetVisible(FALSE);2 K# L+ Q7 D8 m, ]7 I+ j) Y
3 F' g, x0 R8 }4 u* O; U6 |
--------------------------------------------------------------------------------------------------------/ g8 G, p, E, q. L7 N6 i4 E; v, o" E+ d
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point). ~: w$ F+ X) `: q4 H9 `- i
{
9 U4 Y2 K. S4 k( u0 }; E7 h( lBaseMouseCursor();( V* |7 S5 a, C
}
# r, z9 s% c' {/ l4 V在其下添加:" P Q( Q+ R3 A3 o. B
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
* m g9 G! r- u5 R{
& [1 v. s0 G: J+ [- f+ q' z3 im_wndMenu.DeleteAllMenu();! a$ G7 o" @; p: {# Q5 e* A" }
m_wndMenu.CreateMenu(this);
$ f' \7 M# N0 a }m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
# S5 ~9 ?/ d+ w$ d% r
" m6 T: v3 F4 _" w( G* P, Kif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
# N# ]& `) I3 H1 E" G S{
( B, X4 B, o/ j //P以上级别才可以删除所有道具 v- ^9 r" e: O# ^
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");* {" C6 b0 I% {, a" O) e
}8 w& X# d7 |/ v1 Z0 g2 ?
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );9 Y Z$ o" A% ~2 b' k3 |
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );5 g+ ?: g# b6 r9 S. H! p
m_wndMenu.SetFocus();6 M* A/ D, c n; G1 R
}- Q4 P/ f6 [, p4 _, E0 C
------------------------------------------------------------------------------------------------------------0 Z4 R/ v- A4 `3 T- b, e
*************************, e. W( Q5 v/ s5 {; g" Z3 E
WndField.h文件- _2 p; C4 i# a. a, V$ p$ e+ L
*************************
0 a& W, O2 D/ K4 j% x. S* L搜索:BOOL m_bReport;
) W$ O2 o# E, x& L/ T0 I& H其后添加:7 P6 q! C1 D% r4 S: A! [
CWndMenu m_wndMenu;
, v+ _- W2 h5 l; B4 P搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point); C7 G' c: l. J4 j8 E0 S! @4 E
其后添加:: o3 B4 R+ [. r' Y
virtual void OnRButtonUp(UINT nFlags, CPoint point);% P/ C1 u! \! r# [
) ]4 W3 Y6 E) f6 V8 |& w& [+ R! b3 }6 E
|
|