|
|
源文件中_Interface文件夹下WndField.cpp文件) c5 X# A3 R7 L0 U0 ~/ B
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )/ z. z1 C1 b W' G2 y9 O, |$ S
1 a+ s8 x( N4 g2 ?9 u1 c$ E8 _struct sItem
! K5 ~) D0 m4 v; x' y& X/ y, C8 I{- `. b4 |, ~ ^) f& d
DWORD dwId;- O8 d. O+ b+ w0 t
DWORD dwKind2;# L) _) A. K9 m0 q& `: D: p
DWORD dwItemId;. Y, P8 @' _8 w" {% p4 W) O
BYTE nIndex;4 @7 \3 O% v. D5 d' u6 c T$ |! t; Q
sItem(){
1 w, l, j! W# O, { Z dwId = dwKind2 = dwItemId = nIndex = 0;; ?. v$ Z0 L8 }5 U: S3 c3 m
}
& n( F! E2 D8 Y0 {! x$ V' ]bool operator < (const sItem p2)
8 o4 I/ h; K9 [, H9 y{- S* N8 x6 D$ ?
if (dwKind2 == p2.dwKind2)
! H w& Z% \1 h9 j {; S+ f1 u) }" `, [
return dwItemId < p2.dwItemId;$ @& k, X" o8 Q3 _
}else{! S% O6 q5 x+ z3 @
return dwKind2 < p2.dwKind2;
3 h8 y7 b. ]+ a- S }) }3 R! D1 y6 z- U
}
0 I+ ^: `, V h9 B1 ^" ?- X- b};
9 k0 S# L6 A( ?" m# E- @9 V: K: P( s, e: rclass CInventorySort
' x( O, n: L K& v{0 p, W- @1 h" ~! \* d
public:
' h3 g/ n) P+ r$ R3 |! @* ?: ICInventorySort()+ {- N8 t1 y, M. ]( D$ x
{
7 _# P: A: q# T! I8 g: M l m_dwPos = 0;- q$ R7 X5 z4 r8 ^/ F: p
}8 c. z& N/ J1 O8 Q r+ I# P
~CInventorySort(){}/ D/ t x+ i7 o" O9 T) t. s0 h
private:
. p* C- P5 p( G9 ~3 \% B wsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息+ M, m I# y6 w- ]1 ^
DWORD m_dwPos;
) H2 P% h+ \, t8 g& E1 Ipublic:
8 {- T5 F1 S6 B+ Qvoid Add(BYTE nIndex)7 r- J1 ~( Z3 \0 a5 z" J3 Y
{) f- q4 G1 b; O5 {: F, k2 h4 U7 h- m/ G
if (m_dwPos >= MAX_INVENTORY)/ {% q: r* ?1 T6 Y
{
( G3 {. ]! a; X8 E" B0 L6 R2 O8 m return;
Y3 X* F" a* M& J$ t }2 \& H5 s1 F$ t. A* y
m_Item[m_dwPos].nIndex = nIndex;, u9 M2 @. Z6 M
m_Item[m_dwPos].dwId = m_dwPos;
4 S/ F0 D, X! W* }: U" {5 T m_dwPos++;
2 Q% \5 n* N- C" x& f+ c5 X}7 `) k# B( Q+ B
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列2 @" |9 Z. p# I% N; Z8 L; j
{7 e4 V1 N# O( n$ e, y% x
for (int i=0;i<MAX_INVENTORY;i++)' P: g! _( N( x
{
8 ?, G0 r( j4 B% ?' {- ^' G6 A if (m_Item.dwId == dwId)6 A: |& h$ d& X5 V+ p1 h; R# a
{9 b3 x" C) n2 n* s: ?& }( b
return m_Item.nIndex;7 S% `; e- O; a* A1 M
}& N& T& M0 v$ s4 t9 f( c( T
}( K& O% @% r: o7 f1 B
return 255;0 A8 K5 u9 |9 f# i9 f2 N+ F7 ^
} J3 K1 e' h2 `; y+ ]5 k" G
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
2 h& l, f8 L9 R, e. A4 U{6 I" f2 w; c3 g: ~
BYTE nTmp = 0;
% r% p7 C6 U, u1 S bool bDest = false,bSrc = false;
w% [! @& u: n8 G+ U for (int i=0;i<MAX_INVENTORY;i++)
9 {" V- l( ]9 `7 \& [ B) u {
: l( I6 ] t% \8 F5 x& ~7 c4 r8 [- R if (dwSrcId == m_Item.dwId)
$ ?, d2 m( j I! q' w$ a {
! N1 T2 y! O/ D2 M" f, \ //id相等 则 改变对应的dest和src
: A8 Y1 d$ \% Y, t4 t1 R nTmp = m_Item.nIndex;
; p) n2 S3 s+ c# j m_Item.nIndex = dest;* f6 s4 c9 T8 _. d2 E. G- m
}
* F, r6 P. m# q) _. c+ P, T }
: r8 d; |5 M- Z) u& {: v //临时数据保存完毕,交换开始
' c5 B( T. x5 I/ G for (int i=0;i<MAX_INVENTORY;i++)
3 Y) F9 N i( I$ R0 p {
: v5 u, T, L8 `: C! ]( O& b5 s if (dest == m_Item.nIndex)9 C8 x% ~* e7 I: j# d9 M0 b$ D$ W
{1 r+ S' v/ N+ Y" |$ ]$ P
//id相等 则 改变对应的dest和src8 ^! s8 S5 ]4 E
m_Item.nIndex = nTmp;4 x% Z# S i5 F9 z" I
}
/ E) h4 o- h* C; e' O }
* [; i b9 N, v3 b}
2 E `1 t& Y$ Y) `};% e; m' g Z2 |$ m& R. O# P. ^4 t! \
-------------------------------------------------------------------------
, h+ R: e9 {4 P& {9 m/ |3 G依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )9 |3 J$ V3 s; m0 u- z+ Z! e+ M8 u; d
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);/ Z% |4 n2 t# O6 i1 i2 U; @! y a1 ?
紧靠其上添加:
9 d7 ]( n6 W, ]+ J; l: ~ [if( pWndBase == &m_wndMenu )! W( e7 t3 }1 P* `4 U
{
# w: X5 ^) K8 q switch( nID )
4 p& I+ w, i5 D! z* P. |# u6 ^ {
5 w6 P% D+ e4 e$ J case 2:, ?4 ?- v- L5 G& K; t( u
{* c4 `9 {& I$ d1 \. U
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
! @& S" \1 T# o! h4 U4 N if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
' n9 w3 u" A1 { {, h1 E. Z' N9 v& u7 |" q
break;
: r; Y6 a' \# e) c# V$ T }
. K& B" o& d2 l- }1 D for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
1 t; s( S& J9 e8 F {! d1 r$ f {
& B2 X) y% G& y8 c. } CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
( `: o* m4 x2 D8 W( X if( !pItemElem )
' U. P! n6 W+ M {- | continue;0 t" y. A9 e7 d
if(pItemElem->GetExtra() > 0), w+ m) R8 @4 J0 a- `
continue;1 `# F8 F1 U5 L6 d
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ( C: G$ d2 T3 O9 i, a8 _
continue;7 s+ G; t& q: X, W4 J; d8 d
if( g_pPlayer->IsUsing( pItemElem ) )' T" Q* e: p9 |* C
continue;
5 `$ }7 N$ ?2 q, P: C3 z6 K if( pItemElem->IsUndestructable() == TRUE )8 n& O1 |* l- `5 C0 C7 L" f T7 r, A
{8 S, t0 o! u4 U; p8 W& o2 d
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
' X$ d: N7 `& |% f7 w. @ continue;3 L5 G7 Y, R' U* E/ z
}, _, O. Z: _% c5 @+ [
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);" H$ A9 G8 d2 e1 g) r+ G4 O
}; L3 ]) y& `. J/ ]2 J# m3 M
break;; ]4 y, Q4 C( Q; \# G# Q1 l9 }& g! K
}: U( _* @3 D6 H! y' Y
case 1:
5 s9 i2 Q+ V1 @; t# f: f3 \ {
4 @2 |" `1 U) ~ //整理背包; J1 C* r7 i x1 G' E- N
//////////////////////////////////////////////////////////////////////////4 E0 w, ]) }& R0 L7 ^7 z: _
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );6 ]) ~- Y9 [& M& w& `
//////////////////////////////////////////////////////////////////////////4 s/ Z6 v( F, g. u8 S) O) `* P
//////////////////////////////////////////////////////////////////////////
+ R5 {# d5 o2 f# B! J" { CInventorySort* pInvSort = new CInventorySort;
4 S9 W* I0 h! w* o* H" b vector <sItem> vItem;6 }' n' f; S0 l3 m E
vItem.resize(MAX_INVENTORY);//初始化大小
7 |% _; [' o4 z! M) m: P //////////////////////////////////////////////////////////////////////////4 V# }. z5 J$ G. G$ @( J
//填充数据/ @1 {1 S$ @8 g- K: ~) u" C
for (int i=0;i<MAX_INVENTORY;i++)
8 N! c; j# C: L7 D7 g {8 ~: t) _( h: B5 o$ P5 }# U$ d
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);3 U; N- T% p" @6 p1 h% c3 r
if (!pItemElem)
3 T( f2 U. y$ M$ S4 D' ^ {' W% ^: b) c7 s5 {& Y0 [
vItem.dwKind2 = 0xffffffff;
4 L' _8 a) O' ]3 M/ J0 B& ? vItem.dwItemId = 0xffffffff;% O% [, m, e( u8 Z" X3 L9 D6 b
vItem.nIndex = i;
' l5 ^( z) s* o* @$ a4 {) j }else {
$ x0 l# U7 [1 f1 b" ^0 q8 T4 T3 ~ ItemProp* pProp = pItemElem->GetProp();
# [; q' j/ v. o+ K$ W" O vItem.dwKind2 = pProp->dwItemKind2;
8 R. |* C# r7 F! x: X vItem.dwItemId = pItemElem->m_dwItemId;! |8 k1 y& a, f( Z) R
vItem.nIndex = i;2 K# b$ b0 T% ~1 i S" C
}
! n9 W7 S, z" n& R$ u4 i1 a //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);2 Y( \: x U- E# {7 a% S
}
( S, _# [( v; k7 h- u$ g //////////////////////////////////////////////////////////////////////////7 S( p! s. \6 d6 R& a0 d
sort(vItem.begin(),vItem.end());//排序1 f& j, H4 A& P+ X7 ~4 r
//////////////////////////////////////////////////////////////////////////$ G7 O( {7 M- q, b4 _
//交换
8 t* {6 m% {) r; k: w for (size_t i=0;i<vItem.size();i++)' {) H6 u7 d' o
{7 @$ F0 ~5 O6 V/ c; e9 h: [
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
& R; U1 P6 h5 L$ ~. a6 P pInvSort->Add(vItem.nIndex);
) `) j" p' W$ r }
1 Y0 ?2 S" ]. _% F BYTE nDestPos = 0;& Y3 i9 J X) K% e' s/ E* O
for (int i=0;i<MAX_INVENTORY;i++)
0 o, o' b E9 g( P( @ {
" D4 U! e" R" C" |4 m CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
) W. p6 E! X) a& [ if (pItemElem)1 K( M* p$ `* u% G7 T6 l9 a$ y4 I
{/ `% c$ ]- y5 e+ K8 C: t3 a \" I( W, C
if (IsUsingItem(pItemElem))
* m6 ^$ p! U! I0 p, O {, V" X, ~0 _6 [0 P
//这个位置无法放- @- f# a9 G; A0 T2 W. [. s1 K
nDestPos++;
! x" k2 ^+ } }; g& ~& j5 [ }
8 @/ s- E2 D% y2 K* F }
! j& p1 B3 i# s; E# K: q BYTE nSrc = pInvSort->GetItemSrc(i);
7 C/ y8 ]+ B" H. Q pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);! Z0 y. e6 B9 h
if (pItemElem)8 _8 x! z. ~* c! ]6 U* Q+ q3 w4 o
{
7 Y0 y) Q q0 ~. O& M! E0 z if (IsUsingItem(pItemElem))
+ a% i% H" h& K7 e* i0 ^" \ {
" r" h4 {$ p1 T. G/ w4 h //这个道具无法移动,跳过
8 N7 p8 ?! u V+ K f continue;
6 I V! g* v: u2 _6 Z) q$ ` }
6 D& ]$ ~6 N. D- \9 N( C7 P }else{) _% Y5 R1 B, l: ^" \* Q) q
//空位置 不用动
% {. t# o+ E9 \8 I2 I) _ continue;$ P6 x1 X% X6 ~! @3 k
}* F- ^- Q' Q/ E
//////////////////////////////////////////////////////////////////////////- p0 `$ f# n/ @# I
//开始移动8 X$ v- L7 N/ M' ]5 X3 V1 _$ o
if (nSrc == nDestPos)
! ?. f' G, ]7 j. p2 `& k {
1 ?0 E w+ a! H/ U; W' d* o //原地不动0 J9 [/ r7 i; @, @ s# ?, c
nDestPos++;
7 t5 ^# c" d B% S0 ? continue;
; V6 X! T$ L0 ? W }
' `4 g4 M7 I/ d8 l+ X/ Z, t pInvSort->MoveItem(i,nDestPos);
4 Z5 h, h2 k& \; [ g_DPlay.SendMoveItem(0,nSrc,nDestPos);5 q1 u8 j7 ?: w! Z- {& Q) x
Sleep(5);1 V; L( O& P5 I% L& _* o
//Error("移动 - %d->%d",nSrc,nDestPos);$ Y; D( u" @3 K
nDestPos++;) t7 C, L: f/ r$ [$ V( O' d
}
" m* N7 Q+ p) R+ \& \6 a$ G6 t: k //取第一个元素的信息
( H' o) ^& m& h9 ?/ X /*' s( i5 R G. h6 |$ e- b6 B8 c A+ i. j
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)+ K5 ^6 ?( C2 r4 @* q
{
# c0 F! C4 _! H6 t) W9 B Error("Move - From:%d,To:%d",vItem[0].nIndex,x);- f+ }' C2 }( f6 l7 u6 j9 r
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);: N8 T; p/ j, Y2 y. |
}
5 X F- ~% ] Q5 d, @ */4 R- n, y' [6 M/ r2 Q( s
//////////////////////////////////////////////////////////////////////////
& j' s- D O; o" }3 a break;
! C" Z# [9 I ]6 U4 c5 b, t }
) f7 Q6 ]9 o1 m2 J" i. ^ }
7 n) v s+ T" [& ^- Z7 o}9 D$ ~0 d2 W! N
m_wndMenu.SetVisible(FALSE);
4 H; ?/ B$ g( V2 e( I8 U
) A& ?# A/ M& d--------------------------------------------------------------------------------------------------------7 ^+ ]0 u) v- I1 p& M* |
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
- w F7 z+ S) i* r7 N8 }{1 _: B" ?* J0 E
BaseMouseCursor();
$ ?6 |# S) _! c/ W# t. V}
) i4 I0 _( \6 |% M. g! y在其下添加:; M0 h3 f# p; c& S8 a. G
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
& l+ G6 G9 x; U{; X7 Q2 M, N2 d3 I( l8 }- [
m_wndMenu.DeleteAllMenu();: o+ n9 i# H5 ^% S
m_wndMenu.CreateMenu(this);
! M, \$ M8 k8 |/ L. m" Lm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");/ `. E- J/ S2 b9 k0 D; _
9 X3 c7 H/ w T8 h5 k% c
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
9 W/ k) J7 j! `8 x% [2 E {5 }3 @{8 w! h9 `- y1 I- R
//P以上级别才可以删除所有道具
J0 h0 s! A' i* |2 z; Q" Z+ u m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");3 _; q! e, k* }/ g7 [6 M3 ^
}
7 h5 n1 y( O7 v& b6 N( [+ A z# `m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
( b6 S1 g# w) P& J1 wm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );0 ^& X+ {& G1 i6 I
m_wndMenu.SetFocus();
0 ^/ b' {7 ^/ R" F2 ]4 K: n1 x' \}
/ _) ?/ a' x, \9 \9 B7 I- L------------------------------------------------------------------------------------------------------------# ~2 Y! i3 v- I' ~
*************************2 N4 y5 E! s m' n5 H1 ^1 j
WndField.h文件9 C% }3 D2 m6 U* y* x& Q7 `
*************************, V7 U" A% I! v6 o S( F
搜索:BOOL m_bReport;! G7 t1 [ E: l+ `0 T
其后添加:( T. X3 X; e8 N" V8 H8 \
CWndMenu m_wndMenu;
, n' t9 t2 @' z搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);5 d( {. {/ N. q) `! p2 [$ Y
其后添加:
4 ^; N- m# W n5 m$ H: w kvirtual void OnRButtonUp(UINT nFlags, CPoint point);; }9 T$ l4 B/ v: h* u
' v9 m, \2 ?( L2 ^% V5 t0 A+ j6 c$ p
+ n3 @7 C2 a6 U |
|