|
|
源文件中_Interface文件夹下WndField.cpp文件! N; l& \4 f7 K1 E( h" l" `
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
, _* G1 k/ K" j$ z' I3 n1 A$ r/ w ^
struct sItem
2 r ?9 }, l. r g7 F$ I{1 s% I* i) _3 U9 H: v7 H4 ~
DWORD dwId;
0 o% |" e% S, E8 _1 X+ GDWORD dwKind2;
0 w9 u: k) Y; O8 `# K$ q$ DDWORD dwItemId;
2 \. k% e5 J% uBYTE nIndex;
0 |. [( Q0 Q6 Q0 U# y8 x$ r5 QsItem(){ R# @. k* a/ S7 T
dwId = dwKind2 = dwItemId = nIndex = 0;
8 b/ Z& q( b# X9 f; g}
A9 S, R5 ^9 o3 A# u1 ?bool operator < (const sItem p2)
3 q$ x$ f; Z8 j% v% J{
# \$ B7 C! R& C1 W9 @3 u9 f if (dwKind2 == p2.dwKind2)
, l& p! e6 c/ u+ `" J" C {! T& _ [, u; A
return dwItemId < p2.dwItemId;* }: q E# V* ^6 j3 w
}else{
5 w0 ~4 {/ g' q6 f: d7 r Z3 }" X4 W return dwKind2 < p2.dwKind2;
) y3 v* v; b r! L/ } }" I6 m9 k5 T! ~
}
; D4 x" J& w9 O' v4 O A j};
# @* x/ h, m" ]3 v. e1 N, }class CInventorySort% B' p' J3 R; B8 [, j0 y' m
{
+ K) d3 n1 x2 g" G, _public:/ X0 U4 O# B. u- R* s
CInventorySort()
7 M3 x0 H( C' X{
( v. y, a: n Q/ z% B/ K9 ~ m_dwPos = 0;: T7 G7 b( I$ ]
}
9 X$ P3 [( [: c~CInventorySort(){}% a- f3 f( n$ V3 J
private:
1 K$ |2 U- A8 x4 t* a8 |: PsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
* l# `' ?: G# @, v0 xDWORD m_dwPos;
) M: J; p) R" [* q, _public:, K. K4 |0 p0 \' F) f- J: t
void Add(BYTE nIndex)
5 m! m1 L# X6 E2 Y' l{) S# t2 m7 Y; {& i8 |& V
if (m_dwPos >= MAX_INVENTORY)4 D' e; I, S7 b& H* g
{
2 g( h, Q( n Y% i return;4 u2 L* @$ B7 p- X0 l5 T H; k
}
/ n0 `& O. V4 l5 g" K3 O: f2 \ m_Item[m_dwPos].nIndex = nIndex;& p" B" y) G' ?
m_Item[m_dwPos].dwId = m_dwPos;! y& m' f! H9 C9 ?: t3 P
m_dwPos++;
3 Z% m! F: y2 O- k9 U+ \4 ?}
, d+ K. f% I" V6 N; uBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
9 R* l! t6 d, r; a9 H{( T" A" _; ^3 e
for (int i=0;i<MAX_INVENTORY;i++)
/ j0 s3 w: B/ u- j$ Z {
% Y; u# Z+ H; T( k2 t$ s0 q if (m_Item.dwId == dwId), D! x* c) m O
{
0 m0 `* H4 z& ] return m_Item.nIndex;2 s `5 R& X1 F
}4 U1 w& i8 f7 J K' m* a; r1 @/ u
}- j$ ]. c( g, j9 q
return 255;: \3 c4 D% o) j* `3 `! p
}
4 R6 b' _+ i% F# G/ r# fvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
5 }9 P; }; _5 Q( n4 t. I+ K{: U7 a9 K7 F2 @: m' n
BYTE nTmp = 0;/ B2 I" z: b# n5 `% f& x7 w" ?
bool bDest = false,bSrc = false;2 E' w+ k: C. j8 L9 S
for (int i=0;i<MAX_INVENTORY;i++)+ a+ M& @5 B. m$ }! s. N. i
{
# j9 s; [& ~# a, z/ I. A* U if (dwSrcId == m_Item.dwId)
" c. J# R: m8 \/ Y. a. A' `9 G {
c1 z9 P, x$ j; | //id相等 则 改变对应的dest和src
6 ^# u; i: c4 F( H( L0 l I nTmp = m_Item.nIndex;2 K+ v' T, r3 T0 J
m_Item.nIndex = dest;
. w/ _+ O2 W: _- |# m% W- \: m. f }' d8 Y. }( t; }: T; g1 b" B1 d- d
}1 [: i- i9 s9 T7 s9 x
//临时数据保存完毕,交换开始
6 }1 Q( C8 j; q! f7 S for (int i=0;i<MAX_INVENTORY;i++)
8 r& Z& {% Z: O- h* O {& U3 J# l$ g: [4 T7 y7 l4 L2 y. x8 w
if (dest == m_Item.nIndex)0 o7 R; d8 M; K2 L ~
{8 i1 b' q' n+ F. Q$ ^! {! t0 J
//id相等 则 改变对应的dest和src
" ]% d, t1 U0 ~ n2 }* | m_Item.nIndex = nTmp;
0 C9 l# d! `0 y. c }9 h& M$ N% u5 \$ \6 f1 V7 j
} H1 D' W, F+ L1 E( l" A" v, X
}
9 w& ~1 }8 }. A};
2 b* P4 I, [* b/ E-------------------------------------------------------------------------
G" k* m T' U9 e依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )1 }. B3 V% @/ C" V4 W8 \5 A
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);4 g& p/ q# H8 r$ L# f! t3 |
紧靠其上添加:9 ^* }, R" B7 n) F. F3 P1 b' ~
if( pWndBase == &m_wndMenu )
1 t) J# p3 c% w# z{% Y& D r2 }8 }" P( m
switch( nID )
& {' Z1 \# n( d7 a- K' t {' ~0 i7 N7 X. z( n( ?0 E2 F% Z
case 2:* n& H a4 w; |7 B. S8 x3 k
{6 r/ v' \( p: P
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);5 O7 B# q% n! G, D) _' S
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
: z! w2 h# Y) h" M7 k* s, w {
7 n7 s/ a; v( k" I5 _ break;4 {& U# {- ?( G8 D
}
$ o, y6 Y6 @- m for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)! R. e0 G* S0 x0 Y
{; ]6 s, q/ i* k1 C
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
- S* i; w$ S, b) m* e E) u if( !pItemElem )
% I& `! {6 v* y3 I8 X continue;
+ b f$ D5 Z1 ?0 o9 Y if(pItemElem->GetExtra() > 0) C* v! n8 m( e" H" K
continue;4 d/ R7 L1 G% e+ Y$ T9 I; C# w& X
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
) F# M; k( z1 r' o3 m continue;
$ m' G1 k, M1 E# z7 P) b# A if( g_pPlayer->IsUsing( pItemElem ) )
, \: x. J6 y- s continue;
a* _5 b! [' W B* O) x7 }1 j if( pItemElem->IsUndestructable() == TRUE )
; a5 m9 K2 d# m2 \* b {$ s' W- m& o* w3 L
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );; {. U( r1 t& N! P, l0 A' V
continue;" ?" g2 e! s5 }1 c6 p' o
}4 Q9 P( ?0 S! E
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
# s) D2 o( I) F, X! g }
" n3 ^2 F; c# l n break;
6 x' H5 m* F% Z) ~ }
" U* m& X- @* W* l1 o3 |% U8 Q. e3 a case 1:
W {: z: S, n2 Y: C8 A4 u {: o3 o. ]6 R A0 [( g6 i
//整理背包0 @" F: V& E1 h2 R& y) r4 u* ?3 I. g+ W
//////////////////////////////////////////////////////////////////////////
( y# _ \6 A. E0 W* n2 N //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
- L7 F* y* {% U" [& q8 M //////////////////////////////////////////////////////////////////////////
) g* h* j4 g/ r& F3 _ //////////////////////////////////////////////////////////////////////////* g' s' |; f# ^, H9 t& k& D
CInventorySort* pInvSort = new CInventorySort;4 o$ L; ?4 o% g2 C$ h+ R. E s1 `
vector <sItem> vItem;
4 l$ T. x. [. Y$ N8 B: m/ q9 m vItem.resize(MAX_INVENTORY);//初始化大小
, t4 s9 I2 j% `2 Q //////////////////////////////////////////////////////////////////////////7 [; n0 h# F3 j! i0 l5 g$ @& C2 c
//填充数据
( |2 j5 Y: [5 p" K- c/ a5 V* c: v; d for (int i=0;i<MAX_INVENTORY;i++)
6 L( d' ?3 L8 d+ s5 u E5 l {$ O7 f9 k; \2 ~( ?" R |8 {
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
" K- v8 H0 S. ?9 x: c: E if (!pItemElem)' C9 x6 A) m2 g7 ]- X4 F! b) S
{* k( p4 ?2 j; o: q# H
vItem.dwKind2 = 0xffffffff;
O" y7 z/ o& U) F n! }. J% [ vItem.dwItemId = 0xffffffff;
7 y3 _+ m0 V3 p+ h2 L1 f( m9 \ vItem.nIndex = i;9 P* m8 Q+ r/ U" T( X7 E6 \% ?
}else {
/ v* W$ `1 Q# t7 z0 J, K" P ItemProp* pProp = pItemElem->GetProp();
( X+ z( h1 y* x4 [: N+ M( u4 o: M/ [ vItem.dwKind2 = pProp->dwItemKind2;( ` ^/ l1 i3 l# j1 g" X$ u
vItem.dwItemId = pItemElem->m_dwItemId;9 n7 J5 L9 z) }) O6 Q
vItem.nIndex = i;8 ?9 _8 s: y3 o5 O- @5 o
}7 R- d# z1 e" m
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
( B9 g1 G$ d S, C/ `$ e% B }/ m# X n/ ]# i+ r
//////////////////////////////////////////////////////////////////////////
1 q6 y' [$ @ S. P/ `1 \8 l sort(vItem.begin(),vItem.end());//排序
: i: N5 A3 [4 t5 P. F //////////////////////////////////////////////////////////////////////////
& G1 I6 a& U @7 I+ d% ~ //交换& Z. k- s2 Y& r A
for (size_t i=0;i<vItem.size();i++)
/ y/ `( _ Z/ `/ |2 j" D7 k2 r* K {( R6 t, Q) n1 u- V- V: Y5 M
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
0 z" g) J0 b5 C J/ R J" J- E pInvSort->Add(vItem.nIndex);
+ a1 C7 K6 b+ e* K! v }
/ }# _- H6 o( N b* |+ U) J BYTE nDestPos = 0;$ x% ?( x6 \8 w6 b& t1 O& E2 w
for (int i=0;i<MAX_INVENTORY;i++)8 N7 w" c/ P9 h9 [2 F. N
{" w. z* o0 Q& S- {
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
, v3 s* P% `0 w- E; p0 x# h& G3 _ if (pItemElem)
% ~7 B5 t$ V7 H+ _4 H {, |( S1 {0 O; d, P
if (IsUsingItem(pItemElem))3 ]% Z$ U2 L# _+ V
{: r1 \" a) t! ]$ s) K' o" s, r
//这个位置无法放; |0 H4 M! A+ n) X
nDestPos++;- z* W, G4 y- k" g
}
2 Y% T# ~- R, b }
2 H; J- j# X! |( g BYTE nSrc = pInvSort->GetItemSrc(i);) {( {7 h& P9 u s
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);) g& U% A: |" l& E: S
if (pItemElem)+ T8 H- n+ [% w1 U, g9 E# c! v
{
) M% d* y6 _3 Z. W9 K if (IsUsingItem(pItemElem)). q: P7 U$ \6 E7 k* S
{
2 {3 T* T( ?" v' s# F% ^2 K s //这个道具无法移动,跳过
- k# l( }; P3 V& m4 n X+ y continue;
8 A5 u2 w) i0 M% l0 E }
) A: w' T) e; d6 {8 x! P2 Q }else{5 A* ~9 C; y( x$ Y( _2 q
//空位置 不用动
! \, ^# r X- K- N2 z9 m5 q continue;
5 Y& }4 k3 Z6 I. z8 J% Q }
1 B6 }# k& ^, t //////////////////////////////////////////////////////////////////////////$ E8 h: ^. C; o% E# _, _$ q
//开始移动
8 e' }; i5 Z9 e4 e. q+ y if (nSrc == nDestPos)
) f T3 h9 _9 S2 }7 \7 j- ~/ q {
5 v& _9 N6 J3 @2 K& u //原地不动$ p6 ]6 E! D+ n1 {
nDestPos++;# i- @) \ v1 T& b
continue;4 T( C# T! S& |% ^0 ?4 [4 b
}
3 M8 }( E% ]; g, y) ]' J, Z0 i pInvSort->MoveItem(i,nDestPos);
0 F5 B9 X% w' _* j/ r0 q g_DPlay.SendMoveItem(0,nSrc,nDestPos);
5 ]! Z" r) s& {0 x. k: o$ d$ \( { Sleep(5);! a- }: o1 Y- v
//Error("移动 - %d->%d",nSrc,nDestPos);% J/ x0 |* [3 p6 P" h9 I
nDestPos++;) f# F% D! y, K4 u( W9 G$ |/ q6 q
}9 L& ?3 M* g& o& r: H9 A3 |9 w
//取第一个元素的信息3 Z1 X3 g1 z) P
/*' H; u6 S) l. t. G$ P) O y
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)' [# x+ f8 v+ `% E: V7 S+ ?2 q/ b+ u8 m
{
) p; v. p5 x9 C$ t3 f/ q3 M+ P; _ Error("Move - From:%d,To:%d",vItem[0].nIndex,x);1 w, L6 Q- S( {1 Q8 k8 f0 T
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
$ _7 d- F6 [# j# E, s8 H( C& F6 m, ? }: h5 v( g7 K& o6 k, B. F
*/1 E" U: b' L& Y! v
//////////////////////////////////////////////////////////////////////////
% K, R( L$ s& T1 [1 [5 A# c! t' g+ g break;$ ?; F) h' ]- _4 D5 U4 B( a* x
}- O6 l5 f; l& m8 L# P
}
& {" M$ p+ E$ \# {: f8 x2 s' q}% l4 q6 k8 v( R" N% r7 D2 V
m_wndMenu.SetVisible(FALSE);% f" t# m7 d+ w# \( D" y
$ o# R: O3 L: @8 \9 B1 T" i6 @" I* a$ h* D
--------------------------------------------------------------------------------------------------------
3 M T2 w* a( X8 T! k搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
& v, l5 [ _4 L, p" y6 g5 O y3 M{: `5 Y* Y$ Z) j5 Z
BaseMouseCursor();
$ P6 G# p7 m: a( H) ?9 w& C& g} `: U3 H( m( m5 C$ N' X+ i
在其下添加:9 m7 Z+ P) C! M, e( g
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
# @+ y. w5 t/ P0 [{' h# u% H6 M+ a9 ?/ h6 C7 q8 s
m_wndMenu.DeleteAllMenu();
0 R8 A: K" k3 cm_wndMenu.CreateMenu(this);1 u$ f3 p, a! a6 H
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
' c4 d4 u# ^4 D' x6 t/ e+ K% _8 H9 S' U, r3 }! N
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
) X3 R0 v" r& X7 G" P{ _9 Z! S; K% o& @; y
//P以上级别才可以删除所有道具
$ _/ @ r8 W8 E: @0 R! I m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
y2 r5 y5 [3 n Y' `; r" j9 D+ U}; S2 o* P. A6 \$ f* W
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );5 {* X; R* h6 k: D% H
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );% X, |+ @: f3 G, U5 Z- p4 R
m_wndMenu.SetFocus();. |/ W2 Q! g$ X$ s
}( K% } f" _+ I4 b5 Y
------------------------------------------------------------------------------------------------------------; m' D- M/ ^2 Y; B9 n' l
*************************9 s( g, |5 J! h* L8 u3 @3 D
WndField.h文件& p2 k+ i$ [6 ^( z N, H
*************************0 N" ^6 Q; D; |1 G$ k
搜索:BOOL m_bReport;
' W0 B. @6 i; ^. E0 y其后添加:
6 I+ K6 s: o" O: N) e9 \# KCWndMenu m_wndMenu;7 h* a% O* X( l# _" Y; e
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point); d0 F6 ]. F4 I" u; e5 S& J
其后添加:1 E$ r" u+ |# ?/ r. y
virtual void OnRButtonUp(UINT nFlags, CPoint point);
* i$ \. t( ~" Y
* s8 U! f! h5 N0 F: R7 T) |3 Y1 ?$ P, l$ `( h a, e3 y
|
|