|
|
源文件中_Interface文件夹下WndField.cpp文件
; G: Z+ a( F7 z搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
9 }" V1 r; F! c+ v6 H
# O# D* b* D& Pstruct sItem
! Q9 f9 x- A; {" E, H{
/ N; }- h3 Z% @DWORD dwId;
# J# a; g% }: C6 J0 @. T: oDWORD dwKind2;- A3 o0 T8 G$ Y4 `/ h, p L! ^+ S m8 W4 e
DWORD dwItemId;
8 M1 {: g j e0 a1 _BYTE nIndex;
) X4 k0 e# m* T: u" csItem(){
|. G$ h3 e" n0 T dwId = dwKind2 = dwItemId = nIndex = 0;" [" }5 G! W* i9 r9 B
}" W0 G H8 o/ ]1 {3 f: w
bool operator < (const sItem p2)
4 s6 t2 f( e/ b0 J{
6 i6 G6 q# }2 g9 W if (dwKind2 == p2.dwKind2)% v; I' k0 \* b7 y, q
{
5 \! F; A! C! b0 |) {, _ return dwItemId < p2.dwItemId;5 j* y2 m7 L! x8 ~
}else{
1 W0 M2 p+ X6 M0 y; S7 r" n* V# `* L return dwKind2 < p2.dwKind2;) m8 W( F6 m: ~& j4 D) k" I1 B) k. z
}
) Q7 Y% ~3 H* Y5 }* {8 Q} G! y# _) S% H8 T0 I
};" n8 b8 Z9 t0 U% `
class CInventorySort+ _& U, Z- E! o g A$ D/ I3 P7 w+ M' p
{
7 b. g& V, ]$ h1 c+ d9 @public:2 `; N& A9 l- P+ R% G: [/ S* c
CInventorySort()- j% f4 d$ K, R
{
% B2 C6 k8 {: l" `6 g( x5 a7 [ m_dwPos = 0;
- Q" g! ]* n7 m}
- q# b" r0 W: u~CInventorySort(){}
+ M6 {% U3 W) S6 y4 R; Qprivate:4 ~0 i7 |" z* G( {9 X. ]; Y1 v% y
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息) _ o: j' s6 Q* r1 }. \
DWORD m_dwPos;6 Z7 r# f. ~5 h# J- K* k
public:
6 u9 ]) u* F9 E4 S) G6 Uvoid Add(BYTE nIndex)
2 F" Z# Z9 e- L/ p; B- F# r: j{
* y1 v' ?% O- ? if (m_dwPos >= MAX_INVENTORY)- N! q( @1 b) N3 E: D, u
{
3 m( X/ x/ F% b) ` return;% P* Y) t! `& s) R' C# \# |
}) {) j0 {% z; |( V) K, f" I
m_Item[m_dwPos].nIndex = nIndex;
' q% E) U6 q$ p m_Item[m_dwPos].dwId = m_dwPos;! |0 n' {( O% n! l; x( B9 M3 o
m_dwPos++;% P6 I6 Y e7 c7 Y8 T4 A
}
7 q, d) }! W5 N) @9 t( VBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
* Q9 C' X: b' }6 b6 ]{: y3 w' x. G4 y; p! K
for (int i=0;i<MAX_INVENTORY;i++)* J9 ]; u/ x S6 I$ h
{! i- d r8 u8 _- t Z- A# Z2 M
if (m_Item.dwId == dwId)
& A/ U# l; q8 u- b7 R {
; G( M) f- e1 m! V& _1 Q- g' z return m_Item.nIndex;* s% N: S: j1 p5 c" `$ L
}4 U* @3 k/ W$ L9 R# s
}
$ D0 k+ y1 Q! d( z8 t7 `: n5 U, [ return 255;
# L Q% L2 S. h}
/ x7 V- P5 W( Mvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置4 d z: c$ w" A5 S
{
% W. n9 U" M" i, T7 n2 e BYTE nTmp = 0;: G' }# g9 J7 T' e. h
bool bDest = false,bSrc = false;8 Z8 R, w% k. [6 B. W4 w
for (int i=0;i<MAX_INVENTORY;i++)$ f2 ~ \" `- c
{" ^1 K; R1 K. x! l
if (dwSrcId == m_Item.dwId)
# [0 P- B! U: ^. } {
# _0 J6 ]3 O( ^+ J* o! w, W //id相等 则 改变对应的dest和src
$ F4 `! L5 P+ O: _0 ^, c" M6 i/ z/ E nTmp = m_Item.nIndex;
' S! c6 }) u: `# e" ^ m_Item.nIndex = dest;- o: i2 i% f2 j% A8 p
}
1 u! O2 u( k2 ]" D% f }
; L6 R, o8 n0 i) p+ ? //临时数据保存完毕,交换开始
$ H( N" Q" }6 Q. I- G9 } for (int i=0;i<MAX_INVENTORY;i++)
7 j& q4 b% s: L4 p* J2 J {3 L* D! t& {2 l2 I
if (dest == m_Item.nIndex)
6 T# q7 x) E5 @9 x8 v- I, I {' X6 b2 \$ F2 f4 l
//id相等 则 改变对应的dest和src
/ ?) W1 u* k7 k m_Item.nIndex = nTmp;
0 f& y M8 Y6 S2 D1 Y5 V; Y) Z( Z }
( y! W' g: f1 `" }0 P' v& v }
& e7 w4 r# X; O! g5 L: v}
% |8 `4 [+ l, z. D3 X7 o};2 K" r3 s1 X/ N* Z
-------------------------------------------------------------------------
' J! o9 a' ]2 [/ h% @2 u依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )" i: a2 d2 _1 M' ~3 O
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
* y4 ~* U# H3 w' }. ]! ?& E1 E紧靠其上添加:
6 `6 F* \% G2 S4 {/ X$ ?if( pWndBase == &m_wndMenu )
# q* V: t Q5 s{- a+ K N- S; I Q) d
switch( nID )
0 _! U4 f( Q C0 y, k4 ^, t {' z& l5 n$ a" e3 O* D {
case 2:
- W+ |& J$ z$ [( w {9 v0 B4 Y* w9 x7 Z' |
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);# m M; Q$ U, E1 P
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
4 f! P0 ]& b: G! z {
$ G* R. j2 ^6 V break;
" [$ O& d0 d9 { }3 d. H) M1 X3 J% j: m7 X$ D
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)# `+ A5 t7 j5 ^- s
{# p5 p7 p) i7 `8 I& W5 B& f) L
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);2 N$ C% d2 r& Y/ ?' i: M, ]
if( !pItemElem )
$ S: j/ u5 T- t" [$ W* Y7 X$ ?4 S: Z continue;
3 n/ f# G& ] z. K8 ]1 }- t if(pItemElem->GetExtra() > 0)
& |% r3 l& \* z' r! a% i$ ` continue;
4 s& X( Q$ M8 g3 m* t6 ?. i if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) % `. f, d5 b- L" h" @$ o
continue;
- s- j( [" c7 k$ s: Y- K if( g_pPlayer->IsUsing( pItemElem ) )% W4 p. z9 v- N# [2 d/ D9 r
continue;$ ?+ a8 b6 U+ m0 \
if( pItemElem->IsUndestructable() == TRUE )$ \! r- C/ S& j7 n0 Z" }) e$ M
{- P" ]3 h6 y. M# D, C( ~5 G, h
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
8 I# Q# @. Y- J+ r! K continue;
3 d X# K& [9 ^& A( _3 w2 }" s' G' g& y }3 N5 [8 S5 t3 E2 [' o
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
d8 f: P- D% P* Y }
/ G1 U2 O9 K. w( a2 J break;; j1 O% x" {& c! d2 ~9 r/ A
}
4 P: a. t. Y; V0 h8 ~3 x+ l( G case 1:
/ y- R4 r3 `$ q7 c% A; ^ {, f* |3 a( P4 J1 s5 Z8 a3 v
//整理背包
3 Z. P+ v# R2 K, F2 F/ v //////////////////////////////////////////////////////////////////////////
1 g1 J: Q5 o. H8 `! _ //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
. K F& B; |/ d //////////////////////////////////////////////////////////////////////////" X2 J, _$ [! ~$ g
//////////////////////////////////////////////////////////////////////////
4 V. ]4 N4 ~' P- E CInventorySort* pInvSort = new CInventorySort;/ t6 ~$ i" ]2 g R# ~ y* ?. z# g/ Y
vector <sItem> vItem;) J. W8 {! a6 C
vItem.resize(MAX_INVENTORY);//初始化大小- M, d/ O( S; A* @& |
//////////////////////////////////////////////////////////////////////////
0 \9 w& D: M# s //填充数据
4 u: d0 o3 r- K6 I8 T for (int i=0;i<MAX_INVENTORY;i++)8 [+ _3 D3 L E
{
e7 q. I- r$ h7 Q- |5 U" G CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);& ? e; r, Z$ w2 x4 t& b* m2 a
if (!pItemElem)
) s1 ?5 d% f: a, {$ N( @/ p {3 x# t& ^* J4 w' d* a4 }2 \
vItem.dwKind2 = 0xffffffff;; R. i, I$ \% c+ p W) w
vItem.dwItemId = 0xffffffff;
; C; P5 H3 G( J) O9 e& k* y& N5 U vItem.nIndex = i;9 \8 v& C7 m @* A: v- U, v# m
}else {
( Z" Y9 _# a% ?3 M: @: H+ W ItemProp* pProp = pItemElem->GetProp();
2 K1 H2 F# p2 W( x vItem.dwKind2 = pProp->dwItemKind2;# @- z& R, j1 R9 m- b7 k4 v* H* X6 x
vItem.dwItemId = pItemElem->m_dwItemId;' B; b" x: C' o2 v
vItem.nIndex = i;% e% i! \0 M1 b7 ]: C! w) C o, l
}
& P4 ]7 X3 f: O5 U$ x3 R. L //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
2 }5 i0 q6 A! A }
' {6 i3 c% M! ~ //////////////////////////////////////////////////////////////////////////! u) L0 _0 W& j$ ^2 I' C5 ]+ E
sort(vItem.begin(),vItem.end());//排序/ }, H, h& s- T! k* p9 ]
//////////////////////////////////////////////////////////////////////////
0 l: d% ^; k1 q: E) b- s/ @+ w- p //交换3 k; q' c" u9 N2 c
for (size_t i=0;i<vItem.size();i++)
! E' f! W* P' X. k" C8 L }, g {) s- v, w; M3 p3 _+ _) ^
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);$ M: Z q5 a. i L
pInvSort->Add(vItem.nIndex);) _# k$ t9 A4 X U6 B3 y, G
}
" m% N/ C% N. L" n3 Y" M, _ BYTE nDestPos = 0;
- p. b2 X9 l( n' B$ F for (int i=0;i<MAX_INVENTORY;i++)" ^; N4 m, H$ J# Z/ [/ ^
{
9 _8 X! f9 E# q7 p U: a* T- B' h+ v CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
9 s6 i$ ^$ M n if (pItemElem)
]; C2 N, M7 E: m {
8 }6 @: D/ E4 n: w! P. }) w if (IsUsingItem(pItemElem))& @4 ~ V3 e. B5 u
{
' ]% l' V5 r, V //这个位置无法放- |0 x2 G6 m" i' j) d% X# Y
nDestPos++;' l, Q# n1 f& b& o" [
}
' h& q0 @3 v; S* s1 Y) }8 r0 W2 z }
) V9 P4 Y4 i. T' H6 N. @ BYTE nSrc = pInvSort->GetItemSrc(i);, ~4 Q* ^! I( b- ], ]
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
2 y5 `# U1 [- P# [$ l0 Z5 T; d if (pItemElem)7 |- b' q. N$ ^' M0 ]
{
. v* @- \! C( g7 B5 Q1 Z if (IsUsingItem(pItemElem)). z5 v: |2 D/ Q8 I( a5 s% e7 ~0 K
{# \0 O. p ?- G6 P% H
//这个道具无法移动,跳过
/ ], R' r( K) C, C* g( b) v. V: Z* N continue;
( p; ]; ~4 f6 R' P7 ^# U8 Z }
$ j' B0 a- i- K' y6 @) v9 J. E }else{/ x/ {3 ^3 R/ O( w( D/ M5 `6 U
//空位置 不用动
2 C( M! C+ ?, A- l: z% t continue;6 V/ T( E. r1 W3 G3 |# i
}
5 y r. Y t1 E6 \+ _0 [ //////////////////////////////////////////////////////////////////////////
$ k/ a& H1 n* {0 H6 N* H //开始移动/ M2 t% F$ {2 ~$ ?0 O, S
if (nSrc == nDestPos)
5 n$ B% t# a9 T0 A {+ t9 ^. z; g8 m% p
//原地不动
" z* Q% x5 G3 ` D nDestPos++;
/ u- l _ Y+ T; V2 F continue;
5 J( z |) D6 Q& `: `) J6 g }' Q, t+ h. |) T5 r0 X4 V
pInvSort->MoveItem(i,nDestPos);
( c+ y4 I2 T% w) K g_DPlay.SendMoveItem(0,nSrc,nDestPos);( \& A7 Y% u( x6 V L& i" u1 c8 l& A
Sleep(5);
1 a0 [2 j9 V8 I; I6 p) a //Error("移动 - %d->%d",nSrc,nDestPos);
5 g$ m6 l1 J+ c4 \ nDestPos++;$ V4 M( z) s, w
}
" g$ F: t8 ?# M1 a1 @ //取第一个元素的信息4 h; \5 c9 A6 M. [
/*8 K* f. s" f+ P( x
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
3 t j# ]8 u1 v2 u$ t {4 W- o3 |* |, B. x: U% ?) t
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
1 i A1 I% Q0 C3 n3 y4 N$ n g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
1 u f3 q' j2 H! s }# D6 L" c+ j% y5 q8 j1 T
*/
{6 r9 Q1 L: W# J9 ] //////////////////////////////////////////////////////////////////////////
& m# n9 l, g j1 N break;
2 s! ^* t) Q$ J% B# ~3 S1 \' x3 k } b @" a# `* b% d( r$ H) d- U; s
} 5 s' j6 P& e; A* X
}
& v7 i* S6 K$ wm_wndMenu.SetVisible(FALSE);
/ c/ \ V6 W5 V
, i) [& X6 M {4 d4 ^" t$ @( F--------------------------------------------------------------------------------------------------------& z: y. E) F( v
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
/ l9 e" B8 O( i6 T/ t{
, o. Q9 z' ^: f* p2 tBaseMouseCursor();
% b) |) Y; t! b, b}9 }1 n: T2 O+ p9 e& u
在其下添加:
7 R) j( h$ ]2 e: L/ s) _void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)! ^, {* `& T% @/ w( H% s
{
8 B+ ]+ q; }+ em_wndMenu.DeleteAllMenu();5 Z/ F v1 X K" {0 Q/ R
m_wndMenu.CreateMenu(this);; @/ x8 F0 n9 N- V6 C$ @
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
3 j: S \) Q6 C% {, I* Z, k
: I S0 k, V) _- Z- C8 |if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
* q( a& M! E8 h, J{
/ |6 }4 D. a1 ~- g) t //P以上级别才可以删除所有道具
( b" W' v( f7 k3 _7 s$ g m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
) l( u* D( O- @; b$ [}' J A K' n( R# L u! a* W9 o
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
/ q# g5 R! c* sm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
+ R# }. l$ N6 g7 u# h# a2 {m_wndMenu.SetFocus();
1 ^' e# A5 c) ]4 @: p3 Q. I}1 [+ z4 g) I4 a# t6 ?: s) [
------------------------------------------------------------------------------------------------------------7 D S) b3 R6 t7 i
*************************' M# Y) N( b9 x! H/ X, ?+ u
WndField.h文件
3 N% \6 G7 Y5 C* i2 R* s# N*************************! f. K( P2 Q4 _! s
搜索:BOOL m_bReport; I: c8 f0 _9 [7 s, t
其后添加:
9 o1 B! y6 _' D2 x1 S' {CWndMenu m_wndMenu;
9 O! p7 m+ i& m8 W5 s搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);0 z0 ]: b# Y" C
其后添加:% l' R& z1 k- q `, i; F
virtual void OnRButtonUp(UINT nFlags, CPoint point);2 i& [+ a" g1 z9 u* Z. \
2 I1 |- g0 m1 |& U. X" f
2 V2 H0 O8 ` v+ P$ D
|
|