|
|
源文件中_Interface文件夹下WndField.cpp文件
% r+ K7 ~4 c+ Z+ ?; {( Z- N( ?5 a搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )$ Q- P, Z8 U: {1 v D
9 X t& [, M% Xstruct sItem
# t- P/ j! v+ Q. [; a6 h1 ?{+ x: b4 A$ C* E
DWORD dwId;/ I- a3 Q/ ?3 O/ t
DWORD dwKind2;% A2 y, F( V$ G4 k
DWORD dwItemId;
9 n9 m3 s+ ~1 w2 I6 b9 `/ vBYTE nIndex;
. B! V& j" D D" |3 k2 g9 V& GsItem(){
+ b! J& }: @6 z, T) w dwId = dwKind2 = dwItemId = nIndex = 0;; a, w' s8 G$ B$ _8 F$ l
}" U s( d6 e6 d9 e
bool operator < (const sItem p2)7 B: w+ ]2 h) N/ S6 \2 ~
{$ R. u; @! T! j: m
if (dwKind2 == p2.dwKind2)
5 `* l3 M2 B ^0 q4 l7 x( d; C P {) c# W% r4 [3 z, N
return dwItemId < p2.dwItemId;' V4 s, v5 _4 F; l, k
}else{' F& c) m. ^0 d+ H4 I
return dwKind2 < p2.dwKind2;
2 T Z7 b2 r4 `/ s7 ? }' i& b4 ?# [2 T5 K
}
$ I t: W& H# f: M7 i};" `$ m0 J+ v7 m4 ?
class CInventorySort& e1 `+ ?- |3 I. A
{
7 ]$ Z$ n1 Q" j" I+ w- b' H2 Bpublic:
. o7 k9 v/ `9 k+ h' b9 vCInventorySort()$ E- l" y% A" @* p! E8 U4 h4 f4 s
{
- e9 y+ d' k; K% Y* ] m_dwPos = 0;+ U6 G1 h& k5 P
}
! I o2 q# n! M- c/ e$ e~CInventorySort(){}
9 s/ k" S L+ ^/ `* F9 H! xprivate:
# e" W- R7 @7 L8 T( i$ U" b+ J9 E& QsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息7 ^1 I5 l6 l- a5 U% J' v; R) r' G
DWORD m_dwPos;0 n4 ]# u* l1 {4 h- Z
public:' A5 d2 \5 d' G- V) R
void Add(BYTE nIndex)3 l4 X @' j1 c6 T$ i U; I" a; X+ N
{: A4 z( Q# ?% i& a, W+ B$ ^% }
if (m_dwPos >= MAX_INVENTORY)% f% a# O B5 O2 V, J
{2 d0 U5 ]0 B! k$ Z$ P- K
return;2 x1 s* i/ I; ~! `, g1 |
}
( y) Q+ q7 V) m' _/ \2 T! W m_Item[m_dwPos].nIndex = nIndex;
: ~* t, m R# j' ]" T& k1 x3 A m_Item[m_dwPos].dwId = m_dwPos;
/ w o, [2 t! P, i' ` m_dwPos++;; O. |. J1 K8 G& D5 ^, |7 M
}0 B7 h( p; c! W* k! }( G
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列0 I9 U0 t; K R! s- o
{
% l( L- [1 u6 C, G. @! c8 | for (int i=0;i<MAX_INVENTORY;i++)) y* X5 p: v1 ]- _6 Y
{! y: w8 G3 i7 y( Y0 x
if (m_Item.dwId == dwId)
/ R/ z# s3 Z. i+ ^/ I {! C5 k; i' }0 |& E
return m_Item.nIndex;
0 }0 Y O- z# u& i: F3 D9 D }
! _" U8 z2 f( z0 t# G m* Z" l6 a }) C# a8 S5 G; U! U! h1 t. ?9 X
return 255;
% h. X0 a4 w5 X/ f, K}
1 G r9 n6 _3 H' \3 v# Hvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
4 ~- P" V' y% `{
# I9 g/ G3 ~: A BYTE nTmp = 0;
4 l) ?1 t7 |# B6 s- S bool bDest = false,bSrc = false;
; t* Q4 w7 ?6 b2 n4 i for (int i=0;i<MAX_INVENTORY;i++)2 @" k* w: c% S3 m* N
{
8 v4 |9 S& H5 D* l2 z+ Y8 l) i. W if (dwSrcId == m_Item.dwId)
% M/ u$ l% u3 C1 N0 L- J( L) H# R9 | {
* F9 L8 Y" ^- w- Q% q //id相等 则 改变对应的dest和src8 M; v' o: w6 _0 x% H
nTmp = m_Item.nIndex;
- j3 E, g4 t ~$ s* r# R4 s* o' p3 y m_Item.nIndex = dest;7 Y9 [! L2 h' s1 N6 ~7 U% H" ]
}
1 v% n) _1 U' v& C% [6 _* G }# I$ y( d; Z1 g. w# l+ V
//临时数据保存完毕,交换开始
, ^: N+ C2 O0 }3 a0 j4 p! g for (int i=0;i<MAX_INVENTORY;i++)$ u4 c4 V! q* X
{
" p. F2 T( K! T4 q& J if (dest == m_Item.nIndex)
% P8 [7 R, J2 R# M {
+ ?, m; z/ j$ \2 D& d) ` //id相等 则 改变对应的dest和src8 r; u% `% k& T3 z, p
m_Item.nIndex = nTmp;
9 I/ q! z7 M6 P% K }
3 e# H% Z4 I. l }+ B, k$ i1 Z1 e; @ K
}
. ]- [; \$ m S& ?2 ?};# a3 T2 @5 _% a
-------------------------------------------------------------------------" K+ M j8 Z, p# O8 y$ j
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
3 X: t7 X4 e8 ]2 Z0 p. r$ n. y- G搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
: j! } W; [& W. {, ?& j紧靠其上添加:3 `7 R$ A" y4 F0 v' A' T
if( pWndBase == &m_wndMenu )
! M) Z5 z9 M2 e5 y{
% I0 J$ }( l) Y* {2 u* @ switch( nID )( r6 n* i! t5 f' F
{
' ~8 A/ F! A; {. h! E+ ]" S5 a# R& P case 2:& R$ O/ {$ ?* L% s& g' z9 n9 p
{6 H- G& n; t& G& l& }8 D
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
1 o$ R* r! J Z) | if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
! o6 B$ x; r1 u/ e' @: x; m3 \6 h {
! a. I( Z+ I, U) z( J& M6 E break;
7 ]' K+ K) b5 K/ V& {% a3 u" x }1 Y+ K) D5 w- v2 r2 s5 J7 ?" r
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)0 M# g/ @; u H7 G1 U# ]0 w5 q
{) A7 @2 x2 _$ E0 R6 }( T
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
$ u3 C9 V1 |. F if( !pItemElem )! w, Q3 r$ |2 e; M5 U3 J
continue;6 i, U9 w5 x) J$ p
if(pItemElem->GetExtra() > 0)
2 h, G1 y1 c. g5 e continue;
( {) B0 b+ A' R3 c3 ?8 N% m if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
. M) V( M+ u) V continue;$ j) G3 \# j. ], P0 j4 l8 r
if( g_pPlayer->IsUsing( pItemElem ) )% B! w9 ~. T% k3 p% [; M
continue;
+ u# R- K- v! w if( pItemElem->IsUndestructable() == TRUE )
. y& f! Y. f' @ P: M; c$ p& @" V/ l {$ a% K9 f, s1 Z8 ?( Z
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
9 j3 @& ?6 N1 c+ i continue;$ e5 X- B5 d' [* p
}9 O' }# Y B) N0 _2 E8 H6 ~+ p+ x
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);3 k# r: {, t- r( X
}* i* F; i( {( V. ~
break;1 T0 Q" e! `. Y8 i& g7 ~. D" ?
}
% e% @, C/ \% ?6 v. U case 1:
5 D1 e% t1 E |4 z$ r* l9 N {
+ X7 W, v) V1 M9 O- E //整理背包1 I/ q" Z5 O" W- q i* B1 z
//////////////////////////////////////////////////////////////////////////
" i, }* h) s! q2 k# S1 ]' V //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );6 }2 `& c: G* P @
//////////////////////////////////////////////////////////////////////////: _1 ^" [ d ]5 D" b" M
//////////////////////////////////////////////////////////////////////////
) C2 u/ ]; ]; P& n; M* r7 P- l J CInventorySort* pInvSort = new CInventorySort;$ w0 O7 e, N9 o- U3 g$ e
vector <sItem> vItem;. V7 t/ i0 A6 |; Y6 |" _, ~: j# T
vItem.resize(MAX_INVENTORY);//初始化大小
2 t, u8 T0 b8 E; @ //////////////////////////////////////////////////////////////////////////
8 j2 I. Z) s# U- {5 T) L: o$ M) X //填充数据1 O$ R/ q/ \+ y ]
for (int i=0;i<MAX_INVENTORY;i++)0 b ?" ]/ F$ p* Y7 z) [) d
{4 S8 J! ~6 o% \" b0 D9 d
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
* Z* c/ r8 V& ~ {7 N P6 `; b if (!pItemElem)
2 {/ T! ^; u4 T6 N {
j) o" k' `7 z) S$ x vItem.dwKind2 = 0xffffffff;
, \8 A! U. v; { M* y, |$ z vItem.dwItemId = 0xffffffff;
G+ d* G: s0 y8 h3 m* h4 a vItem.nIndex = i;
4 R L3 e4 T' G4 e, Q% c8 L3 V }else {
9 O$ K' d' s9 G! b. m ItemProp* pProp = pItemElem->GetProp();& p3 Y9 I; i' R& ]
vItem.dwKind2 = pProp->dwItemKind2;
0 _; x4 ^8 j: D- J5 m5 e. d vItem.dwItemId = pItemElem->m_dwItemId;
( K- C/ ~% w: U) d: d5 l6 @ vItem.nIndex = i;
' w5 U$ v: K# X* p% N" z }+ I+ Z1 y/ E; o" V' L2 v
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
7 E- L: S ]4 \ m: |" A6 T }7 g% U7 T' ~( O7 J: B* [2 Y& O
//////////////////////////////////////////////////////////////////////////. q: Q6 Y3 o, I0 q: A, Y/ q
sort(vItem.begin(),vItem.end());//排序
$ v8 ?% G% w+ X* m, f7 G //////////////////////////////////////////////////////////////////////////7 u( B6 q6 X/ I
//交换
; a2 i" {) |8 X! s for (size_t i=0;i<vItem.size();i++)
* d. H( L; w/ }! F; D {! H! C% h0 F, y- f! Y* R
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);, t* C$ n8 \' x4 e
pInvSort->Add(vItem.nIndex);
7 B8 I( U* b7 w- ` }
) r g' T& _# z! Q/ l! F9 Y BYTE nDestPos = 0;
$ o2 N. J6 e1 f4 W0 G' e1 A$ r for (int i=0;i<MAX_INVENTORY;i++)! C; ?+ M( F# E. e E' |0 R4 ?
{3 J# U: X+ f, j; _5 G% r
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
, S# ~6 i6 j4 m5 y if (pItemElem)3 Q% F+ F; [( j% S, i* ?
{7 S- a1 W" k7 n2 Z8 @; D4 s4 P
if (IsUsingItem(pItemElem))! l6 z! v5 X8 j4 h: |1 g# J3 Q; V
{
% I: b9 b# ]0 x- t% K6 h' ? //这个位置无法放3 o e M& U; f: ?$ ]: x3 r' c
nDestPos++;7 Q0 C' p2 {$ Z) ]
}
( V9 ]% j& J5 _+ M# Q1 a }
# o, J, p. W8 Q& w: n; F6 @ BYTE nSrc = pInvSort->GetItemSrc(i);
( v+ w$ T! Q" K$ | pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);# S7 R5 f* @( N& k2 e% h
if (pItemElem)' s" k* F/ [7 m5 O
{. a0 ~, D" r2 V+ Z4 k
if (IsUsingItem(pItemElem)); m0 F3 E& a. z- l6 W) j# `7 Y) f( b
{
/ p0 `( E$ |; h& R //这个道具无法移动,跳过$ Z& T% k" l4 k2 i$ D) }% F
continue;# T9 U i; v5 E5 {
}" B& f+ E* j) k0 A& a. ]3 D% K
}else{0 n/ e# W0 O+ l% B
//空位置 不用动5 ~# J% b- E/ |0 k2 T- d3 X4 n! g
continue;
9 H) X2 k ^' G& O8 X% t4 \ }
7 Z/ J4 f/ x& W$ U7 O3 [ //////////////////////////////////////////////////////////////////////////
! i# b9 W- _) t' G) r% ]7 n+ } //开始移动
, P0 k a# V* P if (nSrc == nDestPos)! r# w" L% j+ `! S* `) H% ^; |
{
/ c) J8 i3 E( K: `, C7 ]( G+ G //原地不动% B$ _) O: g* X" ^) z2 V
nDestPos++;$ u4 B% f# Q* \( _5 Z' p
continue; B) q/ b+ P- D5 [) O# h
}
) o! q) U) j' E2 p! K2 J$ V pInvSort->MoveItem(i,nDestPos);
# f9 {1 f+ q9 `3 F g_DPlay.SendMoveItem(0,nSrc,nDestPos);
0 f0 b$ G* g7 a5 P; Z Sleep(5);
; @$ X3 k: Y( n1 m- ^3 y //Error("移动 - %d->%d",nSrc,nDestPos);- Y7 ?& z8 V5 [% f5 ^( l
nDestPos++;$ H8 T% K7 W' j# n
}. n0 P! I- _9 Y
//取第一个元素的信息
8 z B4 D% U3 }, R" n( C" C /*5 u; S' f9 _0 ~. J; ^0 l1 q6 S
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)$ F. u1 ^7 {8 ?* K& Z
{6 y# i; J0 [ ~; @1 u# x
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);4 N* y! e) q8 n1 ?! X- d0 b# M
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);- x3 S+ K2 |9 ^+ ?+ { z u
}
" f, S2 v; s; y. V4 Z, E0 K */ D0 \/ ~; O3 q2 H
//////////////////////////////////////////////////////////////////////////
, f1 Z/ I* Y& g. r& Y break;, \0 H+ ~# L- `% S5 W0 G2 k7 J
}
- Z5 O+ }$ I- w5 ]! D" ^ } # o; `5 a9 _: d3 a6 }
}
0 p/ g5 M1 l) ^m_wndMenu.SetVisible(FALSE);
2 u Y; ^, V5 {- `, `; o
* H6 ^; Y, x O5 z--------------------------------------------------------------------------------------------------------
" g W" n8 C$ W0 }2 c) j搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
8 a- ^( m# J0 h# Z: I, {& `{7 E# n! _( F7 b
BaseMouseCursor();* b7 @. I- {' @5 t, K& c% K
}' R; ? F7 v0 f. a" @
在其下添加:
, k' [+ q4 I8 p: ?, Q0 H) qvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
: ~' f! `7 A7 q. [, C% `3 ]( d{; }. m2 X1 a; f4 k/ v& ?$ z8 i
m_wndMenu.DeleteAllMenu();. O- K' j8 K( m
m_wndMenu.CreateMenu(this);: }) _4 E2 K! ^4 K) k) I M8 X
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
5 r' ^' d& g" y9 s- D, t ~5 n! [6 m" j+ V
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
2 I* g4 Q$ D, I( I$ O5 e( E; x' s( |6 ?{
0 L. H' q( J0 R B, } //P以上级别才可以删除所有道具
2 P/ W7 d/ s( a C6 l# M8 m- c1 X* r m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");$ p; K. V, w1 I% M
}
" d0 L( O1 b7 t4 S6 C) G* Um_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
& W+ M% |; Z# Dm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );7 U. k& D1 J, j: D0 ]: l1 p* W2 `- t0 J
m_wndMenu.SetFocus();
5 z; S z4 g" `1 B. [$ L}( b) l6 {. D8 M7 r6 P
------------------------------------------------------------------------------------------------------------
4 A/ l: L4 b- X/ S*************************
1 n, h3 B9 ?+ r* LWndField.h文件0 ^# F! E0 p) o: \1 A
*************************% y, V( m K/ j$ j& S) N
搜索:BOOL m_bReport;
0 f, c* r) k( S2 ^2 u- s: S- @其后添加:
' e( \0 `2 F+ vCWndMenu m_wndMenu;! e% `- i$ k* [8 O
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);" l: O7 ]8 C) v5 t! M% Q4 N, N
其后添加:: h4 Q2 \# \; o7 \
virtual void OnRButtonUp(UINT nFlags, CPoint point);
0 W. o/ Y6 Y5 A% K* l! l6 }
" d/ C" F3 c0 M% ~/ L2 e
3 V X c9 t( b4 k0 y |
|