|
|
源文件中_Interface文件夹下WndField.cpp文件
. L% ?7 @. ~* e搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
. J) h/ G0 [4 ~0 p& X) d I! r
9 y4 [8 }6 l, y6 n' \; | H3 Mstruct sItem7 J5 q% V, c: |' g
{
: U7 }4 K6 a. g: bDWORD dwId;
, ]7 t" Z0 S1 l( y6 \. N2 _DWORD dwKind2;
; O1 c" ?* Q; E1 Y. G" QDWORD dwItemId;9 [5 F5 U# q* H* M' u" [
BYTE nIndex;0 L x1 W* N) b& o
sItem(){
0 t: A$ q: m5 l1 t O S" }4 g( q% ` dwId = dwKind2 = dwItemId = nIndex = 0;6 s2 k! X) r. f$ w0 Q
}
: G/ [ D- K1 m* Q+ ~8 Sbool operator < (const sItem p2)
5 `. F# } |1 M$ y, o{
9 F o% x: E' ]3 G7 S. R if (dwKind2 == p2.dwKind2)
' `. U3 p6 p" m: _! ~ {
6 {" N8 Q+ R* N) O return dwItemId < p2.dwItemId;. l6 o4 K7 @1 ^
}else{0 \) q/ B4 ^0 t0 r3 Z
return dwKind2 < p2.dwKind2;
! K7 q. T9 ^7 t7 N }( Q7 b1 I2 J# M/ ~3 n" _
}
4 E& D. J& C& i7 k7 k4 h$ A* D};5 b q$ D: u: Y; `( B
class CInventorySort
1 _9 z4 i$ Z y# b, l4 c{
; ?9 K4 G5 }2 o. ipublic:
5 c0 a7 l, Y& z4 q( NCInventorySort()0 M8 @, n( {0 U* _+ @ ~
{% }! y- P+ y) J6 v3 y
m_dwPos = 0;
8 ?6 Z M" R, L' @, R( r/ i. r( v& W}2 L+ C( n3 y }, ]
~CInventorySort(){}8 V, p3 |3 f1 n7 I" K* h+ [; c! B. @
private:% g. p& M4 a' a) H; q
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
8 m- ~4 T- X( g/ jDWORD m_dwPos;
- ~9 n$ U e5 M0 P' y& Wpublic:. z5 Z( K/ h3 Z: H. Z
void Add(BYTE nIndex)
' r- `& n; W% S" I{! e0 S1 d" S7 W5 v
if (m_dwPos >= MAX_INVENTORY)0 s" A% ^) C4 @' c
{ B8 t: y+ T2 U# h4 B+ @1 D
return;
, o$ @; n5 `+ N& K! Q; ` }( S/ U4 }/ z; s$ W0 \* V
m_Item[m_dwPos].nIndex = nIndex;6 u' N6 s v9 G! y& P! w6 R$ V" X
m_Item[m_dwPos].dwId = m_dwPos;! |# T# {$ B% S0 B' Q/ y
m_dwPos++;# G. \. y$ d, g, O, N* z$ b
}
2 z, ?5 {! J3 aBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列3 V. {4 a" r! b l2 C7 H- H0 H
{
y5 b3 e) x# m( m5 c. G! J for (int i=0;i<MAX_INVENTORY;i++)
! M8 ~/ X8 t/ M }$ e {5 y i* O4 W7 X; ?
if (m_Item.dwId == dwId)
, |( ]7 ?7 F- J2 \! H6 M2 m: K! _ {* o# C' K: d- B5 @! H6 C# W
return m_Item.nIndex;9 E# a4 |+ A. R* W- r
}
. P' z, J" h* ? }
" W( b+ b& [! |8 Z- U% M( q4 ? return 255;
5 l6 d6 F" r3 @* H+ W* W4 Q0 a}) r( K& o& b& J# d* c9 X1 k; a
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
! N. Z' g' n$ ^) N% e9 {{
7 A, j% a" ?1 s, P* ^- G8 h BYTE nTmp = 0;
/ @' ?( r Y3 S1 L, I bool bDest = false,bSrc = false;
( Z& }, ~3 v0 `7 \. g for (int i=0;i<MAX_INVENTORY;i++)
/ t$ [- }! k6 P& z8 J {
# _: W% M7 F0 X6 O; I0 H if (dwSrcId == m_Item.dwId): {; I7 R: G* j7 S+ g
{" p! ?9 M! a4 r9 } k, R3 _& ^( E/ p7 p
//id相等 则 改变对应的dest和src( @% G L8 l! t+ o3 `6 G2 G
nTmp = m_Item.nIndex;3 C) G8 U% r& U$ b
m_Item.nIndex = dest;
+ B8 a1 Z1 K+ _. {# } }
" M ^( Q) C: g: A) A }! H' ~2 r0 a$ `+ j+ d2 I8 w
//临时数据保存完毕,交换开始* |( r2 c4 b: F
for (int i=0;i<MAX_INVENTORY;i++)
& y3 K7 V' p; o* P% Z& v, M {
7 D$ Y C, }/ q8 A' ]8 {+ @ if (dest == m_Item.nIndex)
6 k, f& f1 F! e- Y* B& `1 U# o9 ? {
+ Y v6 i& j4 c5 }" `9 w //id相等 则 改变对应的dest和src" h# }( c! r+ q' G( N6 b; Q0 e
m_Item.nIndex = nTmp;
- ~8 A& m$ N/ F! g }
3 e; R! I' x, ]8 l, x; B3 V }1 p# \/ n% l9 r
}2 V" W) M/ ]5 P* N: e( t8 y
};. m' P J8 `! E- N! E* v
-------------------------------------------------------------------------
E4 A) o/ E1 M$ [2 ^( x依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
. @" Q, A$ R$ g% W% U搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
+ I/ K* X# B0 x紧靠其上添加:
7 R8 F) i% ~. Q! X. Q6 u, Sif( pWndBase == &m_wndMenu )( v3 j+ O# U# ?- J! X' i, L9 l
{
, @+ K0 S9 @( [4 t$ L3 C switch( nID )
' X7 K! D$ O9 d/ `9 s {
8 C, H) B9 ]" ~" m9 k case 2:4 w8 P$ y* I4 S- A: C/ a6 F8 C
{
: R) T/ u, ]. S2 e+ O& l8 L //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);' K. Q4 x- E/ Z, z/ X$ @' O6 a
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
- p3 d3 F/ x8 e0 g( A {% m' {8 {2 m$ G2 ]% }. l. [
break;
0 V2 F6 s O2 O }
$ |2 j7 ]+ _3 B& v. E3 z for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
' v3 h; \$ B! J# U+ F. j) ]5 {* t {: h" P' m) F1 Z* e
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);' R! v$ o/ H: _& G6 `2 }
if( !pItemElem )
3 `0 u' [1 G3 M continue;
3 p: Q- x( f. u& Z if(pItemElem->GetExtra() > 0)& _0 h2 S( m" l" C& V
continue;6 J( f8 D# k; J$ k
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
l3 a' J" B0 W& | continue;
* f) n6 ^/ i& ? if( g_pPlayer->IsUsing( pItemElem ) ); x4 t, E* Y2 r- @' p, y* c
continue;
. D, h# o' o5 x if( pItemElem->IsUndestructable() == TRUE ) H' d U: [+ f+ y7 d
{$ x5 ?6 C4 @2 e4 U0 G9 z
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );+ ~" }$ e+ q6 [! c0 n
continue;9 N$ D3 L6 C/ }$ E* i
}% V5 B) Z9 s ]
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
- l5 V1 E0 B+ |3 K, `# L8 ] }8 |; |! c% q6 Y- U4 a
break;
) X4 O! w/ p( c0 ~9 Q- |( J3 {; u }
, Z! ]. H( h6 v. h5 t Y5 T case 1:3 L: p6 a: y( B, z' F2 J
{! ^4 L8 o& V1 g2 k0 Q) J
//整理背包. H! A8 ^: x, H1 i+ h
//////////////////////////////////////////////////////////////////////////
& s T% s+ n+ e7 c //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );3 G' C& h) z) p
//////////////////////////////////////////////////////////////////////////
3 N/ b5 J' j9 K; {& C2 d8 | L7 y //////////////////////////////////////////////////////////////////////////4 c& }- ^& ^$ v! `5 D
CInventorySort* pInvSort = new CInventorySort;
1 r; @; T \! {6 j% x0 | |1 e4 T vector <sItem> vItem;4 y) I' l* N) M' E* g! ?
vItem.resize(MAX_INVENTORY);//初始化大小
0 ^3 c$ {" [! O S$ O& Z% } //////////////////////////////////////////////////////////////////////////5 B: B! {& M( y! m3 u" e+ K
//填充数据% _/ ]- s* c$ _9 z+ ~* C
for (int i=0;i<MAX_INVENTORY;i++)
: c' ^# d" ^% y {
, o3 @2 E5 P! [ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
! n: R3 h, w3 k! e if (!pItemElem)
+ r+ [6 M- @- ^% B3 b9 ^& U {
" ]( Q& Y# l& O9 J vItem.dwKind2 = 0xffffffff;
) I/ F: ]+ ]4 ^5 d# B) ]; ?+ _ vItem.dwItemId = 0xffffffff;
8 W! Z" u$ e' v7 @0 z' X vItem.nIndex = i;; ^+ c1 F; \ [/ }7 u7 D/ v6 r
}else {% f3 [% o0 {" H2 E/ Y5 Q x
ItemProp* pProp = pItemElem->GetProp();! h+ y# n: U. R; s% R1 b
vItem.dwKind2 = pProp->dwItemKind2;
& G9 }* S C) t6 ] vItem.dwItemId = pItemElem->m_dwItemId;
9 N, o# v0 |4 ?4 R8 K6 u vItem.nIndex = i;/ S" ~1 j; |7 k
}" h+ s! e! z( D& k- r
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);4 h7 I4 u( L, G/ y! T) d
}
+ y" q" Z; R3 a A3 H //////////////////////////////////////////////////////////////////////////
9 n+ B: T! Q# h+ M2 n1 R6 n! h% E2 h sort(vItem.begin(),vItem.end());//排序- x' b! ]( w( B) @
//////////////////////////////////////////////////////////////////////////6 |8 m' @5 ~! d/ a. y3 ?
//交换9 Q' q/ E! t( [4 s* M& \
for (size_t i=0;i<vItem.size();i++)9 B; |# }4 s: y. k; C
{
, r4 s/ r: E, Y0 A# Z0 ` //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);1 C; c) L. H; Q$ M' L. f
pInvSort->Add(vItem.nIndex);' p5 ?+ Q9 ?' B) Q2 S/ ~; [1 E3 l
}3 }8 i! G2 b9 X; P( I u; e8 j5 K8 r
BYTE nDestPos = 0;
. Q$ P$ g- U7 @! O0 `) u for (int i=0;i<MAX_INVENTORY;i++)
9 M/ z! S% m: U, n' d- u {
1 ]; ]# G; h) F2 ], w CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);& M. j; ]# I$ S1 }
if (pItemElem)
- D* M' _$ o5 u: p Q2 G$ {& d {1 F/ b! p3 s9 P- k) b* L
if (IsUsingItem(pItemElem)), e% z( i5 w3 C- A! O+ ?" e" G
{
1 q. v6 H: ^' L; m/ C r //这个位置无法放! m k# I8 v# g5 g- k4 o6 l$ S8 F
nDestPos++;9 h0 f- l; A: A; d: _( m- f; G
}
6 z( n$ O) L$ E }
' s1 B% J& L, k+ ? BYTE nSrc = pInvSort->GetItemSrc(i);
" \& c1 i" u: ^! y6 C0 S3 N: W pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);# _4 r; {' V. Z
if (pItemElem)& w# x% d5 {! S6 v% m8 V, B
{( U1 w7 Z2 v; m/ A2 q* k! _
if (IsUsingItem(pItemElem)) f. K8 C& a- b* a3 f
{" f/ C6 o2 s8 s" b' c( ^5 I
//这个道具无法移动,跳过
3 d4 J2 ~: _: {" P! E continue;
" m7 Z! T! b1 J% ? }
5 W1 D* Y" t3 A }else{- [( l. k) V& P3 z- V' z
//空位置 不用动
# i' ^3 R3 x& b2 y3 j& r3 \* Z continue;
* }, D9 x3 h7 u; L, X }
. \9 N2 k/ }! T. c( q9 }( I //////////////////////////////////////////////////////////////////////////9 K& w Q% X4 _# I
//开始移动5 F+ o$ z. c, H% [0 k; c
if (nSrc == nDestPos)0 X9 l- g; h3 m) |# f
{! D# f# Y0 M6 h9 C3 g
//原地不动1 J4 ?4 p$ R& [ g
nDestPos++;, [" S7 w1 L. ~4 `$ S
continue;) A1 E1 C9 d5 | p$ C* y
}4 p2 W; X% f5 g( s) b9 r, A) A- K
pInvSort->MoveItem(i,nDestPos);, ?0 N6 P/ z, |# }2 \; u& D
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
/ i% p, M: p0 Z) V$ Z Sleep(5);
: G9 a9 l# Q+ D3 R/ L. `7 R //Error("移动 - %d->%d",nSrc,nDestPos);" H1 t7 X3 z4 S3 Y7 Z9 [
nDestPos++;4 d; @/ a# u' c c6 t; C' ]3 {
}
8 c9 N# |8 @$ `5 z" E: N //取第一个元素的信息
+ N8 a; u/ Q# r7 ~, I; T /*
7 X V$ k% d! \: U4 T if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)' z x6 s4 n! P7 Q+ { A; M+ e
{9 \0 H, K% x+ b
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);, ?, K/ i3 Y0 H p/ v
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
+ M" k1 t% T$ ] }, Z+ H+ s0 y4 X! J* d
*/3 Q7 ]& v; w- ]2 h q
//////////////////////////////////////////////////////////////////////////" h" t N( n5 ]6 Q2 \- Q
break;. R. e. a0 G3 T6 e5 [9 d2 h3 V
}
{6 r5 _# U3 f/ k1 J9 n }
# S @/ u* d: [- `1 T( c5 Z) o% J}' v/ V2 k$ i# {/ }. {
m_wndMenu.SetVisible(FALSE);
, g& b% j" l% y/ ^1 v) {
8 E1 o- X H# A o. p$ n--------------------------------------------------------------------------------------------------------% `7 y2 y9 a) |& V, f
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)- {! X/ A6 U/ B1 l
{
8 V* S8 E5 P, q0 |BaseMouseCursor();& @8 ~4 C* u5 M6 K: z+ B9 A; S& w
}! `% A9 K! Y, W6 w! U
在其下添加:2 d' D& o+ }2 V: T2 K+ X
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)1 D0 {2 S' ]8 |( I1 A
{
( t' f4 T9 U6 F) `0 Wm_wndMenu.DeleteAllMenu();6 x+ e# N: D! u$ k0 Q
m_wndMenu.CreateMenu(this);# ]% u F; e) P7 u5 K
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
9 @( ]+ ^- e) P7 D1 A' {" N
* j& \" q8 h. Cif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
! Q6 t0 q* P' Z/ _+ x8 Q% ?; k{7 v. N, Z3 d S0 C2 ~
//P以上级别才可以删除所有道具0 B! M& v7 t* N# v0 t3 O: }( n
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");& i/ k) A3 | d6 l3 D
}
4 i D" c* ?. l6 I; e. }1 zm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
3 o! b2 u% Q5 b1 X2 Zm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );& ]8 Z5 j. }/ m) b. U& ^( k! p
m_wndMenu.SetFocus();' L. ]: B* p$ E# k0 H+ S
}. T; `2 o' Z0 j8 ^0 N8 n% d
------------------------------------------------------------------------------------------------------------
( m* ~8 _: b$ X1 o# S p* _*************************7 ~) ~% J' W& C1 S) r
WndField.h文件# u+ I1 U4 b) e$ r
*************************
9 p4 h4 n1 b2 w: ]搜索:BOOL m_bReport;! Y/ q1 e2 X) B1 X" C6 y
其后添加:, z1 y3 R8 X/ Y9 z0 n2 g
CWndMenu m_wndMenu;
/ Z* J7 `' j; _$ W, B" @0 T搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);2 x$ b+ ~, ^! t6 G1 m& o6 C" I
其后添加:
- `/ ~! ~: p; F, G/ O1 Nvirtual void OnRButtonUp(UINT nFlags, CPoint point);; j8 z, w. P9 Y8 i4 F
9 B- T! t0 Y/ K1 {2 s
, W& H6 R5 u0 L
|
|