|
|
源文件中_Interface文件夹下WndField.cpp文件9 c9 w- P! l. T& X4 Z f
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
' @% t1 H i9 m9 Y! Y8 E# g' p9 \
@3 h0 J- Q1 _: ^4 R2 y7 Cstruct sItem
; e9 c: e( i) p, k) m7 A3 b{
, R4 k+ q& V& y6 h/ [- l& IDWORD dwId;
/ y4 ?$ _! }$ d! g5 W y+ oDWORD dwKind2;
. ~/ y6 h" t& K/ HDWORD dwItemId;
; y$ Q5 U, @0 ?BYTE nIndex;" L, t: F0 X$ ^ A$ G% |5 C, \- l
sItem(){
6 a( y7 F# ]3 v dwId = dwKind2 = dwItemId = nIndex = 0;& i, ~) o/ B; I) b! m
}
4 O1 B3 ` h% dbool operator < (const sItem p2). X/ g0 Q! M7 j; s2 H& Y0 @
{3 g" m" d. \- y
if (dwKind2 == p2.dwKind2)7 v6 I" I: O6 K9 j* ~! Y* H
{
9 v- G7 c' F2 B% _ return dwItemId < p2.dwItemId;
1 P: S- o8 v8 ~- I) `; i* ? }else{
9 m# C1 |& c6 ]" q- y$ _: ` return dwKind2 < p2.dwKind2;( e; I7 B6 ^6 e- O3 l
}
6 X+ r" @! Z& W' A( f. n7 o) C# ~1 f" K}
( c, c6 U! e$ u# ?};
' m+ L. ~3 {& g/ i, Z P( P2 L( X4 mclass CInventorySort
4 X; A+ f6 l t9 m6 d& \{
! t6 |) `7 f8 P* k" dpublic:# j) j8 U1 I& `% [$ G
CInventorySort()
: O/ f* J- e' Y. G/ V9 H; X/ C{& L7 k4 }) Y3 W! b
m_dwPos = 0;
/ C( |; @5 J8 C5 u# J2 I}# d# f0 U" x3 {+ G7 c; R
~CInventorySort(){}
5 e& I: d X( M" Vprivate:
0 n# B. E: V8 o0 H9 j$ Y1 PsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
: v$ n1 q: I: {! |" MDWORD m_dwPos;
/ b; ~2 g% g) ?8 g Gpublic:
8 [, Q+ [; |0 w' Evoid Add(BYTE nIndex)
/ ~+ r0 J7 a9 Q+ I( W{
3 k2 e( u5 G( Q" q; x if (m_dwPos >= MAX_INVENTORY), `$ V% m# q* E, I6 Z9 X: m
{( Y9 c! O& x% x6 z+ n7 E
return;3 f# A. `; F. X
}
; `4 S: ~6 j: Q8 \) A m_Item[m_dwPos].nIndex = nIndex;$ @1 @% m0 O* R8 o4 j
m_Item[m_dwPos].dwId = m_dwPos;5 [- z" m/ r! |, D& M6 f2 U
m_dwPos++;
! H. L9 g) W6 \( E% N}
P4 c# C) F, M2 d3 t; w' D) t% I, cBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
7 W& @' B# D6 V6 _; B{
/ w X+ M4 Y/ }* d* R8 w3 ~ l$ Y9 @ for (int i=0;i<MAX_INVENTORY;i++) V. ~9 C4 _# m) ]
{+ E t6 s M7 K8 L5 j
if (m_Item.dwId == dwId)6 ^- \* b% Y( |) O, E1 f
{. N+ a; T3 ]# P
return m_Item.nIndex;
# l8 d) v ^( S }6 a- o% @- d4 C5 F" H! S5 V' K
}
. S; O4 d- H9 I return 255;
5 ^0 p, O6 a$ r}8 E) V% H4 m3 k: I: I0 F
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置( [% n1 o! W: {! x/ p* Z9 M. k& ^
{
( v9 Q/ ~3 K: p BYTE nTmp = 0;: p6 w" B. R( ]8 k
bool bDest = false,bSrc = false;/ L( t( J6 a/ j k. h' D
for (int i=0;i<MAX_INVENTORY;i++)$ O4 I0 p- o( C" z% V% Z1 K
{- y! C' ?" K$ O+ w" f
if (dwSrcId == m_Item.dwId): J0 I" D" K. E% q3 Y, m
{
- r$ s/ I( J6 }7 O //id相等 则 改变对应的dest和src- D4 x# w& @' U/ t
nTmp = m_Item.nIndex;1 f$ O$ t9 \. D0 K: C$ y1 @- w
m_Item.nIndex = dest;! M! s- S v9 `: _4 G
}; ]& f4 D2 C% f |: x
}
r, d6 [4 }, V8 e) h //临时数据保存完毕,交换开始) t! f8 R' W% @$ F/ ^
for (int i=0;i<MAX_INVENTORY;i++)
" q4 ^& N$ D1 y3 h4 o+ t0 V {, y, N9 J, M- a
if (dest == m_Item.nIndex)5 U' B' U8 J+ m4 }0 X
{4 o7 E! l! S% `* Q6 v$ j- `( d; }; U
//id相等 则 改变对应的dest和src/ I- A8 J5 B: S
m_Item.nIndex = nTmp;
7 T' E+ x' V2 f; L }
) A+ n3 M" R) x. C* t! G7 w }. N% g( n" L* z0 N
}
4 _# N# d" X" D7 A% }- t; m};
9 l! ?2 F# x! E; m+ k# b) I-------------------------------------------------------------------------0 B" t1 T( W; N
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )) J8 ?, ]0 N1 c8 N( k* h1 X( P2 V
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);% G4 m' ^; [6 [5 ]" q
紧靠其上添加:$ {& ?) f' [$ V- f2 C2 ^1 c* \
if( pWndBase == &m_wndMenu )6 z2 [, Q, l* i: `) [
{# r4 ?9 Z) } A: H! j
switch( nID )
0 q# y& Z% i, c1 x {) s# G* U9 k% q7 g, G3 L8 S
case 2:
- E2 a4 Y, i; c" L8 } {/ L2 u3 N4 i1 ]0 ?- ^
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);- K% z& o) u$ ?$ H3 q# H) _) M2 L
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))2 E6 h( H( Q) _+ g% V$ S4 Q6 ^9 t
{2 E5 n. @1 ?- L2 a, t% c! [2 e5 a
break;8 O0 l5 ]. s- [0 P) B, D
}
7 h3 E X% K1 z& j for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
; z l6 A7 O4 m- O$ C {5 `' s, F3 C+ r2 N
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
; h x" L: r0 I if( !pItemElem )
# A$ F) g& w& z1 g! p' e" { continue;$ I* [. g1 D& I$ e, a* R
if(pItemElem->GetExtra() > 0)
4 ]8 l8 c! ~! F( q. ~- v continue;
0 d1 o! j3 e# @+ ? if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
+ @& \$ V+ V" I" \. V continue;; Z* K7 O5 D& R, r& C" i1 M- R
if( g_pPlayer->IsUsing( pItemElem ) )
+ q: C! }; S3 m$ F3 F% }7 g2 e* ~4 P continue;
; h% \; O7 z/ d* [% v! V if( pItemElem->IsUndestructable() == TRUE )# q1 m1 v- i7 {& P
{6 W9 [$ V% U, O# S. o2 G) J6 \
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
1 v3 T) v; Z* u- S- _# k2 M0 w% I continue;
5 Y2 a# g* m$ R8 X0 z }# i" ?% a/ A6 H; ~" B
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);. x i& J |5 W1 T+ G
}
7 y9 l2 s0 `2 X break;
$ g' n' e* B. H7 t# | }
- i8 V( F2 y2 d5 V, H case 1:
6 Z3 l2 w* k. D {3 u# v, y, {3 Y! ?2 q$ D& d
//整理背包; ?3 s9 J/ f9 r, Y# ]
//////////////////////////////////////////////////////////////////////////# {2 a1 E; P6 O
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );/ T# {& x# B# y! G) O% c
//////////////////////////////////////////////////////////////////////////
" f/ {7 W6 U2 T3 ]+ f5 Z //////////////////////////////////////////////////////////////////////////
# X* ^9 N8 _! w, Z7 E8 M/ Y+ R CInventorySort* pInvSort = new CInventorySort;
8 ~$ U0 b8 D1 ]3 {5 w% k) j vector <sItem> vItem;" Z! W# @( S1 u3 I% C) M( g3 U" R% Q
vItem.resize(MAX_INVENTORY);//初始化大小
# x5 V& X- Y" J //////////////////////////////////////////////////////////////////////////
$ k3 g; x$ Z; `3 D. ?9 U* e //填充数据! _7 q$ S3 i9 s' k
for (int i=0;i<MAX_INVENTORY;i++)/ k* J8 k# G- S
{
0 u; ]/ _) l/ v4 P CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
! M6 C" ?% | l1 I- t( Y if (!pItemElem)) K6 k* {7 m' ~
{ Q. }* M& I' k+ b
vItem.dwKind2 = 0xffffffff;
; k: | f/ N/ [8 E# X; x1 |/ D vItem.dwItemId = 0xffffffff;: @% N" o- a. E) u. d
vItem.nIndex = i;' ?( a2 _ w. w0 J
}else {6 O' _, _' ~! x, @; Y% y
ItemProp* pProp = pItemElem->GetProp();
# d6 x0 s- X8 z3 E7 m; z( g7 Q vItem.dwKind2 = pProp->dwItemKind2;& n. D! j$ Q* m/ W' M' U
vItem.dwItemId = pItemElem->m_dwItemId;
0 T5 c$ o& Y4 f( R9 u- I) T, b) ] vItem.nIndex = i;' C Q+ S: k m! m; X& ~
}) g8 H- G+ Q. k* V$ ?
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
3 q6 C- Y9 u/ ~+ P }
$ d+ A' ?7 H# U3 } //////////////////////////////////////////////////////////////////////////
( q: y1 f0 N. N) i; w sort(vItem.begin(),vItem.end());//排序
( o- {& ]$ `& H( k# n. C8 j- y: Y //////////////////////////////////////////////////////////////////////////
2 \- F O+ c8 l0 @/ b# F+ U //交换6 F: W5 S5 d# J& w! q( A
for (size_t i=0;i<vItem.size();i++)2 K0 I4 J6 W' N( A/ Z4 v
{. [5 |8 [7 y8 k+ O
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
) T# f; V/ N- G* P O1 H pInvSort->Add(vItem.nIndex);* j; z% h! r+ `; p
}; } d* C0 w! ?2 U* H W; q' T4 G
BYTE nDestPos = 0;
# R# K" w: \; j1 i" m% Q& k for (int i=0;i<MAX_INVENTORY;i++)9 R7 J8 E" y4 i T: j
{
- Q; r; h! D5 w: H$ H, R CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
3 Y5 J. x" g S# V, T if (pItemElem)
# q8 O+ f3 _; x. r {
) h! v) _5 A8 J) g6 _ if (IsUsingItem(pItemElem))
8 s% m$ q' q _, J0 s0 Y {6 q3 l8 S/ g$ X" B f, T: m
//这个位置无法放
) U, a! X& W1 G; t5 Q- I8 \ nDestPos++;
( h$ q `; i9 j7 p" I, ] }
7 h* q8 R9 Y0 f7 R7 n. e& y; C% A }
. j, F! @" h. k* s7 ` BYTE nSrc = pInvSort->GetItemSrc(i);3 A+ Q; F7 T r' o
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);# R, d* V0 e9 O I' i) S
if (pItemElem)+ a1 T5 d8 S" t0 @1 Z1 Z
{
9 i0 d% Z3 V# \$ m" w. ] if (IsUsingItem(pItemElem))' B* D$ C7 x" Y$ I9 T
{
' r% N+ M. ~6 @1 J //这个道具无法移动,跳过
" Y6 X" D7 l# ?: V3 f; w% j2 i0 \( f continue;
3 i' L5 _% t! ` l( ~ }
. z* G$ y6 \0 _* s/ U/ D5 o }else{
( Y! t: J& c E* J$ S //空位置 不用动
+ J$ c' }0 k& M6 d, @. d9 U continue;! [' k5 _* {; E
} C! Y1 D" _7 q; Q& q% ^
//////////////////////////////////////////////////////////////////////////3 a( C y" D% [
//开始移动
% {7 I' ~9 M# r+ E; N s if (nSrc == nDestPos)% j. D- u/ R' l
{
4 `- h, }0 J+ y' s //原地不动8 b. u% E2 q* h# a( t1 S2 G% o
nDestPos++;5 `+ J4 H9 x$ X( c% l' o
continue;+ s4 m4 |, D8 p2 @* I
}
: ~3 _0 C; V* @ pInvSort->MoveItem(i,nDestPos);
! e* |( P: L5 o" C7 ^* O. t9 y* C g_DPlay.SendMoveItem(0,nSrc,nDestPos);! d" g. p9 u) b. Y; o/ a
Sleep(5);
/ |+ W1 H8 S$ ~8 x) R: L //Error("移动 - %d->%d",nSrc,nDestPos);4 J5 a. C) ?) P5 d. a1 t
nDestPos++;
: ?& s; r& ?$ p2 I* V' S6 [ q }8 `4 n' x) D: z, g! i' T
//取第一个元素的信息0 X4 u7 J( Q7 @: Z2 z0 W, Q1 C) t& M' s
/*
7 N- e; r7 y/ ~8 C; H if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)7 m0 m5 m" ], q- T: F/ w
{0 a! h/ Q1 H1 Q
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
: d' b. n' Q3 K5 ?& p* |3 e g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);" \! `+ X: K6 {+ P# d) ?; G
}
/ a2 n+ V# {& }$ |* n' M, L */: r9 d, [5 F: n& ~3 I9 {5 j* m
//////////////////////////////////////////////////////////////////////////+ s5 d. _! @ ~+ @( g, U7 _6 G" ]
break;4 }' a1 I3 [: |1 B/ B
}
7 |! I; {0 y8 C% Z8 s9 Y0 _+ t } ' e5 \, u) R J7 g
}
$ V8 F1 Z( [- m6 H2 b' G. ^m_wndMenu.SetVisible(FALSE);
" c) |6 N5 D p+ _& z
" M9 V0 L. F7 Y, J* S--------------------------------------------------------------------------------------------------------
& s" `+ I P& f! t8 y( w搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)' t( `5 j7 r {
{
7 C9 ]; Z6 [1 |% vBaseMouseCursor();" b% R3 X( e n- N \" e
}- {4 E T6 `+ V- c
在其下添加:8 [9 |3 o0 `1 @6 Q
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
* F R8 K; B* b+ F- \* G. a4 C- }& W- e{
2 Z" _6 ]- \! H# O m4 d: v1 @m_wndMenu.DeleteAllMenu();9 y3 z* t5 z/ Y& L
m_wndMenu.CreateMenu(this);
0 F# n1 w" v( n5 Q& ^% Jm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");- ^ U4 ^: I$ j5 I |8 r4 }$ Q1 o
+ d: @& k9 x; H* l1 Gif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))8 \: p' O# z1 R* f, H
{
* Z8 [. N& P. }1 g //P以上级别才可以删除所有道具
/ G9 j( U8 h5 ?& O, J4 T; S m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
& _# }( u* D- H; R- b}
3 s8 n" p: X: }- t+ T [7 I, d2 om_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );4 h Y- s/ i% s) o
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
- p! Y. l/ z; U( c/ a: |3 Cm_wndMenu.SetFocus();5 r' r2 s t! |3 P/ W0 T W" v
}
, k& _' o3 e% K. S------------------------------------------------------------------------------------------------------------
7 c* j; C. ?4 F D*************************
6 F) {7 V" K I7 N4 O3 `1 {WndField.h文件
! O+ a+ o- F( u: R( D5 [4 Y************************** U; C; Y7 I/ H, G$ ]
搜索:BOOL m_bReport;
; G" S" X- }+ S; f其后添加:
# R8 w3 f; i8 V/ l( z C/ u% LCWndMenu m_wndMenu;! i2 b3 E; }$ D; s
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);/ c. }" ~0 o+ I t' p
其后添加:
& C9 A6 L" f: k3 U+ R Z& Wvirtual void OnRButtonUp(UINT nFlags, CPoint point);. N8 n8 K" V7 {! @
- o; h) ^: _: ]
' r/ H4 Q0 ]6 D* d/ _ |
|