|
|
源文件中_Interface文件夹下WndField.cpp文件
2 n$ N: A- Z0 M7 H搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
+ ~) G/ F7 k& r3 U; h. W: B# ^% B$ x
6 |$ b$ C B% _: x6 x) nstruct sItem
3 o5 C, q# S" _{
2 X# x1 W+ Y/ L, [5 j" I" dDWORD dwId;: e# F& N" I: q7 J
DWORD dwKind2;
$ f1 b; Z2 E7 f5 `. YDWORD dwItemId;$ ~3 i* [: d m% r' j/ Q+ g7 d
BYTE nIndex;# k" { ], h) O9 M
sItem(){% u0 J/ C8 i. j3 a
dwId = dwKind2 = dwItemId = nIndex = 0;. |, C) }7 D: x3 `
}
7 t) b- u$ ~( F7 c, m% W) B! Zbool operator < (const sItem p2)
& q9 v/ H# y. T. p{
6 z+ W2 w! Y- P( O if (dwKind2 == p2.dwKind2)7 f; @5 p8 R: I, q7 B/ v! R! N
{" j2 P) j/ p9 h* w* _7 X
return dwItemId < p2.dwItemId;4 z' R4 i/ N$ v3 X# ~
}else{
7 ~6 n0 \; V( L/ h/ c return dwKind2 < p2.dwKind2;
/ J, L7 C1 D" u: F+ [# R$ H! s$ w }
) s% p) I+ k. R2 N$ W n, x3 a5 T}
0 P% P& T7 {8 ?6 S. D};3 V4 e6 U' ~0 }; C) X6 E: f
class CInventorySort
4 t0 \+ i/ G% |0 w2 U- s' e9 I/ Q; V{
3 l P" x5 @! x, o' Ppublic:% [) [# U; Q* I
CInventorySort()
' d1 r) ^5 [9 [, ?% G{: I) r X2 j6 g0 _; m0 E
m_dwPos = 0;- m# z7 g: u' W2 F
}3 I: `6 Y2 K. ?* c3 g
~CInventorySort(){}
% n) V. F) |4 e" x( x+ r& kprivate:( P. u( w7 h+ g
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
- D ~/ l. @) U* L2 p3 w mDWORD m_dwPos;
3 G$ E1 {; k- F4 K: V5 s% h: d0 Bpublic:0 ^( _! P( E( H) V+ k
void Add(BYTE nIndex)
2 E2 g- x% \ ]+ \# i{
! R# A+ y! a8 [ if (m_dwPos >= MAX_INVENTORY)+ J, `9 @ [7 F+ i4 [
{, I3 K$ W8 B0 F
return;
7 G6 p# n3 k' r& y! x }
- G0 o: A; [. L4 [ m_Item[m_dwPos].nIndex = nIndex;
s& b* k' J, F9 g m_Item[m_dwPos].dwId = m_dwPos;
8 z' X4 d7 y b, b/ z. M m_dwPos++;
* g. d1 B9 f. I; b8 P" F( Y}5 v; j3 U6 d+ }- L6 Z8 K
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列9 R! L$ K- d; r3 ^0 g
{
( \0 `, ?3 }7 L7 I6 z/ j" s" | for (int i=0;i<MAX_INVENTORY;i++)
8 X. k7 B0 Z% s {
) i/ O- B& r- N+ R; D2 h# \: K if (m_Item.dwId == dwId)' n+ B7 Q' S4 w# d4 F8 S& e
{. z# v/ V, G: d5 E+ M7 h- }
return m_Item.nIndex;
, E+ w9 _. s4 ^ }
' H6 U- z+ a" t! @; X; R' A. Q }
+ a" X4 b% ~8 F: B4 P5 C, j return 255;
3 |- Z$ F, z, l( g( [}
& }' c; ?8 a0 B; i: vvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置: W4 {% A4 R% s# j$ e
{9 b, Z% _5 p% V
BYTE nTmp = 0;9 m* [+ n% B: x Q/ d, {
bool bDest = false,bSrc = false;" @6 |% D' N% L% D8 E4 R
for (int i=0;i<MAX_INVENTORY;i++)
- M1 a& G/ D, `% h" s% k% H# k {: m: e: j }; Q% f8 v
if (dwSrcId == m_Item.dwId)
5 _# D5 d! u3 f3 c% U$ d {0 F6 q! t4 @/ r* p& t& _
//id相等 则 改变对应的dest和src$ w% a- x$ c2 X1 a% M# Y1 J
nTmp = m_Item.nIndex;
: P9 L) T# p2 W6 g1 l2 t m_Item.nIndex = dest;; E- { P# h5 Y% a: `
}
4 P. b/ _. W7 \3 l. Y# ?* K }
# B5 o5 x% T8 \: t //临时数据保存完毕,交换开始
* J) b5 ^+ `( c2 q: O' P for (int i=0;i<MAX_INVENTORY;i++)% Z: M0 g, a% \
{
L# `$ b; P# Q5 j ]6 H if (dest == m_Item.nIndex)
; c+ ?7 C& O, }/ J {
# I* z. q& }3 t8 [ //id相等 则 改变对应的dest和src F( S$ g. Z4 J1 F$ \& c
m_Item.nIndex = nTmp;
/ @2 \& {% q5 Z4 t) Q2 `7 W6 ?2 r }; I, _, d" \+ W/ }) V
}
2 H' |9 a4 U4 M}
- D$ j: [( @( R: Z, R};: m/ c3 y6 T2 g0 o! a
-------------------------------------------------------------------------; ^2 Y1 M* d1 K5 ]
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
! k) z$ k- C; Y' L& H4 c搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);' B5 G2 P; _2 V; B3 E
紧靠其上添加:
4 l% t0 p! |7 i+ ]# j2 n* Gif( pWndBase == &m_wndMenu )
Z8 E1 o1 C9 j( ~0 K7 W/ Y ?{
$ s; q) f& @* l! F switch( nID )
: y4 B. E8 v& P* T: K {' _' D3 g1 r' ^) H, Q9 k1 x
case 2:! q% ^& [& w1 o% s" M( ~
{
7 x+ e/ _$ ^) q# f //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);2 e9 [& l2 ^& L8 S- C) u- e/ l. N
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))4 }! v x% c, ^( i+ Q+ @2 h
{
`8 W$ H; \0 z) |) V. t break;2 o& ?; u6 B) x6 Z/ x
}
' R. ^3 N( |- y5 J7 R for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)4 g8 L' c6 }% P/ t% U$ K( \. U- ]4 W+ S
{& A* S8 @( I0 M! C+ {1 v
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
% U( x% A% @2 x5 ?2 _ if( !pItemElem )
8 O8 H: ]1 C6 k4 I S continue;0 D% Z- j7 B2 Q6 T6 d. ~
if(pItemElem->GetExtra() > 0)$ o0 R- G# T- A+ M# Y1 j! z
continue;! a L7 q9 C- W2 @! s2 N" m+ \
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 2 c5 A7 \8 i0 N9 o# J/ a/ q3 C
continue;6 Y/ C& T' ^; p% O
if( g_pPlayer->IsUsing( pItemElem ) )
5 D4 a" J N! P5 B; w4 F G continue;
. u+ p# |5 f w3 B if( pItemElem->IsUndestructable() == TRUE )2 W8 h) {" E/ d S! d* {2 c/ R
{
3 e5 h7 _' f3 L$ w' A# ^) R8 U+ b g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );" v7 J7 x3 B) j; R4 @( M
continue;
- D! e& V' l' b6 H. k) V }
; w- ^5 s9 A3 [ g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);8 [0 x, I! T1 c7 a4 R# M& T/ l+ P- L
}; b0 r% t% ?0 k
break;/ q, {0 A/ F& S; c
}% u' K3 [# ]$ Q* D) C1 ]
case 1:
1 n. s9 a7 g/ c! w ^: Z4 b {
& K& H3 j& n' y2 t. }& ^) U //整理背包
; k# H- I: v! m8 n8 ?, E S //////////////////////////////////////////////////////////////////////////
7 J, u3 T9 x" i9 j //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
6 K- f0 E* ^5 \* D' @5 E3 J3 ` //////////////////////////////////////////////////////////////////////////* U/ N0 L8 U7 Z0 D; ~5 N) j
//////////////////////////////////////////////////////////////////////////
]+ e" k; S3 s$ _8 H1 d/ z: t) h3 b CInventorySort* pInvSort = new CInventorySort;5 \& G5 l( U* J
vector <sItem> vItem;
0 G3 t" P& q4 X6 L vItem.resize(MAX_INVENTORY);//初始化大小
& z9 x8 c* Y1 _& h+ X: x //////////////////////////////////////////////////////////////////////////
" y0 U: W: L6 V //填充数据
. ^: Z2 [7 c$ A4 w6 K _( w% {) W* B for (int i=0;i<MAX_INVENTORY;i++)
! u/ p2 x2 J4 |$ `2 u s3 B {
3 G! w% @9 h8 U' d5 R# w CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);/ Y$ d; s; d# _ a. {
if (!pItemElem)
t) Y8 E3 c+ p1 `& ^. s {
) m; L7 s1 E( [( ~! b. o vItem.dwKind2 = 0xffffffff;
" d; o( e! b6 k+ v. q9 N vItem.dwItemId = 0xffffffff;
% A1 c! D: U O% N vItem.nIndex = i;$ h! i& i0 D/ X) h$ |) q+ y
}else {
8 \, H- f. S7 J ItemProp* pProp = pItemElem->GetProp();
: O: j# V8 d. q) o5 S vItem.dwKind2 = pProp->dwItemKind2;( @5 }6 O& e; f( H( w( V
vItem.dwItemId = pItemElem->m_dwItemId;0 x4 P+ j6 q& Q9 D' E: ]
vItem.nIndex = i;
9 x1 w- j7 h. F, h" E }
( G+ ]) B4 B! x9 l9 C //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);! K$ Z; Q9 @3 n; K3 f3 o! t
}
2 m1 _6 W- [/ ~+ [/ H6 k: h //////////////////////////////////////////////////////////////////////////
! p' _3 T/ h5 w- {1 Y/ C9 r8 ` sort(vItem.begin(),vItem.end());//排序0 N# e) | n$ a- Z" x' O
//////////////////////////////////////////////////////////////////////////* H4 H8 ?+ U* b8 o; c
//交换
" ^# o5 X/ q! t4 I for (size_t i=0;i<vItem.size();i++)
5 @. |6 u) b) t K' c$ g6 M {
+ h. ^7 ~! y z) i% R! n6 T //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);4 X8 U" _3 h5 t8 v9 `* I8 s4 W& p
pInvSort->Add(vItem.nIndex);# |1 \2 a( n/ b" b5 y* h* E
}/ }$ i- U5 k) M$ i" Y0 {/ ?
BYTE nDestPos = 0;
4 k5 z# v' A. o for (int i=0;i<MAX_INVENTORY;i++): ]$ n% L: h6 j( ]
{% H( L! Q( _9 w; N# d
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
5 m: S& _' V! m( n6 d1 g/ S8 i Z if (pItemElem)- F: T: a% A9 I
{/ ]- [2 d8 o+ Q2 ^7 c+ O% `
if (IsUsingItem(pItemElem))
m2 i4 C/ W* r2 S5 m: F {1 K2 }. Q7 s# m9 R* R/ M
//这个位置无法放5 g" v$ H& g' a; U
nDestPos++;
+ H+ u! G/ Y, T3 e6 M0 w. Z: U }0 K* k4 _$ w R
}
4 y( t) w% @1 T3 j3 [0 @# s BYTE nSrc = pInvSort->GetItemSrc(i);
7 G4 }8 t6 c% ? pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);7 C3 W0 I0 t l# M- o7 u/ h
if (pItemElem)6 U$ x7 P+ W) ~) n7 f) H7 B
{# A& Q! |0 b- y( ~% D
if (IsUsingItem(pItemElem))
t; b7 x0 K; @$ v6 j; L {
( U. Q$ y" D7 {. C% f //这个道具无法移动,跳过
8 k$ J: e' J/ N" }4 H continue;; I; ?. o+ i, O/ c2 g
}
- m+ Q5 n# a$ d! L4 A }else{7 P7 D; B4 C+ z
//空位置 不用动
) M+ G+ D6 M3 }) R5 [4 T: R continue;
' n8 a+ D+ L& J3 x* c: n ?1 h }
( [+ D2 ?) m4 p //////////////////////////////////////////////////////////////////////////0 h( n0 O: q- Q+ K) ]( e0 F
//开始移动
. _: s( o8 A1 C2 A" m& b if (nSrc == nDestPos)
+ l# Z: ^9 d+ q$ t) m {
/ N1 r) ]6 G u" T; @5 M4 ` //原地不动5 D2 q( n v' M2 A* S
nDestPos++;# R8 c& E+ ?4 }
continue;
* V9 O( R- \; Z& W0 e7 k, ` }! z, l& d' @8 b8 e& _+ I0 L, B; J
pInvSort->MoveItem(i,nDestPos);
# w( `* l6 A) P7 c. O% W g_DPlay.SendMoveItem(0,nSrc,nDestPos);
; X' `, n3 c! A: C Sleep(5);* ^% S5 H1 r2 O k& T L7 M
//Error("移动 - %d->%d",nSrc,nDestPos);
2 s. m1 Y) W+ b nDestPos++;
1 {; i5 r# H" r |: {4 N }
9 I3 a8 g, F5 K. M //取第一个元素的信息
/ e0 ?) N# l" v8 P5 x* I4 { /*3 M6 i4 N) R: K6 p. l0 ?( {
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)$ o e9 x4 a& u1 B& Z
{
q% M+ A) e; u7 @! l Error("Move - From:%d,To:%d",vItem[0].nIndex,x);& Y& v; a: P' s8 U! g. m# ^
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
1 y4 p9 Z2 C1 B6 f& { }
( n+ c7 u# U5 {5 ~% Z) b* r */
8 u8 b4 w, \- B! u% m# H //////////////////////////////////////////////////////////////////////////
# G2 m& M, G3 Q, H9 x break;* t4 k5 f5 L6 ]; U6 r& F
}. a! T( w l/ t! ^( w- y
}
/ A1 t: Q& d) w: z}
& Y. J$ ~) X$ Q! Z0 X7 g! Gm_wndMenu.SetVisible(FALSE);
$ M T6 d- n" i) g& [# ^: M# n0 I; ?: J6 b; y& u
--------------------------------------------------------------------------------------------------------& e2 |6 a( y6 q& i8 f
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
8 Z" U8 }) r* x1 v% R# g* r% ?{
1 Z! n, g* Y( T: u J5 @; @BaseMouseCursor();
3 e* d0 }9 l# W* Y* ?}5 p' G. w& [5 ]+ A1 V# e1 V
在其下添加:
- t% j+ ]" J3 M4 W% Nvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)6 l2 h' H' H V; C% T
{& K- v7 g) Q$ B3 C; U. _
m_wndMenu.DeleteAllMenu();
- O0 o3 E' N5 G/ w+ O+ p* T: r4 Hm_wndMenu.CreateMenu(this);! \: h$ b0 p# K
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");/ e! N$ }- M6 \- m% E/ A I$ j0 b
+ ~5 }! `) W3 D5 Q/ R' T3 _- [; B
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))9 z% B; b8 i# ?: y8 L
{2 H/ A# P! a5 }) i
//P以上级别才可以删除所有道具
* E/ L" A5 v2 q8 x$ g1 Q" F m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
5 c! Y: a' I3 b% \}$ q6 A2 l; r7 _" I* \. w) g5 i" f
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
7 C7 J( |+ r! q5 H; F. Fm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );- A% A5 @8 A' i) m" Z+ H$ f
m_wndMenu.SetFocus();3 u$ ^. J; l, [" V$ k5 C
}
" h: Z9 z+ [4 E# G1 }2 C7 g7 B------------------------------------------------------------------------------------------------------------
9 z' c# D8 v/ U5 E1 V6 G7 h! A# j3 _*************************$ Z5 L n/ O- ?% i
WndField.h文件5 |6 K% D$ p& `3 E
************************** l+ g: B, ~; c
搜索:BOOL m_bReport;0 W* l+ \& _ Q6 B5 f# E0 P
其后添加:% z) I% ]* [3 m3 v% p. G8 z
CWndMenu m_wndMenu;; g) Z1 Q& N. D* y& |
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
& b8 i* G& u1 M [) W( {其后添加:' n( |0 e$ A y
virtual void OnRButtonUp(UINT nFlags, CPoint point);) K( N: w/ ?, ]3 U
2 [6 K+ T% g/ N7 a+ W6 f. U2 E. E- q7 c' M
|
|