|
|
源文件中_Interface文件夹下WndField.cpp文件
g, o. N2 C' H$ I( c( T搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
! n' R9 {8 @4 Q: X! ~" H( Q2 _% A( |, S" ~: {
struct sItem4 U1 Y: o6 r" B0 S. ^$ D
{! j, P% I/ c5 @; f% G1 f- _
DWORD dwId;
& V. O; ^6 K1 C8 ~+ l: E% C9 {2 FDWORD dwKind2;1 g/ i9 {. b- M/ e; K
DWORD dwItemId;$ D7 y9 ]; o+ ]! p% O
BYTE nIndex;
3 N0 q9 N5 w8 a4 o' [) v9 UsItem(){5 ^+ ~1 D# k! t x
dwId = dwKind2 = dwItemId = nIndex = 0;+ G( E+ P! ^5 d) P
}9 O* Y! z6 d. I2 u- h- Q
bool operator < (const sItem p2)1 `' K) J) C% S" }& o
{) j: z7 P9 N2 \
if (dwKind2 == p2.dwKind2)
2 g$ f6 f% q, X, w {
3 V) |0 ~' B* Q3 x! K- a8 p return dwItemId < p2.dwItemId; M7 U; d; O$ |: s8 g
}else{$ Q& B4 @* O) U4 [, A# a
return dwKind2 < p2.dwKind2;
* u" f; u; G* w# R: @* O: P }" Z. o0 y4 ^. i, Z- I
}
& n# B- I$ {8 w7 l3 d( z2 J};8 y' l+ U$ G R& z" d# H a" d
class CInventorySort* y. F3 B0 M1 p
{3 @) h$ }7 H* Q! C) M1 {% I
public:
; X! C5 |1 s' eCInventorySort()
2 J" V; s! n. t3 x$ Q/ N8 l{- M+ i+ m7 W9 |! M O
m_dwPos = 0;, p( @8 g& e$ f- ?/ F4 C/ o B
}! i7 I4 f7 H1 H, l1 |4 Z
~CInventorySort(){}
1 j% J, B! O+ P9 W6 b6 C9 D |5 `$ [private:
* G1 W: w! { U8 [' [sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息9 O' `0 [, @) w8 D/ M5 Y% u: B
DWORD m_dwPos;# B: V3 l! a5 _. F, H: q W" ?
public:3 D5 y4 T2 L; o; P
void Add(BYTE nIndex)
: {9 z; K/ l0 m' ^/ `0 g2 |{8 ]' E# f6 v5 T, k
if (m_dwPos >= MAX_INVENTORY) ^6 I3 E$ _+ a
{
+ U. u N* `: j+ c return;: m! e3 U2 ?1 d. O! `5 b6 k
}
' B8 L3 O: m0 x0 E8 ]6 R" U/ B m_Item[m_dwPos].nIndex = nIndex;
O4 N) @: q3 o. p! I) g3 N m_Item[m_dwPos].dwId = m_dwPos;
! ~# ?$ i; V8 p: P m_dwPos++;
, [* @1 @: X7 y6 O/ y& J. R}
5 F$ W- b7 U! n# F) WBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列7 Z3 T2 m: \, d" Q" p) j# r
{
; |. l/ ^, d7 J2 m2 C1 D# F V' Q for (int i=0;i<MAX_INVENTORY;i++)
7 B4 W7 ~" ?* e+ [0 @, C {! ?2 p! Z$ j2 B# I& l7 {/ S Q
if (m_Item.dwId == dwId)
- H! ^* j* p$ y {
4 `4 A$ N; r) i& _ return m_Item.nIndex;3 P( Q6 G# B6 c% r. \- l% c0 M" T
}
, J k! M/ ~, E3 u } {! k7 w% m4 A- M) |
return 255;0 K( Q- N3 Q, d8 l( `2 N
}& H/ E+ }# v* L* p
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置5 f1 ^+ e- T; N# u P0 p1 k
{$ v1 G9 U; y6 s8 Q! |! O: ^$ a
BYTE nTmp = 0;
9 C5 R$ g1 B t( w* l" t. t' ]' U bool bDest = false,bSrc = false;
& B! U S6 L9 f for (int i=0;i<MAX_INVENTORY;i++)
. g0 M! L5 v& a; b/ E {& V* ^7 l8 }( u' ~4 m* M! N
if (dwSrcId == m_Item.dwId)
( V Y0 q- m; g$ k2 T {
2 y1 k1 S. A j9 X. R1 B //id相等 则 改变对应的dest和src N8 H& g4 l/ a) v9 f( a
nTmp = m_Item.nIndex;
- [4 {. `5 Z# K v6 b |0 P m_Item.nIndex = dest;- R9 L% w$ `7 w8 o7 l! G
}4 E/ j. W6 V/ ?' b, Q2 q- _
}! t0 G* [1 s' K2 R( C
//临时数据保存完毕,交换开始
( L% ~% \9 Z' W5 `% u% ^ for (int i=0;i<MAX_INVENTORY;i++)
* P) p8 a1 Q' C4 T7 F0 Q {
% R! ~' f( B- ?1 y9 A if (dest == m_Item.nIndex)
) A- m5 {9 \4 ~+ P" O2 O1 \& j- ]9 F {# B Q5 Q$ G6 i9 c2 [
//id相等 则 改变对应的dest和src
T. t5 Y# y9 { y8 o$ B: ` m_Item.nIndex = nTmp; F" h; v$ c) _: C
}+ u% A3 a; a, ~' o
}
. d3 F7 _ G/ p. x3 P8 P}
5 F. c% {+ Y( B2 {( p/ r};1 n, h1 E% c- Y% z) U: R: a
-------------------------------------------------------------------------$ V5 N; _2 k+ K6 E. j( H7 `5 U
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
~- p4 n$ p; j _: m* J: N5 T- w搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);4 @/ E( |/ V4 x+ j7 X
紧靠其上添加:
% e4 {: y4 E6 y8 [if( pWndBase == &m_wndMenu )) E# L+ J0 I6 t) e( M; @
{
8 i" F1 y; Q7 C" c9 @ switch( nID )9 ^& P1 Z( X( a/ p$ w: x3 H
{) j+ R! }* k1 l% B
case 2:3 x! E( Y* e% }( U
{
6 a0 ~8 B" {. \4 E7 Z N- L //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
; d# S, Q& G" d% L, g: {( l if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 u* Q9 f! G! G H8 \3 Q {$ u7 f3 K: B- N o4 c. E
break;# [, s2 J* P" ]0 i4 m; u1 L
}
: i: }5 ?; }5 W) x% D8 f for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)& m6 W0 Y/ } I0 X5 o$ e5 L8 h
{* s0 Q S S& R
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);7 \' i. F' w1 Z: Y2 s
if( !pItemElem )
% s8 p1 h& p4 S+ H* z9 ` continue;% F1 e, x5 ]/ h
if(pItemElem->GetExtra() > 0)- r$ t! @7 J6 y. k; a5 Y
continue;! P/ ^. a& h* }; l
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
# S. T7 z6 `4 I3 F continue;
, t) u% A! }, z: N. e if( g_pPlayer->IsUsing( pItemElem ) ): `/ X- ?9 e5 B: ~ @1 a
continue;6 _3 q2 [0 Z' r! z5 [* W# i$ P
if( pItemElem->IsUndestructable() == TRUE )
' t5 y8 m) d3 a: t2 j8 z& | {, ]/ Y1 }; j+ G
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
- H4 f l0 I& S: c9 S; T continue;8 h3 Y7 m3 b( L& m
}
2 D7 b5 b* [) r1 r8 K; w6 w- W g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);( s6 j1 m. \+ m) S
}1 P" q6 g# Q" _$ k& @: x; L: X
break;1 @6 ?9 k: z' u7 b% m' N
}7 f0 i/ X8 W) s2 `* ~
case 1:! Z+ w) I9 n. l9 Q7 C* y
{$ K8 n% D; J7 @/ E, I" r: p: N5 j% ]
//整理背包
9 B. f, {! l+ f" ? ////////////////////////////////////////////////////////////////////////// k7 p! j+ m5 b
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
5 k. f% j2 z' m q8 C+ F //////////////////////////////////////////////////////////////////////////
" b3 S. r) P" C; e //////////////////////////////////////////////////////////////////////////
! h! F* x8 R- C" A) o CInventorySort* pInvSort = new CInventorySort;
' m8 |. Q8 }, ?5 l2 k- o3 } vector <sItem> vItem;3 C8 B1 u1 \4 `" P2 B& h
vItem.resize(MAX_INVENTORY);//初始化大小
( N2 A# }- s- n# O- P) S+ b5 p //////////////////////////////////////////////////////////////////////////
/ B& _& x! o& a Y' O //填充数据
3 \ T3 u! P9 t/ m for (int i=0;i<MAX_INVENTORY;i++). P1 `2 g! W: J' ?
{
$ A! f0 }6 p s2 v/ u3 ^ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
% R/ h R& H7 T/ u6 q9 O if (!pItemElem)1 T, \7 ]0 H+ _- i" A' s! R
{" ~1 x0 A) @8 h$ A7 w
vItem.dwKind2 = 0xffffffff;
- S }2 N9 q- m. V" c+ B vItem.dwItemId = 0xffffffff;: e. b0 I/ X0 g5 n
vItem.nIndex = i;
: \8 ~5 J2 e5 ` `, k }else {+ z6 z( h$ d! F5 Q$ m
ItemProp* pProp = pItemElem->GetProp();
3 I- |0 ~- x* L vItem.dwKind2 = pProp->dwItemKind2;
$ h2 n9 i$ C' R2 ? vItem.dwItemId = pItemElem->m_dwItemId;" t; N" I. M. c7 D$ @
vItem.nIndex = i;
9 p: S' E" t* V0 `9 l: v4 |# ^ }
P8 V2 {2 |# U8 H1 T, u //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);+ }8 d4 P; N' K0 f
}
8 w; {8 V+ f* j( _6 l' Z //////////////////////////////////////////////////////////////////////////5 x+ ~& s- N. q3 `: C7 \
sort(vItem.begin(),vItem.end());//排序( |# R/ E9 t. p: l* r5 m1 T/ x& y) p
//////////////////////////////////////////////////////////////////////////! A- l; b5 s6 m
//交换
6 @3 k0 W4 y6 u, {: M( s7 o$ z for (size_t i=0;i<vItem.size();i++)
1 h3 M/ d W: z/ W- ?( B1 G2 U {
1 {* H& z) e F* J7 X5 h //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
# c& c5 F7 ~4 l; d+ W pInvSort->Add(vItem.nIndex);
$ Y, V% P- L- N9 k7 s% z' ~* { }
$ q& o; _2 B ?2 U BYTE nDestPos = 0;4 F7 ?& N# v9 E k
for (int i=0;i<MAX_INVENTORY;i++)
" e# [! M% V: Y$ ]$ [6 t L$ z {
9 D% O4 n! ]9 X( O& h CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
! B4 y- P# o1 H! W2 ?2 b5 D# I' m$ r if (pItemElem)3 i% `9 {( R" m- ]% i) y3 w* {! J2 y9 ^
{ y5 x& \& [! o2 G% a
if (IsUsingItem(pItemElem))
. K, c; S. ^5 \: b {
, P( s: ^$ `6 I //这个位置无法放
; }( t2 N7 I6 ]. c/ z. W nDestPos++;
8 X% [& S8 d$ s+ h- f3 ]2 { }
, ` \# [- G5 ?; i/ } }
0 F+ [9 a; S9 o BYTE nSrc = pInvSort->GetItemSrc(i);
$ V& F8 M0 P/ N7 j$ [4 i4 n$ _1 p pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
% k' x0 e3 O) ^* `" c' j0 n: w if (pItemElem)9 e6 w& S/ r5 A6 T- {1 r4 L
{
+ o( {. S+ F# @8 a$ O if (IsUsingItem(pItemElem))& i( `4 J# J n+ W
{
) ?* \% J0 j0 }; J //这个道具无法移动,跳过
3 S/ n4 t4 G, X. G- d; y( s continue;
) ?1 p9 x2 v9 [" a }
& m* m" R7 x- g& {' j8 r3 d3 ] }else{
/ G$ v& a% @: l$ j- Z' i% X //空位置 不用动) b1 w0 |* ?! F" H9 }0 V! q+ m9 O& B
continue;
( i" i3 y3 J$ F- W }; t Z' ]/ Y; y4 V8 A1 \
//////////////////////////////////////////////////////////////////////////3 h/ S. M% Q+ y, o
//开始移动+ G9 Z6 o0 J+ b5 T
if (nSrc == nDestPos)' v0 v/ j4 _% I; X$ k& r: B& B
{
2 v" q" z% E# j" E! O //原地不动
; _& I; Z3 N7 t6 t. |. x nDestPos++;
C b0 v1 b3 z, X9 z continue;
2 |% D1 u* I6 i" J |+ S, f) N; B }
! E# A r5 s! M pInvSort->MoveItem(i,nDestPos);3 x) j1 ~4 x: o0 V, }5 g5 y
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
# K2 X5 z: k# s Q8 |/ { Sleep(5);6 H. |2 H+ e8 j# i
//Error("移动 - %d->%d",nSrc,nDestPos);8 \1 l1 O1 H) _
nDestPos++;$ B; [+ E& ?+ @' |0 |
}
3 a* q& Q( p. k1 D5 r //取第一个元素的信息 s; z: U' K. C( F8 F7 b4 I
/*
- x- U4 u" n% V, Y& U" O/ ]" l if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
3 {8 r3 t% B, o/ A7 l7 m {
+ R7 E! n3 g, `; X0 j- R, s6 v$ i% x Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
4 t9 o, [+ x+ S* }" u; s- |, X3 N g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
! [& J4 _) N! ^# r }3 |, |! I& ]- ~# ]7 J; n2 O
*/* A4 K9 P0 a; i8 s" I8 d$ q
//////////////////////////////////////////////////////////////////////////3 u, N; S6 ~& P5 ^
break;
# v$ ~ m" m2 w; r: J6 n: g1 i5 s* p }1 O7 E, x: V) \$ x+ H9 W
} 5 x, {; o% L" y, G, R: R
}- N! O+ m$ j9 c* B1 S8 I, C; V4 ]
m_wndMenu.SetVisible(FALSE);( n. z/ P- S6 g/ y6 ^- b
$ l' A b/ U9 r) x--------------------------------------------------------------------------------------------------------' h* q' F' }8 k$ V0 z
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)" Z) R0 p; N/ @. p
{( G' V# v; m7 g: D
BaseMouseCursor();' x! L1 y5 ?* h1 R: |
}
# x. E r5 j( w9 j! p在其下添加:
b' j8 ?3 P2 Wvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
- W2 I9 j) [8 d* l: E; Y. R) Q{
& X5 J4 r( Q* gm_wndMenu.DeleteAllMenu();* A! i; R% g& w; o2 _1 W" j
m_wndMenu.CreateMenu(this);. H% T+ [2 @! t. R9 m) a
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");% S, f6 p' ^) U Q/ [" l T
& X/ S' y$ q0 Eif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))5 u& a+ r2 D( N, m8 T
{$ t, g+ w7 L: I! S) A! ~
//P以上级别才可以删除所有道具
+ v/ c( _" B/ s" G m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");& z& u) Z4 _1 G
}, ]7 B" Q7 C# k" Z- } y% |; ]
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );7 Q' E3 }+ W8 w9 V4 P( N
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );6 j% y# N7 S6 s3 }3 a0 [; l! n; Q
m_wndMenu.SetFocus();; O/ G' @6 K) Y$ z
}4 p7 W: k0 s! l/ S; A3 E/ [7 Y
------------------------------------------------------------------------------------------------------------
$ T* o- ^9 I* d2 Y* X*************************% ~/ ~! Z5 c+ G8 F1 I; I7 e
WndField.h文件. T7 ]6 Z7 R7 \& N- |
*************************3 t0 L, p$ d( p3 u' j+ o% f5 C, o6 g0 m
搜索:BOOL m_bReport;5 B, p! b: U8 K& E4 m4 p5 n
其后添加:
5 ?9 x& E8 o+ e) @% L; t! {- x0 t' n8 }" DCWndMenu m_wndMenu;0 O$ \3 C- O; e; d& ~
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
$ Y \1 Z* M; `* a$ b' g- ]其后添加:
8 L3 M; a- P" [virtual void OnRButtonUp(UINT nFlags, CPoint point);
* _% G* _4 H) C. B i1 g% A; _8 K- W! X6 q# F* J: ~4 R+ t, A
" M4 o9 _6 @, X8 O8 t2 I. T
|
|