|
|
源文件中_Interface文件夹下WndField.cpp文件) `- Z$ E4 g4 r& J- o
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )& N' i5 ]/ {# J7 K1 q( D
4 _+ l& ^: w5 {: C
struct sItem" j: m4 G" N) F# a. P1 T5 A p5 s
{5 b+ ^/ z, z3 e1 x0 ]: b
DWORD dwId;9 }6 f4 Z, {- D. f7 J; E( k
DWORD dwKind2;$ \& w- W8 R2 e9 L( u2 @* G% z
DWORD dwItemId;3 b; B- X0 j" H! o1 V4 l" X' G) i
BYTE nIndex;
. @; i3 x5 {+ ^1 p* qsItem(){
" q' W* i" D" q1 y" Q' e$ P6 A/ n dwId = dwKind2 = dwItemId = nIndex = 0;
5 I: f6 X/ u6 j# q. ?5 u- _}
5 v7 z$ u, S7 I- C; Gbool operator < (const sItem p2)
- j, I$ A# S$ v& p; n{
" U8 B* t& `" j if (dwKind2 == p2.dwKind2)
. y) x+ e6 u& M& Y- v. k {3 D* n2 ~% c3 n; T7 P; Y
return dwItemId < p2.dwItemId;
" J Y) l- l/ c+ a4 C' ]. K4 f }else{$ M$ _; M; R; ^( m+ d
return dwKind2 < p2.dwKind2;" b* ~% i) ?4 t/ A2 g9 E: t% ]
}1 T8 R9 X' t* }+ b2 l! T) L
}6 P6 C0 ^, p. j; r' }/ @
};
& A% i; v* v$ H- lclass CInventorySort
5 a- _, Q% W' x% {0 u4 p8 ]$ p{# W3 _0 Q3 [5 D3 C* X
public:
$ h- r! v, e( l, S+ V8 BCInventorySort()3 C- b8 V8 T4 k% i) |' N; n' g# O
{
4 h: Y4 _! e+ [$ F m_dwPos = 0;% c" c* q2 P) \7 d- O8 Y
}
; Q" `4 _) Y$ P( J2 X$ Q: \~CInventorySort(){}
( q+ @+ X E- R( Fprivate:& a' ]* z# v' D- P6 X3 P! R) r
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
1 D$ [! |1 d# o3 {. lDWORD m_dwPos;# M" u* R( B) D
public:% O& A3 L4 F z! B: ]) L5 j- R* z
void Add(BYTE nIndex)
8 Z8 b$ [4 p5 u k$ x; O2 Y8 b{
& i% x$ N9 j9 g4 ^* V! J5 Q3 ` if (m_dwPos >= MAX_INVENTORY)
1 ^+ y' E6 |' o! N2 ~* F/ c {
' ^6 i; {5 U6 \' G9 `. u; L: f return;( e( _: |7 ~- z l4 Q7 W5 x
}6 f8 j1 i5 n/ Q( v7 z4 c
m_Item[m_dwPos].nIndex = nIndex;
* l1 ?' B0 ?0 o7 d7 r0 G m_Item[m_dwPos].dwId = m_dwPos;7 l0 r3 E6 j+ F$ ^* H+ r
m_dwPos++;& z& y9 r- N0 F5 O$ M8 s% N
}+ z( m/ @' ~2 a1 \$ l; @. a
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列& v+ K C. N r `2 {3 o: F
{
4 w6 E2 \# Q7 [ for (int i=0;i<MAX_INVENTORY;i++)
; A( M( K0 Y" q% }2 @- ]- q {
p( j7 D9 `( O& | if (m_Item.dwId == dwId)/ Z7 ]# b6 j P7 a$ C. o4 {$ P
{/ r# w t/ v- c6 {+ A
return m_Item.nIndex;
0 g; R8 x# [) ]$ H3 D3 {' f }
; B$ @! j, f: q! \6 j& Q4 k }* h% b' z% ]9 |/ h1 }3 R3 h
return 255;( l7 f4 S8 \ W6 Q9 I
}
* a( J& @8 Y5 `( N0 l! ]) Evoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
# E# v# `" R9 S' v) k{
, m% Z: i N( E7 ^+ N! i BYTE nTmp = 0;
: d2 i. v( v- _! H% P bool bDest = false,bSrc = false;
: R- F7 q( `. K1 y" b: J for (int i=0;i<MAX_INVENTORY;i++)) a% Q) ^8 |' |# s
{
: F+ Y! _7 J) O- w3 l$ w1 \ if (dwSrcId == m_Item.dwId); w& D: V% D: T+ ]
{
2 ?" _8 O' h- f% ]! E1 q1 R //id相等 则 改变对应的dest和src
: e7 W* y5 Z; q5 F$ o$ n nTmp = m_Item.nIndex;
% j& e1 o/ s& t# t m_Item.nIndex = dest;
; j* W' V' o9 x& V+ v& a }
8 P0 K$ T. S$ z2 _" Q }
- y) y, z0 r) B7 C6 U //临时数据保存完毕,交换开始
! \( w& l2 j* ~. u7 q for (int i=0;i<MAX_INVENTORY;i++)
! d0 W8 K* L3 x4 P {. i6 G2 Z+ S# E( F/ {
if (dest == m_Item.nIndex)
: v- @7 Z h! V! [( D3 b# `- S$ G1 p {! S6 } |8 X" k3 L" }4 E
//id相等 则 改变对应的dest和src" E. ]( u6 w) L* Q
m_Item.nIndex = nTmp;1 f7 E, d2 N c5 ]
}
6 X+ D6 W6 u3 l3 s5 b }# i+ N' O" x7 V4 r1 q! O0 w0 \- ?
}
k/ f8 E' ]+ w3 s; X( b};% I0 }( k9 V; H# F3 D$ N
-------------------------------------------------------------------------
% P2 w6 C/ k% r- d依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
1 t* e9 V7 Y; G搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);, a) `3 w; }4 C
紧靠其上添加:! k( V: i2 s8 M( J* L
if( pWndBase == &m_wndMenu )2 p$ j$ L: B( _: N/ ?7 J
{. n, q, L& r6 }" \" h
switch( nID )
; F6 I4 [) q6 i+ E {
3 h# K$ ]% P, I- q7 X case 2:" N9 G0 \4 n$ {3 l2 ?) P
{
3 I4 L0 a, H/ c: j) R, o //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
; }5 R* v/ n1 m3 _ if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
G8 J/ ]% h' N% ]. Z {; Z3 u7 ~# S# \ W/ l# m' U& S: J7 ~
break;4 ]1 r' p; ?9 T( J7 B- }$ [
}
5 r9 W2 ]& o9 G+ s1 C for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
( ` Z/ r; F0 ~ J {- G% g c7 m1 U- u
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
) i( p- M5 s2 |6 ]9 \ \ if( !pItemElem )( G7 ^- o: `, N7 t4 r
continue;
P; r9 A& b) b7 u7 z$ T/ Z if(pItemElem->GetExtra() > 0)' P& { p! o$ {4 h; q% Q
continue;8 p) ~/ Y8 O' G: l
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) - p( h. @4 H/ s) \
continue;
: S3 h& H8 D8 p# l: z9 c if( g_pPlayer->IsUsing( pItemElem ) )( u* S9 B: ~+ X8 N4 m4 K! d
continue;, Q, d& A. x: w: A+ m7 C' E8 k
if( pItemElem->IsUndestructable() == TRUE )
9 a" W3 F2 J$ i {5 a/ {$ e9 A% z# G- m8 q+ F/ Y, ~
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
; Y1 ~* g5 A8 a7 c( w' Y continue;
! ?) h0 m+ x: e% f }7 z6 t8 u! P5 Y& i
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);0 M% R1 ]1 Y1 r/ q$ I# W. {3 c( E
}
5 o' d/ P9 t3 j* {& Q break;' K4 V7 M3 l# d5 Z' s' W. r
}
g6 R( Y4 W% D- N3 X" q3 a2 C case 1:
: m W- f9 z, j {8 W$ D5 _) U4 y/ G
//整理背包
# o( J5 I! n J4 o2 x! J4 A. X //////////////////////////////////////////////////////////////////////////
" f) ]5 X7 M+ ~8 c3 u- q //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
% X5 t, g7 |$ `( i5 |0 j# j! o; I //////////////////////////////////////////////////////////////////////////: c( D% n B/ j$ E& M2 y8 F$ h
//////////////////////////////////////////////////////////////////////////4 N6 o" j$ E6 a
CInventorySort* pInvSort = new CInventorySort;( |6 C8 V0 J9 T: R$ g" d
vector <sItem> vItem;
+ S2 A6 i3 U9 k" h8 x vItem.resize(MAX_INVENTORY);//初始化大小7 o& n' O+ G: `) W
//////////////////////////////////////////////////////////////////////////
% w x9 X' @# M8 S //填充数据
* {" h7 m& q- u% q- i; ? for (int i=0;i<MAX_INVENTORY;i++)4 ?5 X+ b' I* U _8 l% @/ l
{$ q( a# v3 m$ [/ n1 @3 o5 ?0 P/ v
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);4 Q' S5 N$ h$ y/ C7 v
if (!pItemElem)
9 W6 `; |3 P1 X- Y$ C {1 Z% i' Z1 s' e( U; S6 _
vItem.dwKind2 = 0xffffffff;+ z0 `6 z' ?$ [3 D6 ^
vItem.dwItemId = 0xffffffff;9 F4 o$ H& J/ [% {4 M
vItem.nIndex = i;; O- x2 q) t- j B- ]) g! w
}else {
8 z0 p: G% O1 f2 r ItemProp* pProp = pItemElem->GetProp();$ R$ i g& w! _/ L0 ?' y; g
vItem.dwKind2 = pProp->dwItemKind2;/ f2 d; P: |5 B1 z7 O# i# u$ x) u
vItem.dwItemId = pItemElem->m_dwItemId;
0 Y1 z8 k- X8 ]) P. Z vItem.nIndex = i;
' p& b1 K% B# h }
; S. k2 @3 U# z1 `0 m4 } //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);' @. o, o9 Y+ b T' t" o
}
- K" [# k, S& x3 U //////////////////////////////////////////////////////////////////////////
* [; E0 X3 r2 W d9 [2 E+ ]0 Z; s sort(vItem.begin(),vItem.end());//排序3 v1 F2 ~/ P V: y( L9 g7 s
//////////////////////////////////////////////////////////////////////////( T7 {) Y" `1 o# b; t- P* _
//交换0 p" {5 r( \. _# j
for (size_t i=0;i<vItem.size();i++)1 s# `0 w5 x& J
{6 g8 r7 @, s3 H5 \# |. L
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
5 c O3 C* [3 s1 J* m8 } pInvSort->Add(vItem.nIndex);2 d' Q/ Z6 Z% R. ]3 j" e
}
3 l! Y* b H9 h% ~" \ BYTE nDestPos = 0;
. g0 j; T, \4 Q! E& t( a7 h& S q for (int i=0;i<MAX_INVENTORY;i++)& o. i! }! o) \
{
8 |, P2 \! }) |. P/ b CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);/ b/ K; v" { _. \
if (pItemElem)
$ x4 X1 L$ z2 j/ Q1 D9 w {/ P( s2 z9 a7 b/ S# \
if (IsUsingItem(pItemElem))
# G& l- b+ m# Q( P4 }+ J' B& Q {
' t! v/ C: s/ }: a g //这个位置无法放
* R% G* z9 F& D7 b7 ] nDestPos++;
4 k7 o* V# }7 t B( c/ ] }
% y* L6 _* I8 I& { }
3 ~+ ~2 ]! j' I BYTE nSrc = pInvSort->GetItemSrc(i);7 ]* p2 w' g* [3 F& ]! k0 l; ^9 s
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);9 A9 |; U9 C7 B, k* o
if (pItemElem)
7 y, ^# F- ]1 v( E( q. F0 o8 I {! [& i! c& _2 M. f) j2 e7 z! \
if (IsUsingItem(pItemElem))6 P0 @) Y' [, Q# @/ h$ o
{
- }) R/ A# l* U F7 Q2 @& K //这个道具无法移动,跳过
N6 e) e0 I" W+ J; D continue;
" o$ w& h4 j, b+ L: g. }3 x b4 a }
# ]# n$ x) C, r: Q- A }else{
) Z+ X8 K1 `1 @. a! d7 u //空位置 不用动0 K9 A9 ` l3 D4 _ ~! Z
continue;
0 f4 ^5 x$ F0 g% j& D1 i% e }4 F, ^- U; i5 I7 ~. S3 `& w
//////////////////////////////////////////////////////////////////////////2 }5 f( U% Z: k2 C
//开始移动
$ m9 K4 m8 \8 a1 r+ b if (nSrc == nDestPos)3 z1 D0 L9 I% L
{
7 u, e# a7 x c! }# S9 _ //原地不动
3 R) ?: E: Z. R3 A7 p nDestPos++;
2 n) X4 {& [5 n9 E continue;
3 r7 z0 c/ j) q1 K, F0 z* ` }5 h& ^$ V2 z7 K6 [. u! @$ {# C
pInvSort->MoveItem(i,nDestPos);
) C% x8 t) E' I* z g_DPlay.SendMoveItem(0,nSrc,nDestPos);
3 E4 E( o; S3 t Sleep(5);
; m9 \ [% ~+ c* o0 x //Error("移动 - %d->%d",nSrc,nDestPos);& [9 \. y; k$ Q2 S
nDestPos++;
) P6 A: U0 M8 h$ S7 }/ ^, g }8 ?1 i; T1 I0 i6 h0 x' N3 i
//取第一个元素的信息
/ W5 F6 X7 O' K; N% L( q c /*; C' s7 X# I- `. X. Y/ ?
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
" n" L5 V: G. K; `5 v- e6 a& i) L {
1 v: U4 ]+ g) s* |! M0 E" e5 C Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
# Z! Y* `& i' c: n+ ^ g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);( s6 r3 X6 _$ F' K8 N: |
}
" F) D/ s c6 ^ */; X( }/ @8 O* f6 s8 F$ O
//////////////////////////////////////////////////////////////////////////
4 H+ B9 A- k V1 ]2 B4 E break;8 E: Z* @8 U+ H5 M( e/ I
}
' ]9 x8 ~ [9 ]/ y' l' i9 Y$ ] k } 3 X9 U0 }' d% F+ q: S
}
. z' n# {" N7 V, @* _8 _m_wndMenu.SetVisible(FALSE);: ]% s9 X+ f1 q4 @9 i# K# f) f
& B h0 x5 k, e$ F' c% O2 X
--------------------------------------------------------------------------------------------------------
8 y( U; O- i& z* Q7 `- Y+ P搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)2 C( c- y9 |+ w- ^8 e
{$ T# K+ M+ b. P3 f6 ^
BaseMouseCursor();
1 P [ S( `) B9 R% }9 X}
5 @+ M& I- N5 t P/ B: q5 U: ~在其下添加:
$ R$ f% Z5 Y/ g; V2 D) pvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point) e1 c; ?! I8 j; p$ s6 J5 P
{
2 ^8 Y8 s# M( mm_wndMenu.DeleteAllMenu();
; y' H4 F( s _: a9 r9 [- g4 Bm_wndMenu.CreateMenu(this);
6 @( p- [" F- @! c' [4 Cm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
2 e' x5 m0 b4 e+ ]/ } O2 Z f5 i
# j% E' C$ M* _& U7 P- t- Fif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))) J2 h' V4 D: N& c: c( j
{2 n4 k. O& V$ E. h; G1 d
//P以上级别才可以删除所有道具
7 M" B5 t$ C4 J4 t m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
' o; W5 h5 o9 O* i}
& w% u( A+ v& X3 X6 n3 g& L rm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
( ^. D4 h% j( n" B& v N1 Tm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
7 { H4 z4 U9 [* }7 O) z2 Em_wndMenu.SetFocus();
8 Q2 {2 s$ [! g/ [% t# Y}
5 |: p' g6 \9 G( P# A8 F8 v" J------------------------------------------------------------------------------------------------------------/ C* [& _) B6 E4 f
*************************! Y$ U' y8 {4 c# L
WndField.h文件
5 |6 S, }8 w: L, q1 C' C/ ^*************************# |1 A0 j- y: t
搜索:BOOL m_bReport;
* l; Q e) T, Y其后添加:9 S/ z/ R' W8 h6 r" V P
CWndMenu m_wndMenu;
# A; j- I" _+ z: m搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
3 G* W8 | P" c k& ~* I其后添加: `% O8 a/ l8 u" i) X
virtual void OnRButtonUp(UINT nFlags, CPoint point);
9 R3 D- ]+ p( a& z4 G5 C, h3 x! i3 B7 U
" P1 w E! }8 r) t |
|