|
|
源文件中_Interface文件夹下WndField.cpp文件
/ b `$ |5 ^0 I) \/ N搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )+ |4 I9 K$ l9 I8 V' L
+ x3 D5 I. l" w5 I- {% c# hstruct sItem
: [! K: [+ z, \5 ?% e: ~2 ^. `{
. l- |/ ]! Q+ a7 U9 m' `4 n3 MDWORD dwId;/ m9 [% G; ]# c" g. ~
DWORD dwKind2;1 @( d5 f* q% G/ t, z* A7 c- t7 T' R
DWORD dwItemId;; }& ~; ^' ]& j3 K6 j2 {2 o7 t. H
BYTE nIndex;
( K4 j2 l' f! N6 C. l! csItem(){$ h4 }- f/ H& I2 |1 X5 x+ G! A2 [5 X- x
dwId = dwKind2 = dwItemId = nIndex = 0;7 ~+ U/ c w- _$ @" C
}
W; Y; c' i2 S( Q1 jbool operator < (const sItem p2)# s! P$ o4 Z( j% O- S) f2 b: U
{. s; s) V# H/ }7 R
if (dwKind2 == p2.dwKind2)2 I" e% \0 \; Q: e% C
{ K/ A8 }6 @. h* V! E5 v
return dwItemId < p2.dwItemId;) k5 P+ v. n' n( E6 u
}else{/ k' I5 \( l8 ^0 {
return dwKind2 < p2.dwKind2;, T" R3 s- @# e- D! x
}
2 P! @7 B0 |, v+ _}( m* Y! j& y, H
};
9 T7 C2 h4 A1 Bclass CInventorySort1 `* }8 F# N6 s* I( K' K( f% \# f9 P
{) H) x4 J% ?- i& V
public:
/ h3 t* H0 }+ o& }CInventorySort()5 A p* N$ h% d- ^# t+ |9 Y
{) Q5 u' o& p1 p5 F1 S: P
m_dwPos = 0;, W! K2 @: q1 b. p B8 R
}; U3 c/ m* _- i" [4 {
~CInventorySort(){}
2 n. H4 h& ]0 z( H* g7 Q0 Y/ w$ eprivate:
$ d7 V. B- B' N, o) Z& r; v7 Y# e/ _sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息5 D T( P- u& ^; n
DWORD m_dwPos;6 [2 ]1 {1 d( C! Q
public:
% S3 F" Z C( Yvoid Add(BYTE nIndex)
- E) o4 \% O: ^( ?& t1 F{
! z' h9 w; t z6 n if (m_dwPos >= MAX_INVENTORY)! f! h8 u; z- ?
{% N! P/ ~/ f7 s' S
return;
" \! D% c$ }$ g$ j* P }
6 ~9 P% {. }1 v5 L* P m_Item[m_dwPos].nIndex = nIndex;! O2 _7 a2 x% Q# h* i* g9 x$ H
m_Item[m_dwPos].dwId = m_dwPos;$ Z0 y" G1 D& v6 y" D1 t
m_dwPos++;
$ n4 q" d! E' ~6 o+ }0 M}
+ p1 {( o- l: @+ P5 xBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
- O2 L4 H, x: |3 s2 W A: \{
1 r" y( _: V% M for (int i=0;i<MAX_INVENTORY;i++) T( U# ~% _2 s2 J' @8 ]* ^
{
7 O2 z' l8 J8 o. A8 x if (m_Item.dwId == dwId)- }& O7 ~7 R0 ~- N! l
{/ S5 r) y8 ?" f* K
return m_Item.nIndex;- j+ q) m# Z; Y6 W5 j
}/ O* v7 B" d( y! _ t) B$ \
}
0 D, U" E& A# k. l return 255;1 ^+ K4 Z) i* T( }, m8 C
}2 {9 y* }9 N9 C' l* y- f
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
% j, m9 t; E k% [{+ a) `7 }; x, |2 d E7 C( Z
BYTE nTmp = 0;
+ L8 ^; G! j: D9 [9 _" p2 W% A bool bDest = false,bSrc = false;; l1 T* ~% ?* p( Y8 X
for (int i=0;i<MAX_INVENTORY;i++). z$ S1 h' A& A; D0 u R
{" V y% F) @2 v! N& q. ^
if (dwSrcId == m_Item.dwId)
3 x* U# `/ V1 u& u' H$ ?0 A {1 k6 V6 V7 c/ Q2 B4 e: m
//id相等 则 改变对应的dest和src2 L/ s9 U+ \ M: q
nTmp = m_Item.nIndex;
6 k) N% \0 U! L( g5 S5 n$ ]9 b" k4 l m_Item.nIndex = dest;7 `5 ?* O3 C E$ r
}% ?% l3 |* S' t; b4 l% B
}/ N2 I/ L; T: ?4 b, b
//临时数据保存完毕,交换开始9 D/ K$ i$ O5 p" ~4 u
for (int i=0;i<MAX_INVENTORY;i++)9 s7 \. Q1 t- e: y2 |
{# c" G7 G1 f7 \* J" G9 [7 X
if (dest == m_Item.nIndex)- C: H0 G! e# Q1 P; W
{
% u" ?' o7 ]6 R! S X- ?* x) R //id相等 则 改变对应的dest和src
/ S- r) @( C' [+ n. W9 y+ e m_Item.nIndex = nTmp;
+ P8 c0 @0 ^8 t _9 d }
: D/ d. ~. M7 }" V4 p7 f8 D }
# d8 e+ ]. f3 }* ]}
) Q9 O v. a$ J% T( X3 q};- Q, Y" L; n6 |
-------------------------------------------------------------------------
3 f' C) P0 W T2 z; \8 g, }+ w依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )/ q' d4 B9 z% N" Y9 N
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
b# n6 o& M1 x0 {0 a紧靠其上添加:! Z" x* {3 _% }6 ?3 [
if( pWndBase == &m_wndMenu )
+ k$ e- V- ^; `9 K/ H/ ~# F{0 ? `: z% n4 t% q3 b* Z
switch( nID )! L0 r# u; Q7 R5 C% |, P }+ j
{
- n/ ?' m# y1 a( ^9 S/ B$ x9 P case 2:5 [" j: |3 I( \8 t4 [
{
& @9 R" D) x* a4 ]& G9 D0 J, Q' | //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
4 i& A" p5 ~9 @/ v% P E& m ] if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)), N' c. D6 F% I7 J1 T
{
. [3 N7 ?- u1 q! i$ ^: M6 c break;
# O) d2 l& K8 \ {6 P! H' f }
1 ]2 E. f7 V, w p7 Z/ I for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
6 y2 @6 ?5 A8 R {: v, F% g6 R B7 P3 q4 ]+ u5 u
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);& \0 G3 {9 O9 x, T9 G9 e7 I* U
if( !pItemElem )
; n" Q$ P4 d4 Q$ }9 C( A# n continue;
6 |3 ?9 P) I' ?/ \! w% n. E8 j2 g if(pItemElem->GetExtra() > 0)% M, l$ W. r0 m2 W" ]% E' A/ B
continue;6 |& J, T {7 a/ l, h/ `! |
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
' `% |& ?1 K- y: r continue;
/ j" ]6 w; C' l' n' L9 t if( g_pPlayer->IsUsing( pItemElem ) )
1 f6 Z) Y F' X$ `& D+ A continue;
! ?/ @; l0 k7 E0 w if( pItemElem->IsUndestructable() == TRUE )/ H4 B# ]! D* m2 N) z( z
{
4 v: I+ L0 t0 r: ~3 p3 h# X ]- N g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );; D6 \" N8 k4 o
continue;9 b& `* M6 t) d8 x
}
& u) A( f0 f5 Q, t: T g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
9 { H# V" _: a, J" _ }+ c- s" U0 m2 x6 V+ T
break;
0 t, S( h* b) S9 G }
7 x0 G6 T; d; s; y9 ~6 C( A' a case 1:
) U4 K# l4 q0 g. N' [& c# l: k {. d4 t. n+ R$ e ^2 a1 X
//整理背包
* f4 R% F& x5 i2 a+ Q //////////////////////////////////////////////////////////////////////////3 N" S9 v2 N: V( u( W1 @
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );* X) m" ~. H& l& Q L
//////////////////////////////////////////////////////////////////////////# i( h A% l! k0 [% \0 N4 \! w2 V3 e
//////////////////////////////////////////////////////////////////////////* I; n* U. ~5 A
CInventorySort* pInvSort = new CInventorySort;
1 Q5 t: e7 p+ w3 Z, e9 m8 c vector <sItem> vItem;4 U1 H% i8 l1 u1 t
vItem.resize(MAX_INVENTORY);//初始化大小& ~. O: f/ B& B7 r* d- Q
//////////////////////////////////////////////////////////////////////////- l' h2 {8 V+ w$ @
//填充数据6 k8 m* }4 E! @8 z _' L
for (int i=0;i<MAX_INVENTORY;i++)& m5 J: j# Y/ S( s: r1 p( w+ a
{
5 J8 S: @4 C' Y; r+ u" q! G) Q CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);+ c! H7 C: D* ^3 Q F! |
if (!pItemElem)
) a5 F; l1 \2 \) N {* T# P+ V6 k7 w9 \
vItem.dwKind2 = 0xffffffff;
7 _2 p- j0 w" R# l/ | vItem.dwItemId = 0xffffffff;
8 e7 w7 L# Y! ]4 x# \- J1 e vItem.nIndex = i;
( p/ N. z" H: N6 |8 t9 Q# _, s }else {- I. y) d* n2 J; a) r' y' o
ItemProp* pProp = pItemElem->GetProp();0 h" b% n( \8 v H
vItem.dwKind2 = pProp->dwItemKind2;1 }+ z) s' P) [
vItem.dwItemId = pItemElem->m_dwItemId;4 @ S5 o ^3 f2 t
vItem.nIndex = i;
. K! y ?2 E) g2 t4 x* M( G }
3 P# R5 m+ i/ l7 I# ^" S //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId); ~ n/ D3 ~+ T1 ^. b
}$ P$ F( B2 R! A7 |
//////////////////////////////////////////////////////////////////////////3 C) A; M. @2 i l
sort(vItem.begin(),vItem.end());//排序" i. w. X6 F8 j+ d6 |# k
//////////////////////////////////////////////////////////////////////////
1 F: o5 V* d& o2 N. ?% k( j. | //交换+ F( _. d" c D/ _9 s% D
for (size_t i=0;i<vItem.size();i++). _8 q' o9 M. S j
{
8 l0 k. m) `& Q, ] //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
9 X6 m% [: _9 E& I% A. V: h. V ` pInvSort->Add(vItem.nIndex);/ M0 d% ^5 z2 K8 F- E7 {
}* ?: t! Z$ }8 H6 k3 o/ X1 q1 q! B
BYTE nDestPos = 0;& D2 O3 |" Q$ Y) T
for (int i=0;i<MAX_INVENTORY;i++)* u8 ^6 ]+ B3 P8 n
{
0 C$ ]5 A' a; r9 M+ x9 O CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);1 \( F6 K" L- T3 M6 l8 b4 o
if (pItemElem). p. C/ w# Z8 ?' A. E
{
+ `* w, c2 e# l. D* i2 _6 l2 n6 d: Y2 ~' ` if (IsUsingItem(pItemElem))
3 A. P( u/ L4 O( e {5 @# |6 J$ U) v& q
//这个位置无法放+ K$ t7 D" l8 J3 L, e. U
nDestPos++;
9 N0 k, l5 N& |% ~/ n }
/ `5 t. x5 K2 S$ v6 O% e0 f# O }
) N/ m3 g* V: l. ?& V BYTE nSrc = pInvSort->GetItemSrc(i);
' n. s" z p- G" } pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
$ d& |1 A( D/ Z' [1 \, J6 q. _9 B if (pItemElem)
/ `( w$ a9 X3 {0 \( @ {
0 a7 [" a F5 A& g( k if (IsUsingItem(pItemElem))( V4 |/ v% h" x g: R! J. @8 u( C
{
) q5 p8 e8 i7 } //这个道具无法移动,跳过
0 N* d: j' E" w; i0 [ continue;/ w" e# T3 F, ?' K: I3 w, {
}
) w5 M2 b# r4 U! y R3 B9 y }else{
' p* Z6 Y6 f+ y" J //空位置 不用动( S; S- b& f r+ M# D1 |8 `& u, P2 D
continue;
8 l% p% B$ m2 R" y8 w O. m }" L7 M8 L" Q" W
//////////////////////////////////////////////////////////////////////////( G6 L3 S' J0 |$ r2 }! k* Z
//开始移动* d5 W! e5 F- |3 d8 W/ x
if (nSrc == nDestPos), A9 f) y$ o5 N' z% T
{6 e- K, K8 G8 ^9 a! C
//原地不动
% c# ^( P, O" `4 v5 \0 b5 y nDestPos++;# v$ }- u, b: H- }
continue;' F$ O& b* @4 k/ z' p, S5 U
}
% U2 e _5 T; r6 s6 u' g& X$ v pInvSort->MoveItem(i,nDestPos);4 b: P, p+ u3 _- q# e% l
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
( o3 \9 @/ E! s+ i Sleep(5);, k# `" g8 @/ c, E
//Error("移动 - %d->%d",nSrc,nDestPos);7 z' }8 v$ ~: F F' E; r0 x
nDestPos++;( Q0 t2 w: E y% p' [1 y+ z/ n- M
}
5 v6 C7 g5 V9 K: s8 V) b% g- e //取第一个元素的信息. C) U& I9 A. l3 z& B
/*5 K( U0 `$ B( J* M4 A& ^/ B! I
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
- x) k# ?$ y$ o% a5 e {, m* \4 e+ p2 m; a( \
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
+ H8 F) K! \- r g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);, Z9 W( i7 @- ]
}2 @5 G% O$ x2 {) z
*/
' j1 y9 {( y' c$ l //////////////////////////////////////////////////////////////////////////7 ?% p& }- s7 a0 g0 n
break;- u* k& d9 l3 R/ @( |; D4 G
}
8 n8 O6 k) d9 X7 I }
0 i4 M$ a) R5 W5 E* d1 r}4 J4 o* ^0 X+ m
m_wndMenu.SetVisible(FALSE);" F6 I @8 i6 k+ ?+ {( S
5 j5 q) Y5 R) ?+ U F7 x
--------------------------------------------------------------------------------------------------------9 l( }6 V/ I* w! s
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)% o% ~! h. {/ v) _1 j
{; F5 `8 n& j1 [0 d& L
BaseMouseCursor();1 T" p; x! z9 \; j" I8 v; v, M
}3 G% u4 q9 ?& C& c) [
在其下添加:" [* G8 ]8 d. S$ u4 K- Q
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)- f* t {6 u+ Y6 b3 }1 |* i8 h
{
" m$ L0 m3 o- ]6 {2 l/ [m_wndMenu.DeleteAllMenu();* D7 r6 B e0 E4 K
m_wndMenu.CreateMenu(this);
8 P) [% _# C' ]8 [2 t4 Dm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");" j }5 W6 K& B! c6 s
! f4 m) _+ A* I/ i
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
& w8 j$ } |$ |. S{
" T+ ^8 V! ]8 U4 M2 x2 k- { //P以上级别才可以删除所有道具
$ G6 k/ W. u! z$ |$ K6 Q! E; T m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");& x6 X7 w+ c' d9 s/ m+ w
}: S! x: h* Z h( {
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );4 M( o% r& J) d# l, e/ c# |
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );3 T( m6 d- X3 g. |- f7 Y) p
m_wndMenu.SetFocus();7 f3 i/ @ I6 H6 @: H( O- T ?
}
" k* k7 @8 ~ ~0 `/ i3 D# I------------------------------------------------------------------------------------------------------------ x2 `1 w8 W. W+ B8 H7 w
*************************0 r6 L8 e& X- K* o) J5 b
WndField.h文件# Z8 z) E3 c$ z5 t) o
************************* I" h$ z5 k7 s
搜索:BOOL m_bReport;
/ W' \* W% \# i9 ~* L$ a其后添加:5 Q, w X* L+ Z8 A8 P* J: J' B, y
CWndMenu m_wndMenu;3 Z3 Z% {* _$ D: i2 G
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);, `1 g% \/ D$ i7 V; s/ z2 c
其后添加:
+ _' Y6 L" N+ ]; Y5 ^ x% U0 nvirtual void OnRButtonUp(UINT nFlags, CPoint point);0 A3 O) o& }* m" {& W; ^/ Z( H
) r m8 U& z, K# f
' J0 ]1 v; q; u |
|