|
|
源文件中_Interface文件夹下WndField.cpp文件
: Y- ` {6 Q9 T) F# d# u, ]9 B搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ) H" s) g! D" T4 O
9 U+ ?, U2 M* x' M8 v! t9 `$ _struct sItem
4 `* Q# c6 U- g! u4 v8 H2 O+ `{
& U: j, R, Z$ p) A, {; sDWORD dwId;4 s* P7 D( o5 V; Z
DWORD dwKind2;
7 I& L" G* l% f8 @! tDWORD dwItemId;
8 T2 ^. v3 n2 R) L' vBYTE nIndex;
- i" J1 _$ J& o: osItem(){) @) G. U, P4 Z2 N3 S2 a
dwId = dwKind2 = dwItemId = nIndex = 0;# a [ w" c) @0 c& N
}
% n9 y, m0 E( U, r: [bool operator < (const sItem p2)
; u# g% P: }. \ U{# G" t( D. j# u5 J; f6 `7 q9 M9 a
if (dwKind2 == p2.dwKind2)
' B( V/ `/ ], q# ]1 h% _7 ]5 q {8 d( x3 J8 Q6 Y& K) ~/ t# h
return dwItemId < p2.dwItemId;: }, b, d i4 _ i% t n! \
}else{
& o7 ?. Z' \4 {0 p" [/ q return dwKind2 < p2.dwKind2;+ g8 \7 V% p2 M! H* A
}
0 B( G0 x. f$ ]' V}
| u( W) R6 l5 b. t};
( U, S% h6 d5 y! M; Wclass CInventorySort; |% l' x, ?9 }+ j- C
{
z) b' k2 M5 k Wpublic:
$ t Y7 Q$ _* u/ V. uCInventorySort()
7 y) R" s) K0 E: {. n" L3 x{
4 a. B/ u# k: J9 j4 G. v- h3 n m_dwPos = 0;
' b O# X: D% t) r H}5 V0 R5 I; {! ~: }$ T
~CInventorySort(){}/ X5 |4 Z; k( f& G, j- Z- Y& \. D
private:
4 R8 e' P6 C$ Q' _* @5 bsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息1 }+ g, f0 E8 I
DWORD m_dwPos;: a9 y; A8 |" M M' S9 G3 X/ V% w4 x
public:! C' F2 W, W) v. c7 K! V g- t
void Add(BYTE nIndex)
9 r! l) I: G2 d. Q1 n{4 y; U" i2 C/ ?0 |0 X" `
if (m_dwPos >= MAX_INVENTORY)3 I3 H2 V2 b: g
{
# F L' K/ C& n. @& y3 K return;' h8 M" u- A& ~) C5 C; w6 E
}
, j2 v2 Q) {' n* c m_Item[m_dwPos].nIndex = nIndex;
; x" |, ~3 H- |* u6 l/ Z% r m_Item[m_dwPos].dwId = m_dwPos;5 v! D, b1 d* q; p& G4 ^
m_dwPos++;
4 k7 ^3 d+ Q$ |" o4 _5 k5 W}; [5 D) |9 ~! X/ j5 t" P$ G
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
, z$ e" Z: K0 q; {3 c{, c+ z0 c. w* I- [, P4 C' L
for (int i=0;i<MAX_INVENTORY;i++) e/ U: A/ W- p9 r8 N1 b
{
2 n. v* ^& ~* j- d2 T) t if (m_Item.dwId == dwId)2 H$ @, y3 c2 m
{$ n B* E) v: u6 b- y9 R, _ j
return m_Item.nIndex;
5 }: r8 \/ F2 k" f }
0 {6 p, B/ Z5 M }
' h+ o2 R2 V p$ P, f3 r) i return 255;
4 u0 Y* d- m1 f( e0 r! G# ~}
1 T3 U7 V4 ?( n W5 @void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
9 b: k1 J0 x+ P! V/ ~& ?{
# V8 H: c- ~, L8 H% s5 M& ~7 U BYTE nTmp = 0;# b6 T. w+ e# |' j9 U
bool bDest = false,bSrc = false;
& K$ W- M. S) M for (int i=0;i<MAX_INVENTORY;i++)
6 {: S7 [8 e+ V) P. X- X0 N {+ n8 X8 `/ B) |; S$ `. @
if (dwSrcId == m_Item.dwId)9 T& L% w& [( U
{
) Q7 U, ^/ d2 E0 @. F8 g2 s' i4 C. I //id相等 则 改变对应的dest和src$ H# p7 V! W; f* }; l* @% S' ^: a1 Q
nTmp = m_Item.nIndex;/ U% s4 F8 l! h( \
m_Item.nIndex = dest;
* M5 [9 G6 ~. x1 @. u; p }8 o0 w1 e; C2 Q) l
}
1 B* \, n# h0 `0 ], F2 R; d //临时数据保存完毕,交换开始+ I2 {1 Q. L3 _8 e: z3 n" H
for (int i=0;i<MAX_INVENTORY;i++)
& M4 \& [* ^' s3 |1 P; |# ` {
" F, e6 { F' ? y6 p' @ if (dest == m_Item.nIndex)
b8 M1 r1 x# M/ P {
' D- C5 t. x9 P9 X, y: } //id相等 则 改变对应的dest和src( `, [0 r* c& M0 S- X
m_Item.nIndex = nTmp;
. u. F& d1 S3 [2 `. u }5 L% F# Z1 y- E+ \8 H5 s. p; y0 b
}
9 w* Q4 l7 a! ], {3 O% r/ Z6 N7 O}4 e3 W4 L% m& U5 u; w4 {
};
- O% n" F1 x# c% M/ j-------------------------------------------------------------------------# L8 X! G7 j) F y. N
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )! i. o0 ]: I2 L+ J) ]
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
; } x! D* K H4 w紧靠其上添加:
/ Y) E5 a2 `* s* w$ o$ Uif( pWndBase == &m_wndMenu )
# J8 A* ]$ D4 ]3 J! e% j8 S) I{& u* p* u2 A' p3 K" g S* c
switch( nID )
2 y" [5 I- S' e# s# L0 X {; M& |2 ~9 w2 T0 x- M
case 2:
7 w1 |! n4 S4 P! s. K( O {8 l3 x: H. b/ r. f x# j5 A
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
/ n [, i7 ~. n; v2 d' d% M if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
' C& D/ x8 h7 ]6 e {6 S* u) b4 K7 L5 u9 g
break;6 i6 n" T5 o& e0 P& ^
}
- C$ }3 _; P `1 R9 _6 R for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++) l8 h8 v0 e0 y, T3 Z" Q
{- G4 r3 d) C, R2 s# B" I# e
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
' ?8 v3 L* }1 X& N/ w. m {: }) V if( !pItemElem ); n! d4 s$ v: N3 E+ W& r- e5 m
continue;% v2 i3 e0 y4 o/ [% S5 s3 k9 e
if(pItemElem->GetExtra() > 0), \' ]5 d6 Y" t: w8 x* v
continue;; e0 i" f q$ L- u8 t! W5 P2 C1 K
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) , ~! b! j3 M) m( u
continue;
8 ~( X* b: x) { if( g_pPlayer->IsUsing( pItemElem ) )* E/ g+ q8 |5 U/ V& ~5 b; w8 W- E
continue;. q# q# r9 J. J4 L
if( pItemElem->IsUndestructable() == TRUE )5 j2 g1 l% C9 V6 J/ v# {+ F% h* y
{' m* `. |: w1 O( j
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
% |6 }: I2 o9 O: P* n0 m* a% t+ q4 l continue;" @6 P3 x6 q$ }8 p+ P/ L! S1 O" ]
}+ X2 T1 o ]/ ~( L! |
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
# Y2 V# N. }1 m- M7 p3 H5 z }
' F& r8 o9 B; k break;3 F" b; P% y+ r E' A F
}! M: ~& E8 }; t1 z
case 1:& e' C# w% I: g2 r) @
{
* d! c9 Q6 t2 G% p" n6 ? //整理背包7 a8 b# r; W4 n/ h; o
//////////////////////////////////////////////////////////////////////////. F9 A2 d& [- R; a% ^- x5 y
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
" ? Y' E: j0 D- _" C& F //////////////////////////////////////////////////////////////////////////
- U i6 ` C* A4 W( Q //////////////////////////////////////////////////////////////////////////
3 q% i) R z0 q" g* j: d CInventorySort* pInvSort = new CInventorySort;
) ]/ E) Y/ n' V: A* F( u5 @1 X vector <sItem> vItem;
$ o# V5 k1 c4 n" Z' E, g9 ^5 A vItem.resize(MAX_INVENTORY);//初始化大小4 o$ N9 v( B0 Z0 T' t7 L
//////////////////////////////////////////////////////////////////////////
! V* k% W# D- `/ U: E6 c8 e2 v- l/ \5 b //填充数据
+ E9 e# X' e7 z& K for (int i=0;i<MAX_INVENTORY;i++)0 E( r0 b7 E/ U8 G' Y, a! |7 v7 s: U
{! t" x/ k/ b6 X; p- {& O
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
) M3 ]& _; o1 p, q F/ n4 H if (!pItemElem)
8 S/ Q1 J% ]9 D9 \- h {
9 D, x* M1 U/ _6 r- W7 @' E vItem.dwKind2 = 0xffffffff;
- u2 [' e7 d8 r4 @" H; [- @ vItem.dwItemId = 0xffffffff;
* {9 j. k/ I/ X( p% k) s/ R vItem.nIndex = i;; ?8 W. U7 X- Z8 k
}else {$ f) q' Z6 P @: e
ItemProp* pProp = pItemElem->GetProp();
! b `9 G w1 W& V vItem.dwKind2 = pProp->dwItemKind2;
" l- C; ^, K! `6 |3 @ vItem.dwItemId = pItemElem->m_dwItemId;6 j8 ]( f9 ^& D- f
vItem.nIndex = i;
7 j; F* W; B) V2 { e }
8 ^4 h" Z5 @$ N; i //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
$ s% c' `- P2 @# S }: t* o* E. C% e
//////////////////////////////////////////////////////////////////////////
2 h# _8 g$ @7 k) z# Q0 e sort(vItem.begin(),vItem.end());//排序
0 G$ t* F/ v1 p' ^5 g //////////////////////////////////////////////////////////////////////////
2 p* A, {( R& z: O //交换
6 ~ f( f" H- F* y- i4 z for (size_t i=0;i<vItem.size();i++)7 z o4 ^7 j1 v" o, t
{+ L( S2 G/ x! Q, \! q. c/ v6 n
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
3 f* J, s6 @1 f7 \# d pInvSort->Add(vItem.nIndex);$ j$ Q) ], F+ A# @' ^# v: F( ?, u0 a
}
) L/ F4 A& F) {. X2 }$ V BYTE nDestPos = 0;
/ n% Q6 B: B- A% a+ f) o8 n# w% t for (int i=0;i<MAX_INVENTORY;i++)
1 @, [9 B/ a& ]+ U {
$ `& ]( e7 A" b) ?3 a0 \7 q CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
. }" _, i* P4 y$ ?3 b" Y9 v if (pItemElem): t7 }* ?* Y1 F
{, k+ T+ m' y% t
if (IsUsingItem(pItemElem))
% k8 Z% x3 F$ n* O& I& ~ S3 D6 j4 o {1 S4 e7 W$ G& ^ M4 g9 m
//这个位置无法放
' B# T4 O u% K8 A: F& }7 P$ ? nDestPos++;
K* B* p; D/ [8 d }' ^* s; `6 H8 P# s+ t+ b
}5 B; _0 H! |' V- b3 `
BYTE nSrc = pInvSort->GetItemSrc(i);
4 a9 ^$ [3 G1 [9 |" R- m pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
8 e; m( G: Q7 D$ `, @, h- G" E if (pItemElem)
& N$ m0 N" f8 a, A {- l1 U) f- \% B
if (IsUsingItem(pItemElem))6 U( o3 E$ X, Q1 ]/ ~- ~
{
# E1 W# J0 d+ f; I //这个道具无法移动,跳过
& H3 A( q- H7 P# Y" _! I continue;
) Q9 A; y: n0 ^& T9 M- k) K }/ R2 b+ S1 G* ^/ T3 o" Q
}else{# _) e7 T1 E. E# j* ?# m: @9 L
//空位置 不用动
1 M: l3 X- q/ j8 |* u7 K2 k: T Z continue;& p! r7 b2 X$ y4 J
}
1 ]% o5 n9 p/ |* P9 a //////////////////////////////////////////////////////////////////////////) f* ^ z5 R t9 _5 [
//开始移动
3 S! b& ~* x* ^# c if (nSrc == nDestPos)
$ n* U) o* R6 q% V5 A6 V {/ B1 d( R! I3 t
//原地不动' _9 }5 V& _1 S- f2 ~
nDestPos++;
, a l: E% U* c7 w0 b0 t; p ]6 a continue;
, ]4 F: c* ]6 b% E. W }
- s, `$ C5 y; ^ pInvSort->MoveItem(i,nDestPos);
- z5 t* W e6 p2 |( X$ q/ H' K" P g_DPlay.SendMoveItem(0,nSrc,nDestPos);
. {* F: Y7 L' p1 p; p7 n1 e Sleep(5);
7 N7 u( v6 l- d3 X //Error("移动 - %d->%d",nSrc,nDestPos);
9 |$ Q7 d. E. _+ j w2 b5 H nDestPos++;
& G& v1 K4 ~$ u L& I; @9 j1 A; } }! P$ E1 N( N0 l. i" M) W4 Z) I9 w
//取第一个元素的信息
4 R: d( T/ E/ Y: s- _$ [2 O5 Y /*
1 r+ w* c( n M& k& P if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
- S. g5 [- ]0 }, a { Q0 W2 i, d8 j, d
Error("Move - From:%d,To:%d",vItem[0].nIndex,x); V2 e8 m9 i0 H9 ~/ X# J" ?4 B
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);3 U! y6 K& o3 D! J
}
: j2 m+ C; r- @/ N */
. K0 [, T4 d, j# s //////////////////////////////////////////////////////////////////////////8 U) p3 u5 d" ?2 ~5 V9 e' ?
break;
# g# Y9 H1 e, x# }( I }) o8 K5 [" i# S3 T
} & _ M G- L9 i: P8 H" b
}0 K" \7 S$ G. E9 x8 J: e0 S
m_wndMenu.SetVisible(FALSE); D7 O3 Z5 f4 Z6 G' R8 ?, ~
0 v0 ?+ I' b1 g2 B2 d+ Q
--------------------------------------------------------------------------------------------------------
' k+ f# ]% C/ u/ Y% @4 [ t搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
; n/ {, S" S. V: ]{
2 W* B$ N. ~' zBaseMouseCursor();
) ]# ]$ r! R* r}0 j1 M7 K9 W4 p. c }/ b1 y7 m
在其下添加:
t C" I) i1 Z, k' h6 l6 g1 ivoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
. P2 ?# E$ G! d! v$ r{* K9 i$ w9 j( o
m_wndMenu.DeleteAllMenu();
, i1 i$ b0 @* |; e' Em_wndMenu.CreateMenu(this);) |7 X \/ j2 x
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");% e6 \2 B/ O3 ~. ^! T+ G
( i Z9 B+ e& H8 ]if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))0 ?5 h" v; V% w8 Z0 G! Z, s
{
6 B$ X" D" u0 g; ?3 a //P以上级别才可以删除所有道具
2 y0 ]" ]7 o* x" Z* I; G7 ` m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
" Z2 V8 W( E8 g}
e4 B! o, ~* n$ o: w8 am_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
4 a$ h6 h* ?# u) a$ sm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
& r z+ l" G7 P* [m_wndMenu.SetFocus();
0 A6 ]6 G/ e% F" m; K}9 d/ s" O: |/ P1 h# w; W, X2 y% N
------------------------------------------------------------------------------------------------------------
3 `- H" V4 b" p7 ?/ z$ |. N*************************
2 f& U: W# N8 a# c, l4 V ~WndField.h文件
j# S0 T6 e k7 S*************************
) h) U. g5 E1 i- g2 i0 d$ D搜索:BOOL m_bReport;
3 U- R" g2 s6 t+ l' e其后添加:# H" x& G# j: \8 }" i
CWndMenu m_wndMenu; u$ s$ ~5 M- `' d8 d5 H+ e, w! ?
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);8 q# O; m: Z+ q4 i; j2 U
其后添加:
+ d: ]7 Y6 _+ N6 @! avirtual void OnRButtonUp(UINT nFlags, CPoint point);
% H; t: S! k+ R. ^( v; w. n% @. p+ ~6 C3 H9 Y8 X
1 `4 w3 I- I3 s5 h! q! G V/ F9 c# x |
|