|
|
源文件中_Interface文件夹下WndField.cpp文件
$ e4 w9 H: d: n, Z$ {) p5 `搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
* h& L1 s- }0 M/ C& ?0 o) j4 a0 K/ c5 G$ [, l4 _
struct sItem5 G( S! r$ n! z1 j" A% m/ r
{
, F$ Y5 n q1 r! a( M1 B; lDWORD dwId;
1 j4 A# ~; x1 D! p) q( l5 @: G" {DWORD dwKind2;/ d/ Q+ ?: k$ \8 V( O+ p; }" R& H) R
DWORD dwItemId;" }# e+ w+ Z1 P ~. j$ r$ v
BYTE nIndex;$ n% C' }0 K4 i- x" j
sItem(){9 \" @$ C5 q$ E5 L: F
dwId = dwKind2 = dwItemId = nIndex = 0;& S. \; a! f( ]/ H
}" I3 y I) U8 }( J7 P9 a( p8 \
bool operator < (const sItem p2)( V. c2 J/ v4 }, m, Y0 j
{" r! }" g. D; V5 P v+ v- A
if (dwKind2 == p2.dwKind2)
' C M6 S9 _) ~ {
/ j9 b0 h- t9 t$ j" h3 d8 w/ Z return dwItemId < p2.dwItemId;
9 X: o7 r4 z" D. Q; l6 o* _8 n }else{
" v9 X/ x: Y* R( [ return dwKind2 < p2.dwKind2;
2 k" C# e( A/ W0 @, p }. O) H/ u2 ]/ i% J4 Z
}
% ?! P; S" u& s f; W* }5 q};
9 b" P+ D4 p" X; J/ k0 C& hclass CInventorySort. P' t$ {" X5 `7 H: Z* M
{- K" g) Y; G8 m9 R: f7 U
public:
7 d, }1 Y7 D& r$ K w9 e. z& uCInventorySort()) u3 Z8 t3 z v2 s
{& n* h% g8 o0 \( n
m_dwPos = 0;, V" _6 W K/ t; Q
}
$ n7 E/ o. W/ y) L7 B~CInventorySort(){}$ F' v& X. P% M) Q. m9 v2 W2 ^
private:& G& \5 \ D" ], T, k
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
# t) f, O% _; \+ p5 i% d9 Z8 g9 gDWORD m_dwPos;
1 f+ F) x5 p! P7 S+ hpublic:
# Q" {) j- X9 [+ Pvoid Add(BYTE nIndex)
- \1 G& c- Q( _& l: \& I4 x, \8 m{
1 ^7 m5 }; K4 R3 ?6 ?% t# e: \$ }; U9 m if (m_dwPos >= MAX_INVENTORY)
3 R. j; Z& [5 r* ` {
8 m9 w2 S; Z7 q& @ return;
8 B. M8 P) x# B7 d. @6 x, ^ }
. \( c' D/ {6 y8 J8 Z& m m_Item[m_dwPos].nIndex = nIndex;
3 q# V2 N/ Y' a: s9 d m_Item[m_dwPos].dwId = m_dwPos;1 f$ J& J! V% k" o" v
m_dwPos++;
* G8 T0 f. a5 B2 ^4 d, L}
6 y- r! `; p3 g4 N6 ~# ?) CBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
' F7 U9 h/ t! i3 T{
. Y+ R, B: r6 H7 b2 Y( d for (int i=0;i<MAX_INVENTORY;i++)* j9 \# q S# Y
{ O! a4 W Y/ C3 v7 w: r
if (m_Item.dwId == dwId)" _) s j% I! k2 o( c
{
8 w1 g" l6 ^) Y( ^/ I3 F; N' {1 H. m return m_Item.nIndex;
. V' O5 ^8 f' h }
# z* C3 R1 s5 n }+ G' i$ ], U7 s0 V$ k
return 255;
! x) d3 L7 `% p2 E/ `; T& [}
# E2 Y3 J2 v4 zvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置) P8 R0 c4 o- E
{/ r3 l' q0 C! Y: N* U& n# v/ J
BYTE nTmp = 0;7 p0 K. [. ]5 V* E( m- K! a" P
bool bDest = false,bSrc = false;
; o* d. c0 S2 W' B0 a for (int i=0;i<MAX_INVENTORY;i++)
; I4 h2 Q: ? U {
' O/ l6 l4 o# l7 q if (dwSrcId == m_Item.dwId)
6 w; f1 n. |6 A6 V1 Z, Q {
$ c2 J5 \4 I; G) G //id相等 则 改变对应的dest和src
4 D# k2 Z ~+ s nTmp = m_Item.nIndex;% t9 C# D* c4 [
m_Item.nIndex = dest;3 |: z) f% K: I* t G
}
1 z& d' q3 v# u4 q. m }( \( m8 Z8 t6 X7 A! H8 y
//临时数据保存完毕,交换开始
# R* S, h& a) t, R& c1 H for (int i=0;i<MAX_INVENTORY;i++)
7 W, M! o C+ u {- l+ G4 s d3 {! p7 M/ h% _
if (dest == m_Item.nIndex)2 Y w% `9 e" a( D: d$ q
{
- |; r) s6 z5 K9 ~8 [7 x5 t$ x //id相等 则 改变对应的dest和src
: ?. W2 o3 `5 V" Y s m_Item.nIndex = nTmp;
, E& g, z4 t+ V6 k' h0 ~: ^3 F6 w }5 _9 N2 g7 X/ ?8 ]+ h2 H$ M7 o
}$ E0 s: g$ K/ i' v1 S
}
: y$ h7 m/ H! t& l5 r3 T, Z};3 T8 `7 ^) J, _
-------------------------------------------------------------------------" y/ J2 T* `, A
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
5 q. g" R ~) a7 p/ q0 o搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
7 }. }. @3 M0 Q! t: n紧靠其上添加:
2 h ^) L$ S2 Y! kif( pWndBase == &m_wndMenu )
' ^, V* v- ~6 c% A{
5 y' B5 ~" c9 H# v2 q switch( nID )& r9 q& B/ q: N
{4 z9 ?! I% L2 j* t' a
case 2:" r5 d7 q. S- R& n- s! d
{* k0 ^6 l( T$ g& @- b
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);: M8 G$ j: B; i! L* ?( Z, F+ ^
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))0 X4 R& r7 c7 b) E
{9 E `% _: p; d3 q- k, K& ?
break;+ a) ?- s3 h/ ?, U% h( D2 t5 L5 o, E
}3 m( }4 k% |2 d! ]1 ~, o6 M
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
( h$ D+ a" Q: g Z2 Z' k4 K2 n {0 y! G0 E% u9 i2 D; b
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
- ?% @& N, D# R2 \& f if( !pItemElem )0 h$ B' ]9 G* o# G
continue;
/ L5 ]* t5 ~8 N$ e$ ` if(pItemElem->GetExtra() > 0)
, i# f+ L& i- ?( u2 U continue;
- u6 `$ S- I% s( h- F if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
6 F/ i5 ], |& {1 E1 _/ I continue;
4 s0 H1 z& u) O1 y. \. E) d0 j& k6 `4 M if( g_pPlayer->IsUsing( pItemElem ) )! }+ w4 V1 v" V. A3 V# W
continue;
, |) R' e l0 p9 v2 V: L: b; k/ p5 w if( pItemElem->IsUndestructable() == TRUE ) {9 m V) u# c& |+ p. V H9 C, z& X7 W
{+ u/ B1 z. u1 }/ }: @9 O
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );8 F( J& W/ Y% i) B; c
continue;) M" @/ k7 V( c
}. B, S0 C' H9 t% l5 K) `
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
3 `: c; S! M0 C3 m0 P( I+ R$ Y }
) e4 F" m' R: U2 P; | break;
4 W9 A3 h0 C7 L i) M) Y! B* c }* g9 G/ \& S, Q# i% n7 ?" }
case 1:
; K, M$ e* `* P$ E* x+ x {3 }* N. N0 v7 N$ v
//整理背包( {: n# Z- D) p+ p# f a2 e
//////////////////////////////////////////////////////////////////////////
) [" a/ r# O/ V! s* m8 O/ P4 | //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
9 K2 n0 d+ ~" d/ L7 g$ R //////////////////////////////////////////////////////////////////////////' w$ N0 q; b7 |6 L9 o
//////////////////////////////////////////////////////////////////////////2 h* @5 }5 D$ P$ T2 j9 ` s; t
CInventorySort* pInvSort = new CInventorySort;" _( Z2 g. y. ~. F" k" J) B* m; N
vector <sItem> vItem;( h( x( D0 q/ M9 Z! M8 j
vItem.resize(MAX_INVENTORY);//初始化大小
, d7 w+ M: Y( M5 Z& i //////////////////////////////////////////////////////////////////////////
# H) B7 b7 H% B* L+ f! x //填充数据+ d- F- x' s! D; o, o
for (int i=0;i<MAX_INVENTORY;i++)/ s" k: n9 I K. C5 j
{6 z6 \) |: W/ ` L" M" A
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
. R; l' I. P* d/ \% o1 P f2 \ if (!pItemElem)
! s9 ~, \( L8 q; }7 R( Z {
/ }& D8 f* G# o9 L vItem.dwKind2 = 0xffffffff;+ Y2 C H( ?! J! C% }+ b
vItem.dwItemId = 0xffffffff;( Q# O7 ]7 h) a8 i
vItem.nIndex = i;( N+ j* d- v7 |2 z$ f
}else {
! o1 ]1 m" T: F1 Q ItemProp* pProp = pItemElem->GetProp();
) |7 ~( X( i4 b m# u+ S+ e vItem.dwKind2 = pProp->dwItemKind2;
* R3 f' Y$ B2 U vItem.dwItemId = pItemElem->m_dwItemId;
0 I# X9 b# s8 h' L9 c vItem.nIndex = i;
1 R" y4 |/ t* i. s) _ V; z }
% r2 y9 A; |: Y- e: Z0 y //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);- _% {3 Z9 \5 t# Z1 K! m
}4 p4 s4 O4 B1 F& b
//////////////////////////////////////////////////////////////////////////
! y4 D# p& x$ e sort(vItem.begin(),vItem.end());//排序
! J1 V$ q8 O( `" x6 [; v //////////////////////////////////////////////////////////////////////////
, \0 O9 b4 C+ K$ U p4 l //交换$ p( c2 w3 h. I8 t! [( g# E+ [
for (size_t i=0;i<vItem.size();i++)6 s( c: L& [% z/ O) _4 \% M( s
{
* M* f2 z1 r3 w# {) n0 D //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);! _$ Z5 C! V" g7 S
pInvSort->Add(vItem.nIndex);; P, K% |& s* h4 i
}7 L. Y/ F Y- R a' a
BYTE nDestPos = 0;+ Z& B9 V! y& e) n: C w2 I
for (int i=0;i<MAX_INVENTORY;i++)* c& \/ y& L0 ]6 B3 {6 U1 Q
{! V' ^3 e2 K6 f$ s
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
- I" C# @( P; } x if (pItemElem)
0 T4 i% R0 u9 q8 `) M {& p( O9 T5 U% o2 U& y) g* V; E
if (IsUsingItem(pItemElem))3 f4 a' D2 Q& h' v& P }
{
+ d+ m+ f: {- `" `5 h, B9 n //这个位置无法放, c- j' {. k% m7 o2 ]
nDestPos++;
' K4 J4 I% p/ A9 A% V7 a+ A8 y) p }
' D' [! E S$ b3 t$ O) I) y- X }
% f, n0 h& L( H5 v+ A6 D BYTE nSrc = pInvSort->GetItemSrc(i);; t( P) N7 \& @* I& h0 G
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
& ^3 u0 X- s+ [' H& | e if (pItemElem), V4 I2 w1 _/ X3 V: B; X) ^7 \
{
1 b. `) s- {3 D6 ~; _+ b if (IsUsingItem(pItemElem)), ~3 N \ j, |6 w( O0 v0 f; j1 x
{
. ]; `" @ g5 D0 b% e& C //这个道具无法移动,跳过
/ P) v2 U- Y+ e; c; k* T1 r continue;; m% {; B9 W1 Z8 [
}
; v# `2 d8 N: z: J0 e1 ^ }else{
- A0 i) `) a1 w1 q6 [ //空位置 不用动, w, g; C9 k4 Z D/ x! R
continue;/ M$ f5 j! v( w- q
}" L# W/ n5 \) D& q5 b
//////////////////////////////////////////////////////////////////////////6 K" W, O4 d# l5 w% Q* Y' Q3 z8 [
//开始移动- A, r \4 l: X
if (nSrc == nDestPos)
' z8 G: b. J8 `5 } {
8 G5 y- Q4 T8 M/ r' j: f' } //原地不动
2 b. |3 K) H2 D2 E9 { nDestPos++;( x- s, z- k" W. |
continue;- d1 \1 N) t( Y6 U/ t) ]. c
}
3 W; w% b% m, [9 e& F, g: T pInvSort->MoveItem(i,nDestPos);, Y w* q1 W; x6 n& y/ [
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
* ]$ K0 Y4 ?& {$ O- v Sleep(5);
& i. C# H* A; k4 [& S5 f //Error("移动 - %d->%d",nSrc,nDestPos);
( t8 w7 A8 w- D nDestPos++;( t0 I* \7 ?8 h. X7 P
}
9 g1 |5 Y/ T* K& r //取第一个元素的信息
" m0 n+ Z4 {8 D1 L5 K; |' } /* z1 R6 Z/ Q$ v' ~9 R7 ~
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
# H. c4 ?- L! ~' X0 _ {
% I+ h; S% k8 B Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
" n. j0 d1 a) E2 ^ g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);+ O6 v; ^! D* f9 O# z
}
8 X* n! @9 i/ e2 ` */2 @- V8 \) O$ D! @( A
//////////////////////////////////////////////////////////////////////////
; u! K9 k' k- T( \6 s9 `: i break;
# |8 T+ O! e3 P( i0 q }
8 J: p+ M1 a' t! H# q6 [5 W } + `: O3 W- H6 R# z0 N" H" R5 ?
}
, ?2 B8 M. l8 t6 m. ~m_wndMenu.SetVisible(FALSE);6 l( ^ d: D* e5 f
6 x1 m* b% G3 C2 f9 G5 d5 k& O) v
--------------------------------------------------------------------------------------------------------" _' b& I: g, N: b( \+ ]
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)) x2 J5 ~8 n& h7 y; f
{7 _, }7 Y$ o" ], O0 C6 Q
BaseMouseCursor();$ U0 A( D) k! u
}; a6 e$ a2 C% s/ Y5 B; _+ R8 E
在其下添加:
' h* K9 R" ?9 T: ^2 m3 dvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
& {, v' O8 t9 s$ f& c) i$ K( d{ |5 A8 n/ `2 K+ b, j6 j
m_wndMenu.DeleteAllMenu();& H+ E) L- U( T8 r
m_wndMenu.CreateMenu(this);+ P- r6 A$ P( f0 h- R. Z
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");2 n0 L; y- G! `1 ^! L \3 |8 a1 _3 f
# V# ?' e0 x6 |5 Uif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
8 z, T3 |+ B. u7 w# M; e{
, a2 c2 n2 N6 h( o8 }+ o1 v% l //P以上级别才可以删除所有道具
/ v- f3 b9 f; D; _, B0 d m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");7 F7 M3 m& h5 ], }. l. j
}
% B& f/ m, `+ Y! Xm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );' M" C+ r% q; }/ r1 O
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
9 ]) X9 x& G: W% x7 R0 Cm_wndMenu.SetFocus();
2 f$ K; F, g+ h5 y}
. R7 t+ J- D) z; P) m------------------------------------------------------------------------------------------------------------* L& \- m* b$ {0 d4 J M) d
*************************' d0 {0 q4 Z( {% [3 X$ }3 H, a
WndField.h文件
e0 u5 K# s" u) m3 E8 ~*************************/ k% R" e7 J: K3 m4 v
搜索:BOOL m_bReport;
* p' c) U5 P* v1 L @其后添加:7 a! l1 ]" {! k V1 P
CWndMenu m_wndMenu;
2 ^! \3 ]3 ]" o4 N搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
5 g) [( Q) Y2 ^3 U& U+ p其后添加:2 t( }; r7 Z0 C
virtual void OnRButtonUp(UINT nFlags, CPoint point);1 r7 u1 n: n$ {8 E9 F1 @. F
; J% V6 ]7 Q2 ~2 x( A$ p
& ^% c L B. @$ k) a1 o3 w: E! A
|
|