|
|
源文件中_Interface文件夹下WndField.cpp文件
. d2 B, @. r( i; J/ ~- e搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )7 Y4 X7 d. J% J
) Y" T* T+ S- \
struct sItem
. ]3 C" r- P" x, }* V! W{% j: g( O$ ^( g, h+ @, o8 v
DWORD dwId;
4 V5 o, b' R1 O# hDWORD dwKind2;
3 i& J I+ O9 |/ j! o; Z1 |2 fDWORD dwItemId;6 k$ f$ R1 D: T$ O' x" B0 Y) L2 ]( \
BYTE nIndex;
+ Y2 U9 n+ Z- ~3 MsItem(){+ L9 y. {5 M/ H5 @: b
dwId = dwKind2 = dwItemId = nIndex = 0;; s/ [& T( B* z8 e$ u
}
7 G# f6 W4 i5 n# w( X9 E4 u. M& ]" vbool operator < (const sItem p2)
! B/ p# A+ E2 f{
' }8 F3 J7 \2 d% z if (dwKind2 == p2.dwKind2)
1 y, H9 v- z/ L( B# v4 t {
0 K3 x) v4 B- C0 ^ return dwItemId < p2.dwItemId;! w% `+ ^: ^/ b* j
}else{. O0 X2 o) U6 ^, F9 V2 |& K
return dwKind2 < p2.dwKind2;
, H3 ]+ Z! Y( X' _6 m, C }, T, S, s, D+ F: W* m- v3 y
}- W5 ]+ F/ A) d8 N6 V& t
};
4 S) \# F9 p+ v( ^' ~class CInventorySort
' u. K' }$ K: W# W& D4 E7 u{
5 t( c- r. G6 a8 i3 U3 Z" mpublic:2 J5 v$ z* o# Q9 Z3 `
CInventorySort() e6 S& i. {% m# J
{4 z2 n( E I( E
m_dwPos = 0;
8 H e: D$ k$ ^+ Y% |) D}
) [; S0 K. q$ {8 }~CInventorySort(){}
4 \8 ^6 w7 o* @3 t7 {private:
( w3 G2 y" L" `9 J5 VsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
# M( c. o6 b9 w3 fDWORD m_dwPos;
* Y i8 W+ {: d% `public:9 W& ]8 E# z$ [7 j, n. V# q4 `
void Add(BYTE nIndex)6 r: c$ A! F! m% Z0 l
{
& ^& o2 o0 s- A/ ~ |* M9 z8 |5 S C2 r if (m_dwPos >= MAX_INVENTORY)
, g2 x$ K, j! Q; N {1 C- L# p( W2 c3 j
return;/ \& t0 g0 N' v! e) s& o
}8 _/ _! _5 Z4 J% s# P
m_Item[m_dwPos].nIndex = nIndex;7 _# _ T$ P0 C" j0 S- c
m_Item[m_dwPos].dwId = m_dwPos;1 o, ]5 o% Z8 X9 u7 g! G
m_dwPos++;/ z$ Z. f* A9 H% y/ ]
}
5 B( t/ I! u8 x$ s, m5 OBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列: @' }2 V6 d( Y% ]# B* {
{
# V, A' f. `0 N1 |+ u* I+ A# h for (int i=0;i<MAX_INVENTORY;i++)
" b: e: C6 \3 v6 o" E {9 ]7 S: d, i9 d" h& @! l" G& V
if (m_Item.dwId == dwId)
* F0 n! p3 _) \; j+ o" c {
. N+ i _7 Z/ F return m_Item.nIndex;' [* A1 Y4 `' S, w( N7 V
}
2 Q* s* p" ~6 o% T. X }
# x% R" ~$ l' Y1 a, ~' ?- g return 255;
7 z- b+ d# K6 f/ y}- ?& t9 T+ s7 e" l2 z* h2 I
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置; D1 H! Z8 h/ s/ i# }+ k
{
6 S, a" {0 k$ x4 x BYTE nTmp = 0;2 L/ Z) U- V- c7 i! X9 X! I! x
bool bDest = false,bSrc = false;
6 T' M4 H7 ~& R7 J4 @ for (int i=0;i<MAX_INVENTORY;i++)
7 n: W& [, x# E {
5 ?6 ?8 Q5 `6 S) F4 L2 a* `% ] if (dwSrcId == m_Item.dwId)/ d* z8 Q7 j% Z0 j- A
{/ j9 I, A3 g4 D# W
//id相等 则 改变对应的dest和src
. }+ \* Y% B; X6 k3 P; H6 s nTmp = m_Item.nIndex;
2 z9 P/ ^- d f m_Item.nIndex = dest;. e/ r# X1 D7 w2 |3 q- K* I" H
}
' h Q. A' X+ @* V }$ K# ]" R. ?0 L$ z* m
//临时数据保存完毕,交换开始
* E0 m- E5 [$ S0 m for (int i=0;i<MAX_INVENTORY;i++)
+ X* [' k/ e, l: i6 C {
6 m4 u+ l: r3 S! c" T if (dest == m_Item.nIndex)
8 h3 o! |4 ~8 r3 W8 M% N+ U {
8 f6 u+ X1 k3 P& R //id相等 则 改变对应的dest和src
9 Q; A2 T& E4 L+ `8 W$ { m_Item.nIndex = nTmp; P1 B0 ?+ f& e1 f! j% L/ ^0 z
} n% Q P3 V$ L5 d" @/ b% ~$ `
}) {# ~9 H4 x) f
}
, ?* ?1 j& f* W' O1 |};
: e, b$ P8 D; E, t v. g! j-------------------------------------------------------------------------* z; N7 r2 O8 D! j
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )& O. S( L e2 g
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
5 _# G6 }2 U# R. q紧靠其上添加:
( i6 K6 Q( u3 t" T1 sif( pWndBase == &m_wndMenu )9 a, }( G( ~$ `' C# @0 f
{
3 ^$ i3 v: U9 m' b# V2 \ switch( nID ) h0 [: k2 w& C7 ^; N) f
{4 ^1 i0 C% X% i% L9 `
case 2:( J, ]3 q* v3 Y& @2 z& ?, ?
{
8 E1 K4 k% a- _ //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
! y* G2 c5 h; c if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
1 y7 Q& _/ ]4 ^0 N. b {# I% t3 c/ }% I0 _+ X9 I5 \# {6 D2 u$ B
break;
, D ^* |1 f2 z) E }
1 a/ t" S ^; I8 n for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++) S' b8 Q9 R4 z+ Y# o6 ]/ r
{
; E$ ^6 y' O( a! p- R CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);$ E9 O! G _$ _$ f2 Y1 q
if( !pItemElem )9 s/ }6 ^& v) p. \* I( }; X
continue;! e i8 u4 |$ c6 b4 k
if(pItemElem->GetExtra() > 0), k9 Y6 F/ [/ K- ~5 C
continue;
( X* t: X8 _3 c# f b S if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) t, O1 K& F2 D' g1 n& ?* X
continue;
7 Z7 U5 E- i: z6 U, o if( g_pPlayer->IsUsing( pItemElem ) )( d0 ]0 X/ Y/ N0 L1 s l* O) ?
continue;
* Q" x2 \7 }2 v/ s& v( a) h& I3 b4 [# ^ if( pItemElem->IsUndestructable() == TRUE )" K1 ~) N+ H/ h1 Q7 c2 Z* L' C
{& o+ ]4 a5 @" r" a! i+ r
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );0 \4 O. L N1 K/ a% S* @, J! J
continue;
) B; i% ]; [' c8 b. t }
6 b6 W2 k4 Y/ ` g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
% O* u, b1 ?8 P }
: t* G# j* F, S, h' e$ L6 F1 ?/ [) E break;
9 g' h4 [3 I9 }5 o% D. q }# e' `* d4 l& {+ @! W" `
case 1:9 `0 Q$ j8 H% m/ ^8 t$ K" r* e5 d4 K
{, m( m; m$ F( F2 p( ?' @
//整理背包" A9 s* D) C! y: t+ c* f
//////////////////////////////////////////////////////////////////////////0 C2 E, t" S* P- g3 y9 d
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
2 r4 s; L' G7 K; Q8 l* G; C //////////////////////////////////////////////////////////////////////////, Q4 j! t$ M7 U3 o9 c9 [3 C" W
//////////////////////////////////////////////////////////////////////////9 \6 `. }. s; H2 s) B$ a6 ]3 c
CInventorySort* pInvSort = new CInventorySort;
# n% A0 r% B. q4 I vector <sItem> vItem;9 I1 H( e" M7 R# p: ~) ^& Z
vItem.resize(MAX_INVENTORY);//初始化大小7 u( K/ E- A1 D
//////////////////////////////////////////////////////////////////////////
- `$ J0 S0 i( ? //填充数据
y- W$ N0 n8 B2 z3 V' x for (int i=0;i<MAX_INVENTORY;i++)
0 `7 q% h# G) K7 O% j, q5 S! T {) t& F+ x% A5 R, i8 u
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);: r! \9 A8 d! w( g$ I9 g
if (!pItemElem)4 Y% f0 I+ A: l8 C% M
{
! {0 Z0 C5 v* ?5 Y) U5 X vItem.dwKind2 = 0xffffffff;, N6 z" s) p" D8 L
vItem.dwItemId = 0xffffffff;
2 F$ T, c" a% q. N9 s vItem.nIndex = i;
9 \+ R/ a2 Q0 L V" d }else {
( `; @$ @4 T+ F0 J+ h( q, r ItemProp* pProp = pItemElem->GetProp();
$ S5 b/ T8 Y2 S4 G5 o1 ? vItem.dwKind2 = pProp->dwItemKind2;
+ s; D+ }% ^5 P& i8 F0 ] vItem.dwItemId = pItemElem->m_dwItemId;
W v* c. \& U0 m/ N vItem.nIndex = i;( T: t: j. z+ Q
}
+ R: d, Q) A+ | F2 h7 Z //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);3 ]. ~0 R; |. F! {# }
}' E: o x! h: ?: ~' V9 ]
//////////////////////////////////////////////////////////////////////////
) o! n; N7 w7 }- ?& o& C+ E sort(vItem.begin(),vItem.end());//排序/ F& i# U! \( {, c: }7 ~/ z
//////////////////////////////////////////////////////////////////////////
, M( p: t1 M; n; O5 i0 [ z% l! f. T //交换
; a2 I* x- [" ^, ]. P. i( V0 p1 L for (size_t i=0;i<vItem.size();i++)
8 N/ _, |$ G+ g+ ~5 ` {
9 y! G% c' Q2 B //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);; t$ e3 H* ^9 e$ q7 h( o
pInvSort->Add(vItem.nIndex);
9 s- e# |9 Z+ e }
" v* O t7 }: c BYTE nDestPos = 0;' M8 b' V5 i2 h% ~
for (int i=0;i<MAX_INVENTORY;i++)% g; _0 @4 I* v6 G5 `
{
* c2 F5 a. y. d& K5 D/ s* M$ x& b CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
9 S$ E$ A2 d' I- n if (pItemElem)
( r& D4 F& f7 E+ ]9 Z {: ^+ B0 C2 q& H) v1 `4 o" }4 G
if (IsUsingItem(pItemElem))
# n. ]5 m5 G( d/ R" B {0 b+ ~( \! Z7 b4 ~; Q, p. W( |% K
//这个位置无法放6 Y" Y m1 O: V
nDestPos++;
% i8 P U# F: f5 i% N }& E4 H8 h! K* u" P, n
}
% ]1 d, q' @7 N1 V% \- \ BYTE nSrc = pInvSort->GetItemSrc(i);! ?* g0 L' u% \( J
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);# G/ Z( _3 o, X H3 Q+ }% @! I% g
if (pItemElem)6 X9 t3 K6 ?2 j( I. k$ x
{
2 v: `# V& B: h3 }6 {. {+ |- ^ if (IsUsingItem(pItemElem))
& I8 r; N7 D( r+ K {
. B; p" n3 S/ L6 F- P* j7 A, y //这个道具无法移动,跳过- b4 w1 l. W: E2 }$ Q* X u3 ^
continue;* \, m: O2 F1 Z
}$ i5 e/ L& Y ?% z$ X3 {" |7 V
}else{
5 _4 K4 l2 f* [* t //空位置 不用动& o G1 |7 m5 d. r! \; f7 f; [" r
continue;( V2 ~: m8 {5 k# I) N; r$ B: d! A- |* S
}
! Z% M$ |4 P3 ?1 }5 O //////////////////////////////////////////////////////////////////////////
7 w" R# P2 q# x5 ? g& S3 s //开始移动# r* H" r) s/ k) u/ k+ h/ C9 h
if (nSrc == nDestPos)
" R/ M8 H2 G9 j; R( R {6 |8 Z" n% i0 G# [" z
//原地不动4 R' M! X/ t. E9 X, G- Y6 D
nDestPos++;
0 t8 ]: f* k5 b continue;
( s% ~) ?" r2 V% y' p2 {; j }
! p: V% ^7 p' b1 M q* |& `5 K pInvSort->MoveItem(i,nDestPos);
# P& V; e) C3 ?' X* T ^1 {+ w g_DPlay.SendMoveItem(0,nSrc,nDestPos); v/ M* K. X$ t( ]$ m- r
Sleep(5);
8 f) k+ T& i- ^+ q1 [ //Error("移动 - %d->%d",nSrc,nDestPos);
, Z, B) s) }" K' _, f nDestPos++;! j4 k' k3 i, V4 I1 |3 e
}5 H8 V+ _; a5 s8 g9 _' C1 T ~. z
//取第一个元素的信息% J! I# b4 h2 p6 W
/*2 {: u( q f6 R, \- {6 o z! _% I
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
- J! G, v% q3 K$ [& u$ N: g {) V/ j' q! Q: }0 s9 b
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
; @, P2 V* c" u/ S% K3 j g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
6 F1 `" Y' C! ] }
3 a0 v8 j! _, L" N5 z( N */' ^- ?8 S" j3 {8 ?% _+ M
//////////////////////////////////////////////////////////////////////////
$ h9 `( C' y* V break;; B" L, V8 T& t2 O
}
\+ F) j2 R, q& ~- h, m, ` } & C' i: ~- u6 H H- n
}
- f* F+ n( m! t( d( S% tm_wndMenu.SetVisible(FALSE);
: K+ q6 Y( M! j% t" b$ f9 k2 l
& _! W/ u5 ?: T$ s4 y& t--------------------------------------------------------------------------------------------------------
F( g% [& v: x搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point); T s3 M3 ~8 S3 f( Y. f* B' G& k. U
{
6 D/ l, I% Z3 N, CBaseMouseCursor();& Q9 o) e% N1 y& l+ x
}& ]2 @2 p! Q' O! E9 G
在其下添加:1 m4 `* X; P* Z/ l9 _3 d) s
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)* A( t' x N* f- r5 ~0 S
{
A% T2 s! Y* R; I, Om_wndMenu.DeleteAllMenu();5 c: K: f* f9 O& l
m_wndMenu.CreateMenu(this);9 {' @7 R& E) ]% z4 H& e+ X
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");8 C. K5 e1 c* \: `! c; E( ]
/ W/ N( F# J5 f4 A9 l' w
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
* C6 ~5 P$ \, q3 m{3 \. x5 t. ?5 Q. @$ w- n) u5 ?5 d4 ~3 @
//P以上级别才可以删除所有道具1 I% g. U6 w. z: U# L0 d
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");3 b- S$ {; ^+ P' m9 M5 k2 h
}
* m- d& t# F2 @. D! Mm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
$ X- V( ]" T( _9 ^6 [) rm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );! Q. J, Z6 k5 k8 o5 w
m_wndMenu.SetFocus();
3 z* ~: B- m- F4 B2 t}; j. z! l3 k. o
------------------------------------------------------------------------------------------------------------
q) ^3 K2 b% a9 {- I/ _4 ?9 L*************************
4 R+ o8 |4 U; [) U) @WndField.h文件
9 |* Y/ A9 P$ T# l*************************! J( Q9 \6 A1 A. x) t9 k
搜索:BOOL m_bReport;4 v1 y: Q; R; j& P j
其后添加:
7 `$ e0 G% H$ d+ b) z! QCWndMenu m_wndMenu;
2 _4 ^: `/ g4 _, q# M$ T0 W搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
o) d" p) X+ H其后添加:! C1 g- s. X6 Y
virtual void OnRButtonUp(UINT nFlags, CPoint point);: {( u: ^' i, `$ i' e& n
! x0 M/ K% g" q
( |! e- @; k8 E: e7 H2 C, R; P- y |
|