|
|
源文件中_Interface文件夹下WndField.cpp文件4 D. z' s; j- B: u- m
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )7 U& L. V2 r8 f! y0 S
& x% i+ k( C3 rstruct sItem
1 u6 x2 _, }8 p{% [, y! n3 I: |) u& n9 f/ J; p% Q
DWORD dwId;
1 V# M2 Q: L" cDWORD dwKind2;% o3 z$ v$ h, \6 U3 b0 k
DWORD dwItemId;
% W2 m; K( {/ l0 h/ \3 oBYTE nIndex;* E+ z: q2 y, K/ G( ^7 S' Y& |
sItem(){
5 |1 w& ]3 Z$ V" L) d8 I. c: H G dwId = dwKind2 = dwItemId = nIndex = 0;
0 @! c6 W4 p* |# Z}
0 J/ h3 t+ O: b# D; W3 ]; bbool operator < (const sItem p2)
! e. M: ~- k, _- k{
0 A& A+ Q( Z& U* I3 _/ x) X if (dwKind2 == p2.dwKind2)
) m* ^! w7 n9 M5 y {/ ?8 Q4 r5 H! F9 S' J: q+ N
return dwItemId < p2.dwItemId;) r, z$ b$ W E: q+ I# K
}else{
+ b) Y5 B) F( A$ Z: M return dwKind2 < p2.dwKind2;
4 U5 f( m$ G2 ]4 E* f }
& g$ Z0 W1 g0 u- `3 w% C}
( R& G# c6 r5 }2 O7 c};% X" P$ d5 [6 m7 e
class CInventorySort
8 l% q/ h3 g, [4 m2 P& L{
- V( U" e, Y9 u% x/ z# q! ?) Rpublic:% J& [& p0 c6 t5 t
CInventorySort()
8 M. {- D! ]2 \2 h: a) v; o{
, {# q2 j$ X- N4 Q4 n! e m_dwPos = 0;
" ~. G8 p9 M8 d. B% s4 H. r# y u' |}
: C& ?3 ?5 S* `1 P: B~CInventorySort(){}/ N# |1 X, P7 ]' }* o1 V6 a
private:
9 H8 s- c$ C) K- ~$ ^! U) u$ G/ wsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息$ j; w/ ? }4 W
DWORD m_dwPos;
% A0 [" ?% F9 J4 @1 }; \3 Vpublic:
9 r* P/ k4 ]+ ?6 Z4 zvoid Add(BYTE nIndex)
0 b( N7 ~7 C/ O6 m/ p4 K{
( x; q( n/ N% |5 B1 L( D" |$ y% ] if (m_dwPos >= MAX_INVENTORY) q3 i& o! ]) c* F; }) {
{
1 y4 B8 X5 j/ A1 m return;
5 j5 N, r/ X6 L" m }( ^5 o/ f$ j% L% _) N5 B; d! q
m_Item[m_dwPos].nIndex = nIndex;
9 k* r6 v( G, u+ [) Q. J2 A m_Item[m_dwPos].dwId = m_dwPos;7 R8 Z$ E/ X9 x9 B! q
m_dwPos++;( e- Z' s+ b: c/ p) P
}
7 t. n* M/ a/ F) vBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列, K+ x2 N: r6 Y. g b; f' Q: {
{& f: b( s4 Q! z. r4 ]
for (int i=0;i<MAX_INVENTORY;i++)$ O* I$ h# [' j. A! k: A( ?: G$ N
{
# N+ ]$ y& G$ Z if (m_Item.dwId == dwId)6 u$ z( o0 G5 x+ @8 d3 N
{( }. e1 \5 H$ ~+ }( P1 p1 D- g1 |, e
return m_Item.nIndex;. b5 \6 v& g# }/ K* U' \
}6 U$ H# c+ u s- d8 v/ c
}4 F" V( v/ ^/ H: j% M& B
return 255;9 [: H8 K8 O0 P5 A/ e
}
; g- ^4 z4 X# r) m5 T- {% Z7 |void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置# T4 m% [; Q- O+ N$ `
{
. u0 t; K" v7 a, r" i' S& L BYTE nTmp = 0;* m8 s9 i. j7 z2 b: D' L9 Z
bool bDest = false,bSrc = false;
& I4 `8 |! _: N+ u6 ^ for (int i=0;i<MAX_INVENTORY;i++)
- b( d& T6 {5 [, T: |& c( y7 y {1 B; f, a& b+ K$ c) Q4 x5 r; g
if (dwSrcId == m_Item.dwId)8 j3 M5 W2 ^( u T- q, F5 [
{" `0 x4 a+ h& I/ Z2 l0 s5 k5 }- a7 X
//id相等 则 改变对应的dest和src
5 [ |% e5 `& |7 ^' R2 w$ |' U1 t nTmp = m_Item.nIndex;
4 [' [* m+ @) x ~% A; ^4 A, w6 w m_Item.nIndex = dest;
# {/ d* D3 p+ i2 Y( H0 T }, I0 Q; D U" k; F# ] t: s
}; {* p* H7 ~7 ?7 J
//临时数据保存完毕,交换开始/ I/ d1 k5 q7 \4 q8 |$ T
for (int i=0;i<MAX_INVENTORY;i++)
2 D$ @$ R/ Z+ y% d3 i {
4 a& E2 ^/ [* J8 o) f if (dest == m_Item.nIndex)+ d4 K/ M2 f0 V- z( U
{
: t2 O& F- c& ^ //id相等 则 改变对应的dest和src
; B/ Q- J% H: v5 E3 ]. g) D( a" X m_Item.nIndex = nTmp;( r0 R- |9 b# b) Z- h2 w% q
}
- x! H. v: L% ~7 I y+ m }
A' X% B' Z" ?& u}
- l! ?0 g2 S! k! O7 g* l};0 o4 k* M/ J. u5 T/ @9 r# D2 }
-------------------------------------------------------------------------; S6 M0 o, t6 f' K) I3 L2 ^& l
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
f& [ S% E! v2 m* l搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
! w+ M7 t* e; I# V: U紧靠其上添加:1 }6 }2 h1 x1 ?5 p f S4 q
if( pWndBase == &m_wndMenu )- y8 t! G N: T& Y. s8 W
{
, D) T) J: U5 K9 H4 r; m0 V switch( nID )6 s. z* |7 p2 R' Y; W2 X
{+ L6 x6 C ~% N" @7 {+ W, G; n
case 2:
4 U! D |2 C9 i' B1 N4 }$ T7 S {
% Q" C% y; X( j: q0 K //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
- Z3 p6 r5 T8 h! y7 s5 R* k if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))6 \- K) {- q: ]# d8 s! @! V) |
{5 A# E9 |/ q! f& T1 S- _1 t
break;
( p) g, U m) K* o& t6 ? }
6 O6 ?0 N6 d- ]1 w for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
/ W+ [% {6 P7 @3 S! { {
( u" M; {) N) _0 i6 `5 E) r9 l! n CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);2 W. s. D# c; p* Q) v; \* e! i) Y& P
if( !pItemElem )
$ w- A8 S- R. A' j% _" t' R; l continue;
: F$ c" W! P( M if(pItemElem->GetExtra() > 0)
: E# k# u9 u r5 Z* \ continue;
7 r$ Y* T8 x- d$ `9 ?2 w if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
! b: a6 @; z; L* T2 o2 i: I/ T! S continue;
% u6 \9 ], ^, |8 g/ X' v$ g) g if( g_pPlayer->IsUsing( pItemElem ) )
4 V, p+ i8 Y) W- C) c+ ?3 V* D& f continue;/ m& _, s7 n4 ]$ v; a: P
if( pItemElem->IsUndestructable() == TRUE )
3 x, U# t( n7 Q {2 p$ Y$ q1 H- o! v5 W$ P& X3 |0 f
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
) X- q& P0 \- v7 D2 x continue;
! _ `# q z$ i* h }+ N3 j8 B' x, D- O( N3 R; A) F
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
. I1 _6 X6 k$ H* K; |0 b. t' v }3 {& d; ?9 d( j5 K% j
break;
9 b9 I+ b" ?/ i& ^) m }4 z& E \# p$ h8 j# L
case 1:% y4 q% @1 P( p5 Z3 B
{
9 _2 x) s" C) b; k q //整理背包
: |2 Q% M# H5 Q //////////////////////////////////////////////////////////////////////////, {$ t8 _1 [! K; D! r% M
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );% }, W" K) x. ^: [0 A- U
//////////////////////////////////////////////////////////////////////////% y- i4 X* v) {# p) n
//////////////////////////////////////////////////////////////////////////
3 H0 e. M4 t0 \ r; B CInventorySort* pInvSort = new CInventorySort;
' ^6 ~0 x6 @* Z! {$ V vector <sItem> vItem;
9 W1 [( U! p0 c. J vItem.resize(MAX_INVENTORY);//初始化大小1 ?( D0 _; P: ]( p) D
//////////////////////////////////////////////////////////////////////////
4 n6 n% q& N# z" I; h1 `& q //填充数据
( j$ }/ t0 M. a+ ]! D; e, z for (int i=0;i<MAX_INVENTORY;i++) Z0 H, D8 `0 }$ D7 }. D
{# a8 A& l1 o1 K- |4 L5 I% F
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);4 t$ a$ F; o& l8 m" `9 x
if (!pItemElem)0 w0 z8 x, v* _" M; {- s- L8 E
{
( l! L9 Z1 Z M0 ?: z p: A vItem.dwKind2 = 0xffffffff;" r; L$ B6 @2 ]8 o
vItem.dwItemId = 0xffffffff;
1 p/ U% {) t& n _$ | vItem.nIndex = i;, F- C- N% ]4 _/ i# U4 Y o" q. r
}else {, w9 a" v, y6 V0 \2 D2 l
ItemProp* pProp = pItemElem->GetProp();% t/ [# ^0 G- H9 T7 {
vItem.dwKind2 = pProp->dwItemKind2;
9 |5 }3 |8 [1 u3 @* i2 U) c vItem.dwItemId = pItemElem->m_dwItemId;
6 X% H/ `% N7 C B3 [ vItem.nIndex = i;
2 Z7 F8 P+ X0 F. J }$ U V1 u& n* ~. Q
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);7 c4 w0 v+ A4 r; ^# c6 o6 m
}2 Q- A. h/ q" p K, w
//////////////////////////////////////////////////////////////////////////% m) L" D: g d
sort(vItem.begin(),vItem.end());//排序
# \ A7 G& Y+ L' g' k/ a/ U/ C //////////////////////////////////////////////////////////////////////////0 Q7 s3 I* B, J: @: B, f* b
//交换
! D- p; B- S( c$ D! q* s$ y1 I* K for (size_t i=0;i<vItem.size();i++)2 w6 X8 h: s; @
{
6 ~$ c: j" f0 j, Q //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
. ~& V" h7 w* P" E* A) |! ? pInvSort->Add(vItem.nIndex);. `# U% q; O: }$ r/ v; M# r
}
' [! Z, p8 b" M( D1 l# J7 u2 N BYTE nDestPos = 0;6 I; `8 z; @) ^, }
for (int i=0;i<MAX_INVENTORY;i++)6 X# G1 h! M: a0 [+ I: k
{
; A; A% m/ S2 u0 }# q$ m% w CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);/ n% f- [0 \0 X; d- n6 A
if (pItemElem)
2 t5 Z; \' a% o8 l3 | {; F" o& w# r) U9 I
if (IsUsingItem(pItemElem))
; N5 u8 H P3 D# }* ` {6 k I$ s8 Z, g
//这个位置无法放
' t) C* @' X! T& Y) R' Q0 |3 O( h$ @ nDestPos++;
' T1 ?6 H7 n/ b z L }+ i/ P( R9 L- o2 t
}# _5 P! ?+ D. N, }# ?7 o5 j
BYTE nSrc = pInvSort->GetItemSrc(i);
! L( y( U# ]% T3 m& n& z pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
/ h' T- {" I, j/ i6 I if (pItemElem); Q. }, G( `. P$ Q
{
6 w. d' e+ y8 j& d8 j if (IsUsingItem(pItemElem))
9 n# y, s& {8 A5 P' `$ u {
6 n: D1 ?2 C6 C( k' [ //这个道具无法移动,跳过
% L2 @1 y+ r/ w# e" s { continue;& T& G: i8 z9 L1 C+ Z
}
# c8 X B: d; k& W/ L }else{6 o5 u9 l; B `# c1 @* q- p
//空位置 不用动
+ ^ W/ u& W& x% f+ q' w e continue;; B5 C" }9 u. j4 @% I8 L1 K
}/ E$ D: V; @9 A; r6 Q; b
//////////////////////////////////////////////////////////////////////////8 B$ A h% n8 U7 M' b) o
//开始移动
, G a3 U( J/ Y* ?- c8 a3 ?. O if (nSrc == nDestPos)
5 q; Z6 s; B1 Y$ {( g& W! Y {
3 Q+ Z7 q$ t1 I! E' u5 I; d6 i //原地不动
+ T/ J8 P! m5 p7 h( G/ D/ n nDestPos++;
# c& ]; [" b6 H continue;$ K2 q( {$ J5 V% U1 i4 b
}! p; X4 R* ~% i7 L( N* e5 e$ R1 E
pInvSort->MoveItem(i,nDestPos);9 G* V+ I" W8 h) o
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
# b7 f# \6 Q" i$ {5 N! \- r, a Sleep(5);+ z7 @1 J* J5 h+ V0 Z& X& P
//Error("移动 - %d->%d",nSrc,nDestPos);
6 x3 ?6 S* R6 b4 i g8 ~( p5 X7 Z nDestPos++;3 n6 ]# g8 L# l0 r
}% V. [6 q4 V; [
//取第一个元素的信息
. N/ G' u3 f3 g /*4 Y; p n; h3 E1 o. v6 q; U
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
$ p$ I9 t( V" _& ^3 e# s6 ?8 W) h {! \& \+ o! m; \# Q- ]8 y- [
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
$ I1 i, p# j% B2 W/ ]8 @$ y' t g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);/ A* H0 h4 d2 V
}( x- Q% q7 o9 f- T: t
*/
; f# X' F( e. X, P //////////////////////////////////////////////////////////////////////////
% X3 c9 Z: G2 h0 U break;8 |0 l& A8 u3 |4 p" Y
}0 l- Z/ w+ ^- M6 |8 `
} 1 d4 F5 {& Q0 c$ V+ {* I" h- `
}
4 B! s- y7 c* {7 F1 u4 Wm_wndMenu.SetVisible(FALSE);
+ O' P# [% M9 [2 G5 r4 ^9 S' i/ w. K8 _# v
--------------------------------------------------------------------------------------------------------. L# w- F. N. ~* H+ f- J9 ?9 U
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)1 Y+ z' Z' c, u/ v
{
9 Z% g5 z* E7 I9 k2 ^BaseMouseCursor();
' ~, U2 j) W+ ]& h% Y' r}
" Q- u( _. v( L( ]) [' ^3 _2 d在其下添加:
0 q: @% |( Y+ s3 F8 o3 ivoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)/ I6 Q4 M4 J* t" a1 ?1 e6 N
{
! z3 Z* f0 q4 m0 Cm_wndMenu.DeleteAllMenu();
& e$ D6 p- e0 i8 | o& mm_wndMenu.CreateMenu(this);
( {9 \( {. }7 ?6 l1 `1 |m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");5 g' O0 ^) z, @
- z# }% \9 |" ~! Z" ]4 R5 mif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
& A3 k, J" R# Q: C{
/ O# \ V- l0 W2 z7 N$ k% Y //P以上级别才可以删除所有道具# X& t- X, S5 @1 c& }$ d5 f
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
; u) {3 [: p% g: e}
6 \7 Y! ?3 N! Am_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
' C3 m* R# o: zm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
- M. v* C4 A/ R( P' {: g7 rm_wndMenu.SetFocus();7 p; N: ? ^$ |9 S0 V8 Z+ y) a
}' r. `' K, @5 s) B' V6 @# l5 l
------------------------------------------------------------------------------------------------------------+ s3 t$ f3 s! T" o# }: `! w4 ]
*************************
6 i. h. a( a" CWndField.h文件
9 L$ g" @: G- o) y*************************
. D$ l* J( n; P5 W4 Q$ }3 t搜索:BOOL m_bReport;
' X# d' y' @8 u ^- `# x" h5 l其后添加:
! k3 C0 E* v! J0 M' q6 KCWndMenu m_wndMenu;9 p$ e# s3 [ S, V: [/ D
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point); T4 D M* U* q. _
其后添加:& s! O0 ]/ }! q" n
virtual void OnRButtonUp(UINT nFlags, CPoint point);2 T, F& L. _' X/ `2 c- n! v
! {& {6 v B+ W3 O5 B4 R
: y8 V! r: E3 K7 K8 Y8 _. I
|
|