|
|
源文件中_Interface文件夹下WndField.cpp文件
& w3 }" E9 n6 d4 p d7 z搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )! v2 e# m2 }+ k. w8 K
! c, E. s) y) u+ U5 i* tstruct sItem
9 x6 m3 Z9 w; x{
4 ?: W" r1 ]5 G" z- ]! I& M/ @5 ADWORD dwId;. U3 X( ?. }( C2 I' A$ t8 j
DWORD dwKind2;
' c. i/ q: g$ m5 ~DWORD dwItemId;
, E5 C E( m' R# r( Y% `1 f4 kBYTE nIndex;
4 G/ Y( Y4 B5 K3 [' [" AsItem(){
# j- l% ~9 h5 d8 Q& ^- g+ } Q7 f dwId = dwKind2 = dwItemId = nIndex = 0;
1 q4 \/ q4 y4 x- W4 d3 A4 }$ w* M}
9 X/ o1 Y! T) ]" B5 R' q) vbool operator < (const sItem p2)# B% Z; u7 r4 C! G2 {; U
{0 E- J7 Y6 W2 z |) b
if (dwKind2 == p2.dwKind2)
; M2 O; m1 d6 x7 D$ _ {
. H; R6 y/ }3 g* D return dwItemId < p2.dwItemId;
5 D, b4 B0 S g1 U; z }else{8 [5 [4 W: W, g% E9 X1 e3 v- P" X
return dwKind2 < p2.dwKind2;, D* L. g4 B E2 P
}: W' g8 H2 ]- D0 y: ?
}
% h) M* t5 H4 x/ h; K};3 f6 |8 X: [! z6 C* O) ^# z
class CInventorySort' ?+ U1 b ^4 J' o
{
' N5 {0 s, E# \public:1 Y0 u h+ \; i# g9 S
CInventorySort()
* l2 q- @3 M1 N% N5 ]5 }; H. y* o5 n5 y{4 I+ W, _( L; P+ U5 c* X
m_dwPos = 0;
9 w- g$ P) q. F5 V}
# N/ H. ~2 L9 q4 H" U. _~CInventorySort(){}6 \" j, |6 C9 N2 X6 R+ J! k- u1 L" M
private:
2 Y8 }2 T9 w# PsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
: D ]$ g/ n: _3 V6 H4 \6 @! bDWORD m_dwPos;8 C' u0 ?+ A# R5 U$ r
public:
8 s: g% {! M! o( _9 U; n% {. I8 y8 g& Xvoid Add(BYTE nIndex)" V% r# j N4 o4 ~
{
# c& E7 `( h' r/ v. c. n if (m_dwPos >= MAX_INVENTORY)
9 w: g* \+ R' V, k2 Q4 u7 g {: K- C$ b/ o4 }0 ?
return;
/ T2 a% c8 p7 y4 u" }: l k }
% h$ Q# \* E( k: `: Q6 b m_Item[m_dwPos].nIndex = nIndex;% U2 h: ^- S6 ?& z
m_Item[m_dwPos].dwId = m_dwPos;
# N% \7 B& s4 Q' w: s m_dwPos++;
- q+ \8 h' S* z}8 E4 T. s! P- P" q9 ~/ v9 |
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
! |0 L( C% J& r' e' t- ]2 \{
. K, @% N, ^0 d2 V/ c1 {; v& P. v for (int i=0;i<MAX_INVENTORY;i++)
- Z9 k& w' G# z+ {7 Z {
! B7 ]. _3 E: K h4 K6 b if (m_Item.dwId == dwId)
/ b c4 \% g2 U) [, i& b# _ {5 o* p& a# p9 h+ U% t. l9 P
return m_Item.nIndex;
7 O: Q# }3 _* [- ` }
2 L$ X; m/ t: n! {% K& s }( B. A% C1 b; L
return 255;
a- a. e( B5 c/ l R, F}7 j* J4 u9 Z8 z$ k' i' D$ ?
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
; d% U3 F- V% D{+ L& P/ {. i! y2 v7 E$ s
BYTE nTmp = 0;
6 [; M7 ?4 R3 q2 g: x bool bDest = false,bSrc = false;
* t$ V$ v' ]; S- S8 e for (int i=0;i<MAX_INVENTORY;i++)
9 J K5 I% V9 P& p8 | {% c2 z5 F4 n1 f) {1 p
if (dwSrcId == m_Item.dwId)
8 K- X) l# h* R1 u9 C {' h* {" A4 @$ v3 n. u
//id相等 则 改变对应的dest和src
, t, ]6 M# l. G nTmp = m_Item.nIndex;
) c7 E$ x5 Z1 S1 }5 u4 A m_Item.nIndex = dest;. K/ u, N# B7 w+ X
}* D1 ]5 i" A+ b/ ]3 S) W2 F, G
}
# H" N5 {# V8 A8 D- c& { //临时数据保存完毕,交换开始
: S1 Q ^- l, c) w0 E- l for (int i=0;i<MAX_INVENTORY;i++)
1 U- R% X" Q4 Y {
8 r5 ?6 V; \* A9 `, w if (dest == m_Item.nIndex)
" X* _/ ^( r0 O* g/ y {+ p' R2 G. d; z% ^* m8 l
//id相等 则 改变对应的dest和src
, F. |' Q0 f/ t m_Item.nIndex = nTmp;
, B m/ T; O E' A$ M }
3 s+ ~+ ~8 T, G1 T) ~+ ^ }' M- A+ E0 H7 F1 s
}- J: E/ B; S% v/ J1 h7 o
};
* g( _, \! f5 x; ~7 Z" L' g0 t-------------------------------------------------------------------------
: s4 K( p9 I. D2 k依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )0 s0 Y! h* ]: \6 y6 c' _
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);( f& N4 W. M+ K5 J
紧靠其上添加:
; p9 |* p* P) b! m; ?) x8 tif( pWndBase == &m_wndMenu )
4 S5 r" b4 v$ n% w3 O' G{& F3 x% u( K) \3 C9 W) _/ ~
switch( nID )- V, b9 N& \+ V6 c, ]8 R0 [! t
{
8 K- h; m4 @5 \6 g6 Y case 2:
7 y' U2 T x$ b) c. U" r- N* T0 y {; L+ J/ Q! L( y1 f
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);" f; H3 G( f8 }6 d. y: d
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
& x1 P' d- Q3 y2 G1 s2 r1 w {
, A; f# E& @' _' A9 t. k4 W: _8 j break;
; y9 V0 y* \/ W6 Z) M9 @4 G }$ m* b- l7 f% o! ]' \
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++). {5 J$ [. u4 N3 Y5 k% e; U# J4 \
{* X! B8 X# V& e0 \* n. m
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
6 Z- B S; t6 P+ _3 l if( !pItemElem )
1 F( n1 D; D( f( l4 Q continue;4 a; b( ^+ J5 G
if(pItemElem->GetExtra() > 0)5 C7 Z" L! W+ X! T
continue;
1 `2 D4 ^9 V7 H0 o; ^# H if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 8 ~5 C* w ^4 F5 s# ?+ ]$ h
continue;
( c) T1 [; h/ Q$ `2 e. _ if( g_pPlayer->IsUsing( pItemElem ) )
% }7 J% K: p# y6 l; } z, w$ I) ]' C continue;
" d9 T2 O, T9 o ^8 \ if( pItemElem->IsUndestructable() == TRUE )0 S- k' k4 E! X! M3 T
{
) R' x9 f/ F: W5 {5 M# e0 ^( w g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );( G+ U: ?6 {4 c u1 ^2 P* E
continue;9 i9 \) B3 g3 e
}1 R2 N* J( ^, _, T6 g$ a$ H8 w
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);# a( B2 F$ u& s: f! z; e* \. W- g
}9 h8 x5 U1 T0 }/ I% B! c- K, G
break;3 T5 p, ]: g7 }1 a4 k
}6 s# H) w8 F) w* y
case 1:: A$ ?3 J2 p1 U2 ^2 I
{/ [8 y4 O0 Q# w1 s0 [. A7 X* u6 \
//整理背包
/ e8 E' S7 m9 A //////////////////////////////////////////////////////////////////////////
9 h0 G9 e _3 O% ]4 F //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );8 T4 T! Y; @4 V) o; |
//////////////////////////////////////////////////////////////////////////3 p/ J! l" x! k* f/ R6 B
//////////////////////////////////////////////////////////////////////////9 r7 |1 a* L# p( K+ j& N+ y
CInventorySort* pInvSort = new CInventorySort;
/ l+ i6 `; x9 Z vector <sItem> vItem;* r. H9 Z- G! f3 t3 }
vItem.resize(MAX_INVENTORY);//初始化大小
7 d$ |: q* g' H: W //////////////////////////////////////////////////////////////////////////; U5 p0 F5 b4 c, F
//填充数据8 i6 B% ^2 I# o6 t
for (int i=0;i<MAX_INVENTORY;i++)
+ V. i4 u1 K P+ t# h/ ] {
6 A% V9 X$ F5 ]) t) Z# P CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
# k9 N2 J- K1 U( n8 L) j" N; ` if (!pItemElem)7 Y) ?! z" s, ^$ U1 Z" z2 b' {
{
% K, B( @& P5 g vItem.dwKind2 = 0xffffffff;
' i, {) G/ j3 k5 g# F% Q7 a vItem.dwItemId = 0xffffffff;
( m+ n# \$ I2 E5 o+ ~3 f vItem.nIndex = i;
; a( V9 a, Y M) ]# O# l. e# F }else {
* H& {7 ?2 d1 I( i ItemProp* pProp = pItemElem->GetProp(); s' k$ R( y4 T3 O D9 w1 I6 s6 C
vItem.dwKind2 = pProp->dwItemKind2;
6 ?# \1 P4 @' V! h vItem.dwItemId = pItemElem->m_dwItemId;
) c) ?, P' a) I" V4 n; O2 F vItem.nIndex = i;1 R; } |5 {" m0 D7 e7 N
} x: C6 i. l1 i* _
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);- C6 Q4 M& `) X% w$ T$ p0 Z
}6 X0 V) m0 a# V/ G
//////////////////////////////////////////////////////////////////////////
2 f S- u) q( k9 @0 z# O2 X sort(vItem.begin(),vItem.end());//排序
0 Y0 M$ M9 H4 u) ^2 l: Z //////////////////////////////////////////////////////////////////////////
5 D) h: S! B& R4 i //交换
& y4 J0 [2 e4 | for (size_t i=0;i<vItem.size();i++)' P1 f. U& Q# P5 h7 q+ Z+ S$ d
{* V- v! j% L! n& ?) g% X7 K1 P
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
+ x/ \6 L0 s/ q0 E; L& r( r pInvSort->Add(vItem.nIndex);$ o; ?* L* e% |0 W0 V" M/ U* f. v
}+ |4 c& a" O4 }% l. L/ N
BYTE nDestPos = 0;5 P( O2 ?: f3 i+ {( Q
for (int i=0;i<MAX_INVENTORY;i++): v! F3 l% _2 @. w7 x
{% I/ g) M, b, F4 k) X
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
. {# Y7 V1 t$ ^3 |5 r1 n6 w( b7 Y if (pItemElem)
6 ^2 ~ F& e3 ]( I4 v {9 `( A6 ?1 v9 q6 J6 `$ c9 C
if (IsUsingItem(pItemElem))
3 V) ?/ P* q+ E" g9 | {
) B. c' F+ a$ b; y% \$ ^+ u //这个位置无法放2 R: g, E8 O8 I7 x X* E% L+ O
nDestPos++;
' x, r' Z5 L; }; g; M C }4 n6 `( z; ?. X7 ~' |, A. `, P0 k/ Q
}+ }, ~, ^$ M8 Q1 b
BYTE nSrc = pInvSort->GetItemSrc(i);" Q- g9 B0 q, s) h" B w% R0 P
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);" T, S. L) X& Z5 N, u X
if (pItemElem)
% L2 @8 X, m$ ^! ] {6 u% X6 E( Z. g( m( h
if (IsUsingItem(pItemElem))! z Y9 |" n5 p( U# k
{
8 X* }( J. y; [8 C p4 m //这个道具无法移动,跳过: z$ Z6 [- Q$ J* h, c
continue;9 {5 _% V1 P3 d9 b! |
}3 k. @* Q' s7 e" Z4 I1 H4 J
}else{
) N+ ]7 @: |! K# J4 _ //空位置 不用动
9 m/ e9 J D: M. ^; E. D$ Z continue;
* K1 ~ o& Y l4 ~( i) q2 e }
* R0 A# P# @1 b$ w# C5 t8 K //////////////////////////////////////////////////////////////////////////
5 u3 I9 G/ H" Q4 t% d2 q. y) x. A //开始移动
5 e4 h% M' X: O1 Q4 `) `4 P& [ if (nSrc == nDestPos)
, y0 l1 d0 }" @ ~ _, F {
2 q( S* G' m. V( @ //原地不动
8 ~9 D. F1 o" C' R1 k4 S1 a. e$ j nDestPos++;2 X2 c/ ]3 T: n) w' K8 x
continue;" n4 e7 u$ }6 T7 l, R7 K# W# U
}# G* y: V7 a9 r/ g1 ? d9 `4 L4 q" J
pInvSort->MoveItem(i,nDestPos);# F/ A4 M* p5 a9 x% g2 e
g_DPlay.SendMoveItem(0,nSrc,nDestPos);7 q4 i" \8 V% J) q% q, n! h
Sleep(5);
6 k. b1 ~& ^, a( O. K$ b( }% i //Error("移动 - %d->%d",nSrc,nDestPos);% s, D2 R" g1 R: E8 ^1 k8 z! S* ^5 n0 e
nDestPos++;
1 y8 R. A) h6 Q; ~ }% I! `, x6 t$ |! T4 u
//取第一个元素的信息
7 P" ] l2 {6 f) z2 n" U8 h/ I /*
$ P Q" v6 N! T- _ h5 |6 \ if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)4 W0 ?6 B! Z% \! |/ ? ^, F
{
: V$ {7 b) U( @& } t8 ]# ] Error("Move - From:%d,To:%d",vItem[0].nIndex,x);7 k6 t. [% a; ~" a& n0 ~# l6 r r) V( S
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);3 W/ D$ p. b5 |4 V7 v) K5 e
}" B- S5 d3 W) g; u
*/) T2 i! @/ q! L( k T+ n7 b! V! a
//////////////////////////////////////////////////////////////////////////
1 l: \, _$ S! m5 }" ] break;
' Y' R2 G9 ?" h1 C0 v! j2 U2 p }8 D+ L& Y: E+ P) f c! o& Q
} 6 N6 m# c$ p- T* o
}
3 o4 s$ R- e4 ?/ o! D( Am_wndMenu.SetVisible(FALSE);
( q9 e2 }2 p1 D8 A8 J% z9 B/ U7 A3 [
--------------------------------------------------------------------------------------------------------
. ]# X* s* C; ?搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)% `. t+ k7 x; p2 ] G
{
9 n6 G1 c L3 S3 M! QBaseMouseCursor();7 p! \. {" N8 j4 g. {9 F. o
}
/ t, c0 a- @) t! o在其下添加:
0 Q6 ~3 T) q" c3 dvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
' W1 |- R/ j/ |2 h/ r- ^& [{* O7 q5 t% Q! x% _
m_wndMenu.DeleteAllMenu();
2 P* ^$ D9 d6 sm_wndMenu.CreateMenu(this);
- G2 m' Y5 `' Nm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
- }. ^ U8 Z. l- c! }$ r! S
% S3 C4 v7 f n& U4 kif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
8 i8 E1 C; f$ c{
- ^* J( n" k5 o$ G6 M2 j9 J //P以上级别才可以删除所有道具" P4 }: a. L' r6 U# |, _: x
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");) J& }. k$ k# U4 k- G
}9 Y( j/ Z. A0 }6 U1 v
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
& k" {7 j1 u A$ |/ }( c& b* Rm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );3 U- }7 J* |' @5 I# B# f. X2 E
m_wndMenu.SetFocus();
K4 e; q* b) c! p}
, @' }: e* V$ ^ Q. V3 U& ?: l------------------------------------------------------------------------------------------------------------, R5 g4 v* \9 \
*************************7 q0 M2 w3 K, a) l' l- i- r7 _
WndField.h文件8 l- O+ z1 k* ~& A* y
*************************% o- A7 h' t2 q9 _4 h
搜索:BOOL m_bReport;' B6 M$ s/ b0 I! W' I5 W" Q: z, ]
其后添加:: t0 c- c+ D3 a4 s- ~
CWndMenu m_wndMenu;0 ?- E& T+ p+ z7 ^7 x: e5 k. n
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);4 ~; x/ Q+ G- Q. l
其后添加:! G' X0 k- E9 _& @9 e3 e4 Q
virtual void OnRButtonUp(UINT nFlags, CPoint point);- P& u ~& x) v! _) u$ T# F$ B; U' U
: O& V9 N3 t F/ `! V
4 b7 W8 y" D8 B |
|