|
|
源文件中_Interface文件夹下WndField.cpp文件
5 F# X! m s& F0 p1 x; p搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )# {) x6 p9 x7 E. a% n
9 w" L# V: p2 k, D
struct sItem- i$ A6 i; h9 i! h3 q
{
w+ h' {+ |( R, t! F/ ]DWORD dwId;1 `! `" z. H0 m/ H# n0 v4 X9 A
DWORD dwKind2;
% `+ e6 P- a' f% m/ hDWORD dwItemId;' p5 z. y6 P5 L
BYTE nIndex;8 N1 i3 q& k# J) P% H) ]
sItem(){
1 u/ F1 K3 T R: K3 H dwId = dwKind2 = dwItemId = nIndex = 0;
5 _6 y1 B0 F3 V: _# x1 F}
4 M% j2 L5 _/ G/ l- N2 t, y8 tbool operator < (const sItem p2)
( B3 i! X# k; Y' W{
/ w1 Z, q2 \4 V5 @3 ] if (dwKind2 == p2.dwKind2)+ i J9 h0 P. F' S! U7 \
{1 q, A; L/ R& {4 r3 b) H
return dwItemId < p2.dwItemId;9 I5 E3 r5 m: p3 L% Q
}else{3 ^6 b$ D7 F0 S7 Q! Z: {/ L
return dwKind2 < p2.dwKind2;, Z- O# C! @+ X, p
}3 V% E. ~0 Z, ~9 Y6 J
}
1 r: {$ S1 M2 X* e g- t0 r};9 T; b" J( J, q4 t; _
class CInventorySort
$ w. u$ P5 G+ s" V9 ^- v{' s3 Y L' k5 x1 r
public:( l# \1 C' C( G2 Q* x5 x1 f" W; i2 g
CInventorySort()
& r7 |4 A. V/ L! w5 C9 B0 Z{
9 N! S7 y$ R6 [; d; `, E m_dwPos = 0;) m& ~2 X. o: H2 Z
}* T; t' v% u4 D0 d' d
~CInventorySort(){}
* z @ V' j# J) zprivate:
% x: q& m# \, C9 E) ]& wsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
: T! |5 g0 N, K! Z+ @$ [DWORD m_dwPos;
) T- g# |" g3 a, M/ d4 dpublic:7 B! O t" A: b2 d& e2 _5 a
void Add(BYTE nIndex)
0 E" G2 @$ s' H0 `0 b/ I: i+ F{ T9 ?$ Y2 v' t
if (m_dwPos >= MAX_INVENTORY)* s; m4 {" [: V: q# K! y% ~
{
7 J A! R2 a3 N" x: S return;
: p2 M$ K. T4 O- f* a }1 R9 q1 F! ^" Q. Z( K
m_Item[m_dwPos].nIndex = nIndex;
9 S: w6 z1 A# Q+ O/ [0 I m_Item[m_dwPos].dwId = m_dwPos;
0 T' S0 _& T; `% z m_dwPos++;
; P& m9 t: N0 R) L3 e: ~2 o8 X. w}2 l2 q2 d* }+ Z' x
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列: y8 n+ u& X4 t
{
( Z( e2 v) ~/ Z+ H7 z B8 d, G$ `$ I for (int i=0;i<MAX_INVENTORY;i++)
6 `* Z8 t& Z: i1 ^7 { {
- h! F% L( u0 M1 w& J; `. @& ?; W5 A if (m_Item.dwId == dwId)
, d4 h2 i& b6 O3 |/ o+ R {
0 C8 O8 z( {, k+ D$ ] return m_Item.nIndex;) h" K( c0 z; V, _* D2 H4 U1 s
} [7 G3 r w6 D, i. N0 ]" L
}: H' V' Q! f, W* g; P8 i
return 255;
" r- o1 s! _& a}
2 M; r6 e9 D- n; e! m1 w2 l5 r+ Cvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置* v8 g; B% _; H( d8 \
{
3 e! `- F# ]/ } BYTE nTmp = 0;
# j; I+ k: f/ ?8 M bool bDest = false,bSrc = false;
2 q2 P' X9 B% X1 h, {! N for (int i=0;i<MAX_INVENTORY;i++)
0 Y$ g* ^. j: ?4 C9 _" V* n {
M+ W3 o$ g, ^ ` if (dwSrcId == m_Item.dwId)9 S$ s }3 c5 h9 r
{7 Z# r2 y8 p g# h( \$ Q
//id相等 则 改变对应的dest和src# y- w0 ~3 [) o5 }. e
nTmp = m_Item.nIndex;
: k5 k2 M7 |7 u! W: [0 v( @ m_Item.nIndex = dest;1 `7 @: m9 ?. U$ ~
}
4 \/ s: H& H8 L6 ~) m; @) D }3 C$ P6 H5 | Z; s' A7 @
//临时数据保存完毕,交换开始
- x M; _" ]7 _& W for (int i=0;i<MAX_INVENTORY;i++)
5 k7 O4 M+ i( P0 U1 O' ~( u) Q6 r {
) l7 D& ]. \* N$ x5 I$ X- f5 z% g% s if (dest == m_Item.nIndex)/ b e: E l2 `/ A% b6 V; L
{) _* a0 f( _5 w. r: t
//id相等 则 改变对应的dest和src% Q5 {+ }) n4 S8 l H
m_Item.nIndex = nTmp;
3 ~, h4 D! c* z4 n" O2 W }
+ C) Y8 m7 g/ m/ [. g3 s }
' V/ r4 D- y1 n+ ]. M2 Q}
$ b6 r# G, y6 M5 u};
9 }: z; K: k! A: T; T-------------------------------------------------------------------------
/ j) k- }; r" ^依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
' f0 c- {/ C/ p' e搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
: g( K6 q+ B7 r; ?3 r# @$ Q紧靠其上添加:! e: Q2 ^/ M+ G7 k1 |
if( pWndBase == &m_wndMenu )
- B$ r+ p, ^8 b; H# T/ e{
+ e" E! T2 K q t8 x- m% x* O switch( nID )# C$ }4 a; _: q& q
{
B2 @* n- H4 s1 L7 P5 A1 @ case 2:1 p) I; i+ |: W. P& o
{/ ~* v' k% ~. n$ @2 a: o4 a7 L
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
3 J+ O! m7 J9 A( P b3 N$ G if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
[) T- w( j9 R) P; W( H, L" o {" J# t5 ^- m* h0 J$ q7 B( w/ E
break;
8 `( U3 M: n! n" h; ^% ~* z) }% F }
3 m9 ]( K* z9 Y6 N/ x2 k# K. v1 P for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
! }/ Y6 {* M* ?- i+ Z; ] {
& ~- A1 k8 [, q) O9 d CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
, a: h3 w" o& l# k( r, w* ^ if( !pItemElem )
- N$ e7 M( |9 ]" F/ i9 t' g3 ^ continue;! e; H4 }. d& n
if(pItemElem->GetExtra() > 0)* K, q/ @2 m' ^& B/ c) B8 Y+ c% O$ @
continue;
" g0 Q, r6 r0 y5 @1 x$ x% v$ Y if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 5 ^0 V; L6 x0 c! I W- ` K1 j
continue;' u9 G( q7 }) m: P& a( Z& T4 \
if( g_pPlayer->IsUsing( pItemElem ) )5 s9 n2 D, y* Z3 q3 b
continue;2 k k8 |$ [' W' X) H
if( pItemElem->IsUndestructable() == TRUE ): r* f3 {/ y' [' a/ B5 p- n
{
- E0 m; g {! B2 Z+ W4 U' `- a g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
I3 I& X+ }9 T. `$ i Y/ }# { continue;
4 W4 D$ L6 A5 e/ A% R6 s }
- T" X/ {$ S; n [- t+ ]) v g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
4 ?$ l1 u. r" `4 I n6 g, O }1 r: a# g% @# q$ s! [( Z
break;; |: V+ q6 ~6 j( ]
}9 F/ K0 \9 u/ z. q% a4 I9 c. t
case 1:) K0 Z1 B3 Y' u. c8 o1 h
{5 P) v: R. p5 ^% D" z5 A8 s% B
//整理背包; I7 \1 G8 e6 G6 ]% `: o% Q
////////////////////////////////////////////////////////////////////////// z% C& w8 q% X' J5 L
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );, Q2 b2 Y$ z' g9 O$ f1 }6 w: u
//////////////////////////////////////////////////////////////////////////
& W6 v1 S* V m8 r- d( |$ h" o //////////////////////////////////////////////////////////////////////////) ^' r- ^1 l. w" x7 O! m) w- ~
CInventorySort* pInvSort = new CInventorySort;
5 a1 L3 D+ z8 l$ v6 }9 G5 i( O3 \ vector <sItem> vItem;6 Y5 W" h7 |6 A7 t. p3 c& i
vItem.resize(MAX_INVENTORY);//初始化大小
. Z( [, Y8 u- D //////////////////////////////////////////////////////////////////////////
1 v6 o. \( [1 W2 Q //填充数据5 K( y; f G, }: c7 G
for (int i=0;i<MAX_INVENTORY;i++)
; a. W1 _+ s& @, h1 P+ c; ^ {
# \- B4 E1 J- i- z' o9 q4 z5 g CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
- ~1 v* W3 T8 X* H, f2 L, w) w if (!pItemElem)
/ m1 G% u: k3 {; m4 O8 [7 \ {
! o) z) _& C* Q, C% v3 X vItem.dwKind2 = 0xffffffff;
+ a& `. [/ Q- s. { vItem.dwItemId = 0xffffffff;
; I# R2 E' ]2 y% z1 B9 s vItem.nIndex = i;9 u! y. \+ D$ v( Y
}else {
' J. N6 ]7 Y* F5 R; X- B1 w$ _ ItemProp* pProp = pItemElem->GetProp();* b# `9 ?7 K( w0 B( i8 p
vItem.dwKind2 = pProp->dwItemKind2;
3 z1 p) |3 j) }; F vItem.dwItemId = pItemElem->m_dwItemId;# `$ M2 N# T. V z2 \' V) J
vItem.nIndex = i;: G4 P$ N- h3 d9 `/ T. z, j r
}& W8 _3 O8 ^# P
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);9 V* u& Z' j# y( ]
}: D0 F4 f% V b5 k! K* j
//////////////////////////////////////////////////////////////////////////
0 g" [1 s, v- ~' m7 c3 s sort(vItem.begin(),vItem.end());//排序
/ Z: @2 Q% w8 S6 {" B //////////////////////////////////////////////////////////////////////////2 K' y- q) e, k5 x
//交换5 W# m+ [, C0 v$ n& ?# D
for (size_t i=0;i<vItem.size();i++)- S3 X$ n% s- v
{5 ^- P4 l/ A: M$ s. I6 o; ]
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
7 q, w* }+ E( B$ x+ M& { pInvSort->Add(vItem.nIndex);
7 d- p8 | F7 ?1 D a4 | }
6 K$ O. T' q$ Q- o- ` BYTE nDestPos = 0;8 R! ?5 f5 |0 ~0 k
for (int i=0;i<MAX_INVENTORY;i++)
. L7 p" N0 V. p4 F {
, G; O, v. l$ J- Y7 j' B/ u- U CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);/ w$ N' W7 g, r: z
if (pItemElem)
' V6 t: E9 h* Z2 t4 I {
+ ^+ n4 C+ x2 G" q0 v2 S# A4 m if (IsUsingItem(pItemElem)) {" o) v* p! U/ y( p0 U2 G' O
{7 j5 J# J# A) } j2 e$ S
//这个位置无法放$ V) ?( B# b$ W% b. y
nDestPos++;0 f8 l% @9 I. |
}3 z1 k6 A& T9 G7 l& ^
}
7 } N& ~! C( h W1 ^ BYTE nSrc = pInvSort->GetItemSrc(i);' u% e7 S! { Z+ b ^' m# y
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc); ^8 M) Q) h+ Y% H- f& |) \! |* @; s
if (pItemElem)
6 M9 J( r h! ^5 @- e! N {
8 B; Q) g" g& x0 l$ j1 X if (IsUsingItem(pItemElem))
$ |/ D# D+ x2 X# J5 [/ P$ E# S {* `# D) x% u, y6 [1 t
//这个道具无法移动,跳过# B; p- ^' l8 r
continue;6 `! m2 ~) M* a7 i
}
* t+ c# K6 S2 n }else{
1 r1 `# x2 m/ W* t$ K //空位置 不用动! l$ `6 }+ E- G7 [% P5 l
continue;
/ A2 T8 I4 d% F& E) {0 S6 { }
" q- F: U2 u6 K/ q- ` //////////////////////////////////////////////////////////////////////////
0 ?5 K! K( e- c! x //开始移动; }- `0 l3 {/ C! E
if (nSrc == nDestPos)* I( l# c6 R, m0 I
{3 |: x9 M6 @, V, E' m
//原地不动
, U1 G, K- O5 Z( p+ m& S. L nDestPos++;% \1 M8 u7 U% u: y- N9 @: T
continue;
9 i8 f# A9 e- r9 J4 m- D( K }& p4 }7 z3 Y2 l2 J% O- ^ G* S5 _
pInvSort->MoveItem(i,nDestPos);& w+ Z5 |4 h" E6 m
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
5 k1 f; F J9 Z) b% `7 ? Sleep(5);* O% E3 ?5 R3 n& b8 h' r: k
//Error("移动 - %d->%d",nSrc,nDestPos);
! R3 Y4 }" E& J y$ s nDestPos++;
) I b6 b3 {- C2 T# D }
7 ] ~& w$ u6 u //取第一个元素的信息) I( k+ s' D( A, H0 [3 Z/ F
/*
) M* `7 v! o3 ^" D8 G4 @/ K if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)8 ]" {9 ?4 P N9 P
{1 V. V4 E; Z2 e# ]9 y1 q6 o% j% h
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);! S: E' r/ Q! j# I, G% l" F! J
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
* t$ b" S, I# n( h( G) p }) z( w" s4 _' u- e C7 T
*/
1 H7 B0 j- X1 Y' R //////////////////////////////////////////////////////////////////////////
9 j; N' R+ S7 i& b break;8 X# G- f+ f9 I) A! J3 X1 H
}
# _& Q* V$ h6 I# }8 T9 b6 ^ }
$ m. {6 k. I0 g: x0 V}+ i$ y# I j6 C' ?) K
m_wndMenu.SetVisible(FALSE);" N7 `# ]5 M) I" g5 Y: l* H" c7 d
# D. O; @4 l" R' H, T" t
--------------------------------------------------------------------------------------------------------% Z5 k% |$ q' L2 X% j/ E8 `2 i' s& n
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)8 S5 M( i7 D7 a( l9 i* ]# b6 v
{- j6 y$ R* ^) q( [
BaseMouseCursor();
$ F/ k3 W4 B" T}
$ D- K5 A* V# s. _在其下添加:
6 s+ S: _) T% v% J8 C* Ovoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
3 P0 c9 J+ l. q{$ Q2 {8 W! O7 |6 X6 ?8 W$ h8 |/ G) h; r
m_wndMenu.DeleteAllMenu();6 ~% O0 p2 [& y \3 \7 @
m_wndMenu.CreateMenu(this);9 z. { E- ^$ Q. J, o
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
# Y: T0 E$ U! M, u2 a3 d. a, j' v c: D6 Q
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
$ N1 D# Y2 o6 n* A, ?) C/ K{
# a( c* y4 h5 T8 F5 k$ J //P以上级别才可以删除所有道具6 m, [0 F' ~- H0 p" g
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");2 ~( [# i, d( C3 Q" f% A" c6 h
}+ L+ K6 l/ O3 E3 V) W" A3 n
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
3 [; g# S& B$ w! Om_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
' N- G5 A" B J. fm_wndMenu.SetFocus();; o) _ k# i3 D) D) Z4 P
}' G* H! ]5 \3 Y9 V- I- |
------------------------------------------------------------------------------------------------------------) F7 Y j' d3 U8 `& J
*************************: Q% _/ V( \. G! k
WndField.h文件$ d5 v3 F$ [1 U: d9 C
*************************
8 \0 r, Q5 |9 G0 j5 l W搜索:BOOL m_bReport;- Y7 d1 G Z. \9 r) T: ^) B
其后添加:
: o1 f1 m6 m/ X# ~+ w5 L+ sCWndMenu m_wndMenu;" ^7 _; Z" i5 w; f; v
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);. P8 x. D* d8 n6 U: d) W
其后添加:) _- O1 F* ~( D
virtual void OnRButtonUp(UINT nFlags, CPoint point);" p8 W# E+ Q- t9 K0 q
- S/ {! M- i' _/ N( M4 v, G
+ M" f* L- c$ ]! X) ^3 h' Q6 D+ G; X |
|