|
|
源文件中_Interface文件夹下WndField.cpp文件) z2 h/ g" _* Q/ I5 O
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )# f# [. ]- F3 d) c
2 l2 z1 c8 P( lstruct sItem
( ~! t1 `9 a3 B$ K6 U{$ u$ a/ @, W/ {8 x q) N* c! E
DWORD dwId;
% v+ [0 H: t! u eDWORD dwKind2;+ Z4 B/ |! r8 E; h7 i3 e4 q
DWORD dwItemId;
8 g1 r# R: [; C3 i( u M& wBYTE nIndex;0 O3 w* o* N9 j9 v
sItem(){
( `6 J2 q" a6 ?5 G3 c/ }. q" s dwId = dwKind2 = dwItemId = nIndex = 0;
) G2 y% a3 E8 z}$ |( n8 [: @3 a- p
bool operator < (const sItem p2)( o2 N* Q0 C! i! T
{
* [7 c, ~/ i: x( X# \ if (dwKind2 == p2.dwKind2)/ a/ s. r( N( J9 u1 x
{
" E! k7 t4 Z& i6 m return dwItemId < p2.dwItemId;2 z% A& ^5 C- k
}else{3 Z. V6 o" K h9 h& b7 h
return dwKind2 < p2.dwKind2;' P0 w8 D2 X0 S7 K8 Y/ f4 A& s5 D
}$ ] z( Z( d# V' Z% b/ B( _$ p# _
}9 }* D0 L# H3 f. P2 o( w8 Q
};
, l9 p9 t) N; w4 Wclass CInventorySort% x7 ]3 j( V8 h$ y( w& H" L ]
{
2 S8 H9 o4 @, qpublic:# r" \+ q% {: A8 K
CInventorySort()
& i- _4 x: ]2 c- t3 `{
) `0 D* I5 ^$ ^. ^+ ] m_dwPos = 0;3 o3 |$ Y& Z9 p& `( _8 }
}
3 Y: ?4 b% ]" G& d" \~CInventorySort(){}1 U6 O) s* Q2 v( b- U" v
private:: {/ P: R. o$ V0 h0 S
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息2 S1 V, y4 j: Q3 [
DWORD m_dwPos;" E6 |0 n/ s; v
public:# [ d7 W+ l0 S) ^7 u. }. Y2 @
void Add(BYTE nIndex)3 T& m9 C3 o p6 q$ Z
{
# o& h+ T; Q2 H& j7 ]4 T if (m_dwPos >= MAX_INVENTORY)
0 q7 \+ G/ N) U* D% @. p {
& B# i: u( ~8 O) g return;3 r2 m% ^$ v; C' b. D
}
y! d0 a* z! B$ g& j! f v m_Item[m_dwPos].nIndex = nIndex;
0 G M% \, H& v; Z7 x$ s' C m_Item[m_dwPos].dwId = m_dwPos;9 p4 Q. E- H- M0 w+ o
m_dwPos++;
$ m3 P' `' _% d! T}2 Z% T- U/ M: w/ i; h( o0 z
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
9 F$ p# a4 I3 V, _{% O, r7 k: J6 z( k1 }! o
for (int i=0;i<MAX_INVENTORY;i++)
* n( u0 L, m2 T6 z7 v {
) [# r" s! _& L* v# l! U, L0 e if (m_Item.dwId == dwId)
9 s0 P' i3 O1 J {4 p# }* {" w. J# N+ Z0 z) B+ G
return m_Item.nIndex;
! ]0 @! ? x+ i7 C& s% k }
5 w+ d& m9 }0 _9 { }! n4 Z4 N+ M/ j3 b! P3 Y
return 255;
7 u8 Y- i' ^, ~4 l" l. ]1 x}
) K' D" H2 d$ o. I! svoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
1 v" }2 I' w' ]% B% Q5 r{5 y" m H( K0 u, ~
BYTE nTmp = 0;
/ q. M4 y. H' y bool bDest = false,bSrc = false;
6 o% l/ @3 u8 j2 g3 l" i# K# Z for (int i=0;i<MAX_INVENTORY;i++), U0 ^' ?6 K1 g3 c8 A# w/ N
{& n$ U* [$ ?1 v7 m7 R9 Z
if (dwSrcId == m_Item.dwId)4 U1 I. t; E: _/ M! `% [
{
8 s, S: R* Y4 e- } d+ B //id相等 则 改变对应的dest和src
Z. |% p n' |9 s9 E nTmp = m_Item.nIndex;- P# r7 e, v+ g) s, u6 M4 g6 V
m_Item.nIndex = dest;$ W7 H4 V8 x2 [4 I3 \0 n
}0 K' H" H. z, c$ }1 C
}# H. r0 a$ Q) L
//临时数据保存完毕,交换开始- q6 n. a, ?: u5 a8 A0 G
for (int i=0;i<MAX_INVENTORY;i++)
: V: ?: f( B. U1 v {
% ?7 M9 X0 _% f% {4 i if (dest == m_Item.nIndex)
+ v) e% r& z* f {" l9 S7 z+ v! o* f
//id相等 则 改变对应的dest和src
, I0 e5 T* |# ]- k- ` e m_Item.nIndex = nTmp;
4 ~' ~# J- Q) K2 {" j, e }
1 ~ N# x" D; m* u: w6 {$ L3 e! _1 a }
( ?0 H8 N0 U, @7 c7 C/ O0 Z5 ]. e}( R2 Q" P# c7 m1 \! h$ _5 q
};
* I2 R5 J8 d) x5 Z1 Y-------------------------------------------------------------------------* I5 T2 L4 B2 k. j6 i i
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
. x1 r7 m2 G) O. I7 U* M" C搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
7 Y, q) s& G( T7 j+ k8 q8 v紧靠其上添加:
) H) f! K& j' S' h: c' W6 l/ K* pif( pWndBase == &m_wndMenu )9 A: F! K: {2 @' w$ v) R
{' n& i' x0 ]: w; u# _) @
switch( nID )
" b$ A" \4 ^" e$ n {' P8 ?, j+ O5 S$ S
case 2:1 [/ l' X, ~7 Z1 `1 T
{9 V/ n3 o0 _7 q
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
4 A+ c- v* `% L3 ]- `1 z if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
* h5 d. O( B& I- k6 ~ {
: q8 v& R2 d- e: t; J* j0 _+ @ break;
0 c" Q! l) X6 P% ^ }* Y6 T# y# @9 c
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)" v+ ^( p% w! ~: F% p0 ?
{" f0 {* W8 ?: Z# a$ r: t
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
% }$ P- Q% L4 K" L0 {5 J) ]& J if( !pItemElem )+ @2 S# R. c8 I) H* t& t
continue;( p& }' Y& `+ F
if(pItemElem->GetExtra() > 0)9 v5 K* v l! x
continue;
+ V! }$ Q! m7 ]5 _! v if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
: P. [- m& V. M4 g0 e, C continue;1 C6 m, @. ^& x% E( P5 g
if( g_pPlayer->IsUsing( pItemElem ) )
4 E+ Q) D& G# T! B* y# Q& ? continue; S; g/ }3 P/ b( R' p
if( pItemElem->IsUndestructable() == TRUE )
3 {8 W3 I0 A7 ^( ^4 a- Z; ] {1 J& u4 ?$ O8 S7 q0 ?
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
6 r& H) x$ g. Q$ p$ k9 [) N8 k7 p continue;
, l, c" `( M( c1 Z4 Z7 t# s, | }" w1 Q/ P, `! d9 S- B
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
, F/ @1 Z1 C x: f- d }! X5 D4 J' Y; M. Z8 D
break;- O! Z6 D$ ]" B, a9 P9 I" O
}
8 j$ {0 H: n6 D" a& b case 1:
( H- J3 o4 C: y) R& B$ w {: E9 c- ]* g" P
//整理背包
& l8 s" W1 \6 Y- W( C' W3 a4 W+ n //////////////////////////////////////////////////////////////////////////- \* ?/ T! L7 |6 R% L
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
0 o K8 W& N* Z, ` //////////////////////////////////////////////////////////////////////////
) k( |9 h0 G& K& l. F/ Y" F //////////////////////////////////////////////////////////////////////////
: D3 L7 f% O, i4 ~- W CInventorySort* pInvSort = new CInventorySort;7 F* }2 b% l+ h9 _' }: s: W
vector <sItem> vItem;
& L$ B) a/ V2 K, [ ~7 @ vItem.resize(MAX_INVENTORY);//初始化大小0 y( Y0 ^% y0 @, y6 k
//////////////////////////////////////////////////////////////////////////5 B- i) K x5 Q- F8 _
//填充数据
3 E: a. D3 K; M* V for (int i=0;i<MAX_INVENTORY;i++)
* C# i$ \; N7 y {
5 _0 `# k, J; C% E1 j, V CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);$ t" m, \; s0 ]8 [: G
if (!pItemElem)6 c: A9 K. ^/ h) @5 v1 R
{1 X2 Z6 O8 d5 O
vItem.dwKind2 = 0xffffffff;3 C8 f# H) x* e2 x6 w, I: n
vItem.dwItemId = 0xffffffff;
6 `7 d. s3 k- s9 P z vItem.nIndex = i;# k; v9 ~; _% D% V! K& {0 `
}else {
4 M) i$ w, l5 o9 N8 z) T6 w) v3 U. I ItemProp* pProp = pItemElem->GetProp();
! g+ f7 T/ Q4 @3 g, l8 B6 ]" J vItem.dwKind2 = pProp->dwItemKind2;
7 h2 v! M% Z% B vItem.dwItemId = pItemElem->m_dwItemId;
5 J% X8 }, m4 ^! W& l vItem.nIndex = i;" {. ], z/ l# m5 p% k$ g( F- K
}
! M1 F% m8 _1 I, |9 P //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId); l5 e5 A0 g( \4 m
}
) Q# P# ^/ X" m2 l* |3 @8 n0 X4 o2 H //////////////////////////////////////////////////////////////////////////
/ ?" m/ A2 G, @4 i; \) ] Z sort(vItem.begin(),vItem.end());//排序: j% d3 W8 Y, l% \9 l
//////////////////////////////////////////////////////////////////////////
|, ?6 g% s; I! ^" {' s% l //交换
0 M/ S* c+ w# g% H, }0 P( U3 K for (size_t i=0;i<vItem.size();i++)
- N" l4 a8 h" l( C {
; T3 j( b) Z1 g5 d* E //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
- A7 g. F8 ]8 X5 b; M6 M pInvSort->Add(vItem.nIndex);4 y4 \% i& @* R
}! G$ t8 _9 P( h: R5 T9 |( F
BYTE nDestPos = 0;9 p, [6 u& e' a2 _ S% C
for (int i=0;i<MAX_INVENTORY;i++)
5 M' S' `# N! x. J1 r9 Z' S \' r {! \# a* K; S) N7 h8 Z
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);8 X/ b8 ]% l' C& z( l/ b
if (pItemElem)
. k' Y3 N2 b9 G {$ x% m$ M8 H4 W( A A( Y- ^
if (IsUsingItem(pItemElem))
5 f4 P0 f3 r5 | {6 p {
: ~- K8 V, c) h; L# K4 E! } //这个位置无法放2 R2 D! e2 N8 `) i( z; f$ _$ p
nDestPos++;
$ H5 V0 s* B" ^% e# K6 n# F }7 L( ^6 d5 D5 I" P9 Z, v
}( h. V- c3 {0 G4 e y" f
BYTE nSrc = pInvSort->GetItemSrc(i);2 S- C6 Y% n: |
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
' a$ S9 [* b/ r$ T if (pItemElem). f5 j0 T x' |3 a( q
{
5 `" b# g& T6 V( _; `( U$ w if (IsUsingItem(pItemElem))
a/ M; \% q8 i8 l {
4 E0 ?7 @/ `5 b/ B! }! N# A //这个道具无法移动,跳过; D J( m- ?) G/ A f8 M& t
continue;
: f' r6 P' g9 P# k }' O+ W" s# | ], p3 u( d3 O% m
}else{
8 i& h% a W1 g$ E9 S! y, N //空位置 不用动
0 g( p; @7 Q4 a! s; i8 N% C* e continue;
. N' M, X: J/ M: B+ y }. Z) Z- k; r& H
//////////////////////////////////////////////////////////////////////////
$ d* h9 i% b2 P, F& J3 T //开始移动, K, Y7 [4 r' I% b
if (nSrc == nDestPos)
: H2 |. `- U8 U% A {) z( f* d; Q7 j
//原地不动
! i: }3 y/ p# M! x9 | nDestPos++;$ P8 O8 J! q3 i6 d6 j& D
continue;
" O; a% |, i0 ^0 ? }5 e$ R8 u8 W( Y0 D
pInvSort->MoveItem(i,nDestPos);
! S2 e% s" k0 U g_DPlay.SendMoveItem(0,nSrc,nDestPos);$ R% P7 d0 u4 O" J
Sleep(5);
" X+ i) @! @: O //Error("移动 - %d->%d",nSrc,nDestPos);1 D) T" g2 ]0 ~+ X# l, O5 T0 m& m; J
nDestPos++;
- I/ w/ B) O+ b' a- W2 o' k$ Q5 l }/ o8 Y4 C/ x6 Z0 Z7 @1 W
//取第一个元素的信息
+ a4 H) `9 n. y. |7 m$ _" m$ H /*
4 h9 \/ L1 R+ Q& H if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
9 m/ v n: t9 e {; M, o8 J- j: z" E4 ^) d2 ?+ T
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);0 x* s1 R* |* M6 D( F) B
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);4 _- ~: v/ G1 Y8 |" h8 r2 `! I9 `
}
5 m( M9 r" p3 k" H$ R */
- l" k3 ~9 s* j2 u' a9 V: { //////////////////////////////////////////////////////////////////////////7 M- Y3 L) A3 _$ x/ O8 g
break;
$ h% K1 ~) ?4 V& _+ q% \# j }" p9 \! H' f1 L- A
}
0 N& q% T( B( L( Y6 a}
2 Y. c0 K6 ]$ f5 U4 N" C# q4 ]6 fm_wndMenu.SetVisible(FALSE);1 x; q" h, U* j) Y, l
3 s5 ]% @! N( s4 x--------------------------------------------------------------------------------------------------------
: L8 h* u% r' a8 z搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point); K' {& J1 w' b( M! U3 L( e
{
2 U8 J; A# s1 T) @; Q9 B' UBaseMouseCursor();! Q; E1 Q* E/ m0 s e) }/ ^6 C
}
; e; {& O7 Z5 q5 b b: t在其下添加:
% U; f% B/ o b9 R i$ mvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
+ q! o! l3 s$ \" I* M2 j$ A{
# f6 e! v- ]9 Dm_wndMenu.DeleteAllMenu();9 i! t( ~( F$ o8 F
m_wndMenu.CreateMenu(this);
8 E/ C. f6 m5 S, w% l, X) qm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");9 H- q% O" c/ G$ K. d5 l
5 L" n8 H/ F: R9 G0 s8 F. c0 R7 _if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
8 b$ Q: M/ l, H+ b{
. i! N2 G# d( V$ E' l- H //P以上级别才可以删除所有道具* Z D( |2 T: }% E. H2 Z4 c
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");+ J$ j( w# }. q) S2 s' e. f
}
3 V' U5 L2 ]: T+ @+ X1 Mm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point ); `5 q5 q0 A. w0 L$ K& f+ }* E5 B" U* t
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );% o( j7 o! [5 y. G/ U
m_wndMenu.SetFocus(); A+ q1 x) D5 ]2 M3 A, [5 S' r
}. ]9 I; F( s8 I+ `/ |9 |; Q
------------------------------------------------------------------------------------------------------------
" v0 A3 U$ F4 G% J% r*************************
" r; P6 N, @7 P4 `WndField.h文件2 j, }( u6 W3 i3 M) a
*************************, s! A2 I0 u, K! j" c3 N
搜索:BOOL m_bReport;( `! R' J- |1 v+ h) x, f% x0 z: U j
其后添加:
4 V* O) a# j4 z2 CCWndMenu m_wndMenu;
9 S5 Q3 p: g2 m: S搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
m3 [7 S: G! Y" J1 j其后添加:
) ]# F5 {0 |( svirtual void OnRButtonUp(UINT nFlags, CPoint point);. H6 w! k0 Z! P7 N; H" c
# |% o7 I8 R7 V- \3 R; p+ E; S& j
- z2 \8 O6 h9 n" { |
|