|
|
源文件中_Interface文件夹下WndField.cpp文件4 I& [, B% K" Q$ x3 p$ g- G( y
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )% c8 M8 D/ A! \2 t) e3 N
% B4 X+ b6 Z: hstruct sItem
2 I8 ^" b l& _' m1 q{
( k2 n6 [5 ^( k$ h2 k' N. eDWORD dwId;
/ C) z5 M( M! i8 F2 \, pDWORD dwKind2; h+ K& o) |: n' V# s6 L
DWORD dwItemId;
' z) U+ O4 X. h7 o6 u- ?BYTE nIndex;* m6 @5 H* J& f8 x1 G
sItem(){
' a6 X. ^* I* b n: E; u dwId = dwKind2 = dwItemId = nIndex = 0;( ^ F K" F, P3 Z
}
4 |# ?1 p2 F7 ]* z! X: t- Cbool operator < (const sItem p2)7 x' l: D& ?* g) o8 S
{& l# a: ~6 j; k; U" X8 [7 P. E" D
if (dwKind2 == p2.dwKind2) {9 y: u) F0 }% H% n- r
{ T; ]& O& N( D0 ]6 A2 _7 \
return dwItemId < p2.dwItemId;6 L- L4 L' F) X+ p) ^! |
}else{" K* ^% @! j5 c, R
return dwKind2 < p2.dwKind2;- f- q3 X* h( O8 E6 p
}/ S4 r9 X* Q: z2 ^( _$ ?6 \
}
4 u' v! D9 ?& }4 l4 y' o};
( u( q: K& N3 j D( lclass CInventorySort, [+ Z, H- [; u# f2 ?' f
{
& F* e( H! R$ d# P* A5 epublic:8 h) u2 p- O8 \
CInventorySort()
4 k$ w8 f$ ?3 j{: s) b0 t+ z- X: i( w& p- b0 Q% m& K
m_dwPos = 0;
( @' k( I- `* z5 w, U}
^, r7 Y$ ]$ a* E0 D: O; F. \' a~CInventorySort(){}
: n* X; j. _+ R: t0 N; Aprivate:
/ `$ ^5 Y m# D: m; t2 FsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
6 d2 k/ \' v# R# D! G, [* ?DWORD m_dwPos;
^# b k3 S6 R/ zpublic:
, u; k" V. ?" e5 [) Svoid Add(BYTE nIndex). t5 M: Y. s* E) @# z
{. K) ^! T- y0 h: {
if (m_dwPos >= MAX_INVENTORY)
# T4 J, f b* K. i' Z( G6 ?( @5 ~ {
+ y M4 ^/ ?* M# |* Q. C. U/ ~. x return;
0 }, M5 }1 f, [! m }
( _' Q( @& [- U1 @9 R& B' S' V m_Item[m_dwPos].nIndex = nIndex;
; `5 a6 e4 n; c1 ?+ \* D7 X, a m_Item[m_dwPos].dwId = m_dwPos;
8 C2 X; D% W( r m_dwPos++;
# h7 l6 m: f4 O( s8 j$ w}$ v" g+ X8 R/ G) c9 ?) s# W: |/ X/ S% }
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列" \$ m- |9 M1 H; e3 V& r
{8 b& y/ o& z, T" f' C
for (int i=0;i<MAX_INVENTORY;i++)
) \6 n q. i- y u6 c {
7 W, v4 H$ o7 p: I+ e& c. c3 ~ if (m_Item.dwId == dwId)/ m; i. u1 z1 Y! b$ @
{0 I& g7 _! z9 j
return m_Item.nIndex;
( @: q C9 q( I7 w! M }
5 G" e. e( o- M: j0 ? } |4 f# m$ _) o5 K; t
return 255;
' p3 Q0 S P+ }}8 r; |4 D) r" B
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置7 W9 K, x5 U# O) x) s8 N. b& ]( `1 D
{0 u# {# \: M+ ]$ X! w
BYTE nTmp = 0;
9 O' l9 T/ `$ Z0 h' v9 A+ ?( C) | bool bDest = false,bSrc = false;
5 ^# W% B, F- E/ I2 H1 o$ r for (int i=0;i<MAX_INVENTORY;i++)
! s; k# @ w7 o# W# x( L {% j- D+ l) o! D- ?
if (dwSrcId == m_Item.dwId)
$ k/ o _7 K4 d7 o4 i+ [* W+ g {; U7 W% U* Z; }3 B
//id相等 则 改变对应的dest和src& U3 z5 R1 \" W+ t
nTmp = m_Item.nIndex;9 X2 F* t' V: N: [' ?! p
m_Item.nIndex = dest;/ P! U* w* F! E" m: m
}
1 f( v$ g2 l& B$ r5 [1 @ }0 z; s5 X6 h3 T6 r" i& j
//临时数据保存完毕,交换开始& u7 {, z* u: L* U) f- R. s$ {. {" N
for (int i=0;i<MAX_INVENTORY;i++)1 F W: X" N6 U! p
{; ]. ]7 x% W6 o5 u. v2 |
if (dest == m_Item.nIndex)1 v0 c4 W- @! V- v/ c
{# J1 n6 A v5 Y/ W6 A
//id相等 则 改变对应的dest和src
& ^, ]2 f# r1 ? m_Item.nIndex = nTmp;% n) [, }0 g* x W" u6 y( p2 \
}
. {5 g* y6 ~8 i3 I0 b. w6 J, u }
& v; ~$ k* x6 D* R}
8 d9 W% F+ R3 Z* R* C5 |};
D# y7 w% a/ k {! }4 s# M-------------------------------------------------------------------------
4 K5 ^1 L3 B& H0 \' v9 h8 e依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
0 L' @3 P9 u7 m9 P9 D; f搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);$ s, u8 _1 s, ]1 P
紧靠其上添加:8 K k9 f$ h- ]. ^, |; C( [
if( pWndBase == &m_wndMenu )
7 b6 i( n; I. _$ ^{
X0 `4 w7 E3 j switch( nID )
& P0 i p9 ~+ u {# A/ P9 ^7 M9 n7 q
case 2:
; m, | p; f, `+ J" K1 K* ]1 O4 C; K {% B9 K8 L2 C1 z0 p6 o. ]. G
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
( P/ |4 B# a4 a2 s- a if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
9 c% r" S3 Q- j0 S2 x: Y, @$ L {6 E6 w* S6 K# C; P3 x4 ^$ ?
break;" T" Z, q% x8 h; {$ h' z9 L/ l
}
/ R# K* {( e$ D: a6 d7 |% y5 y for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++). o3 K8 r; L5 H0 L. N$ x
{
% s; T& _: \9 v: y CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
8 A) a5 u& u9 u H4 V0 z2 H! C* f if( !pItemElem )/ J3 g3 C1 `! j! r" Q
continue;5 w# r+ Y. R5 ]! @
if(pItemElem->GetExtra() > 0)- w+ S1 F- d( _% o6 T7 `
continue;
6 n1 h1 H' v# ~# a# o if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 2 |8 {- @1 l$ f! {1 K% s
continue;
4 _7 c S; C& |1 i5 [ if( g_pPlayer->IsUsing( pItemElem ) )
$ Z: L( a" L$ x$ p) Y3 M continue;
! }' z7 ]8 J, q" b if( pItemElem->IsUndestructable() == TRUE ). j+ C1 J! R4 _
{
6 \6 {5 E* r- d" V0 H; U8 ~0 c, l g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );+ ]( g. z& U7 B- ]# F3 r; x2 Z
continue;
0 d- k0 v) b- U/ A# p7 S }1 L* l: e4 ~4 C, }
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);$ {2 i, S6 l ~) E, U, U& `$ k
}
; T/ ]& S3 Q0 C2 \" r9 U/ H" d+ {1 X break;
* y2 [- Y3 f& z" \5 A% m }
& x0 j" K) B" \0 t8 I* |2 v! c case 1:
$ S& _6 i. u( W4 _* j+ Q- m {
* u" W0 M+ M8 ]6 f //整理背包2 Y8 c( i2 @# E+ `+ O! f
//////////////////////////////////////////////////////////////////////////9 N5 K7 P# G- O; }; ?7 i
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );8 P; {' r$ M* N' }
//////////////////////////////////////////////////////////////////////////
- j7 f, Y; k; g+ Z //////////////////////////////////////////////////////////////////////////
' n7 n& c) A6 T CInventorySort* pInvSort = new CInventorySort;
5 {# H2 g `; ~& h vector <sItem> vItem;
9 X" P% N3 v6 I4 h" h vItem.resize(MAX_INVENTORY);//初始化大小
1 J( X5 O4 `: i q //////////////////////////////////////////////////////////////////////////
, @4 I! @- d! p: Q //填充数据/ h# R2 d+ S0 d1 N1 `; ~; `
for (int i=0;i<MAX_INVENTORY;i++)% M5 \/ }$ D+ k0 ?) J- U8 U
{
/ M' d6 w. q& E. u' O CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
T3 l3 f8 \7 n1 }+ ^" ] if (!pItemElem)
4 q1 }: v9 Q6 c5 Q+ t {$ ^, q. _4 b% r0 W; ~
vItem.dwKind2 = 0xffffffff;
$ c0 Y( k0 v0 Q& F: Z/ ^% { vItem.dwItemId = 0xffffffff;
& W: G w) @/ W9 x vItem.nIndex = i;
# m" y$ u6 a1 [+ r$ Q7 M }else {
; G; s: j2 L4 O, @* O7 f ItemProp* pProp = pItemElem->GetProp();) [0 p5 i) L& l. @# `1 m- \5 M0 o; I
vItem.dwKind2 = pProp->dwItemKind2;* f& y2 O) J0 ]# i0 Y; m' J
vItem.dwItemId = pItemElem->m_dwItemId;
1 W* d7 [* z8 J vItem.nIndex = i;0 g3 Z6 x1 |, t. L! R, k: e2 T3 n
}
1 H# l, W: x# p7 H1 Q7 N //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
1 `6 I& I* C7 G' w# ~8 |) L }+ K+ K2 P! o. F0 T# {
//////////////////////////////////////////////////////////////////////////: l, O9 V2 ^ ]' ~
sort(vItem.begin(),vItem.end());//排序: ?. O& v! z7 u) v
//////////////////////////////////////////////////////////////////////////
5 x+ u! U. f; \- A //交换
0 \' `! n! \+ Z5 d% M% H2 F: `5 J for (size_t i=0;i<vItem.size();i++)7 O+ Q- i' p- E5 q3 x* G
{
! p- K: F* t+ x //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
; s2 t* ?$ T; T1 e- } pInvSort->Add(vItem.nIndex);2 w; X t# z: c8 s- _
}# h" t" ], i- j$ c- P
BYTE nDestPos = 0;; Z0 Q. D" o, L* p, m9 E8 B+ m6 u: z
for (int i=0;i<MAX_INVENTORY;i++)
+ e) w) Z6 M' R4 y7 [* I {7 ~8 a, _7 J# Z, a
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);& ~+ K0 G; `# A, G5 i
if (pItemElem)
+ p& r- D8 }1 S. Q `! z {
9 L+ Q ~/ U* I) _& s- A if (IsUsingItem(pItemElem))* A1 x3 d: ?7 N+ C3 l
{$ B9 j, k+ A: {% [. c: y& `
//这个位置无法放 H" a$ F! J4 c" V
nDestPos++;8 i q; H, l5 w8 i( @# s* @
}6 s6 \+ g+ }# x( u" C9 j% p5 a
}) h d+ f' a3 r3 Z9 y. n5 A4 \
BYTE nSrc = pInvSort->GetItemSrc(i);
- t2 R3 ^) x6 E" s pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
3 H; i/ C9 D3 g# m" H if (pItemElem)8 Z: n7 ^% U) Y
{, Y" S) J5 G" Y+ N& X* j
if (IsUsingItem(pItemElem))! { @! d, j4 f$ b+ s
{5 v) C7 z- Y" l3 l# \
//这个道具无法移动,跳过
U: U" o y% j; a! f continue;
3 }( C8 O2 l2 m* i: ^* Z6 Q }1 J/ o0 @7 M& E. S1 ]( {
}else{. {! d/ q5 P- n- {8 W
//空位置 不用动7 w8 \8 W6 O0 H! f, C; A
continue;
|( @/ M+ j# D }
. w$ e o3 N: Y! {3 z //////////////////////////////////////////////////////////////////////////: ]1 l& q/ t; o/ x; W# {
//开始移动
& k/ f/ d- J& t3 A, ?% F" k* e if (nSrc == nDestPos) V( b0 o3 q9 }8 j/ m# u
{: R+ |; C- \( i" U7 p
//原地不动0 Z- D W9 L4 d
nDestPos++;2 M0 }( B- V- }3 o) {7 Y' t( O8 ~
continue;
5 l8 S0 n! D1 }# d; I8 R }# @. H4 X0 X K
pInvSort->MoveItem(i,nDestPos);
8 n9 w) I- c( A% d! F7 l7 a g_DPlay.SendMoveItem(0,nSrc,nDestPos);4 C+ c& }: L9 _* H8 d9 ^2 J
Sleep(5);% r6 G; E5 J5 x; D1 Q' w% O( o6 f
//Error("移动 - %d->%d",nSrc,nDestPos);
: ^+ T1 K0 l7 |. O! l nDestPos++;
* Q! l" I# P4 K1 M }
+ {3 W9 S! z9 f- T. ?) ~ //取第一个元素的信息
' r6 o, y) ~, }$ D, h* |% ] j /*; }+ l/ x; n2 A4 I: Z5 a
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)/ L' H9 v: J) b+ d d
{$ i; s+ r; m$ k. t7 U* j! W/ o
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);# Z8 l( A& b7 w9 N/ I- t
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
$ q' Y5 z8 [6 w2 C( P }- u$ A! ?0 g; J0 E* E$ z) M% k
*/
+ S, ~$ b y7 T1 p. S //////////////////////////////////////////////////////////////////////////% n3 l' w' ~9 O- W) e3 V# o
break;
" |9 C3 n4 O# `) J7 t8 q) R }
8 ], a& S& t$ V# q: X: k4 K } * T2 d3 \; H+ Z$ b7 _# `
}
3 [' V3 V* q3 v: M( L5 v2 Im_wndMenu.SetVisible(FALSE);1 E5 [3 z+ ?7 ~3 o. b& p' ?
$ s4 @% @, L: n
--------------------------------------------------------------------------------------------------------% q- d! S9 @4 C
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
7 M5 L: c/ y% n{# q& m2 n6 F. O+ p
BaseMouseCursor();+ b8 r, U+ u5 D. W m& r
}
2 C7 u3 Y+ \9 O3 S$ u! {在其下添加:
4 ]/ N8 C& U. S5 wvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
& I7 W8 p+ D6 v% Z- Q( G{
: m1 _0 M) K( ~, f/ q; ^m_wndMenu.DeleteAllMenu();
1 b9 {8 |8 e6 p$ ?) }6 v. ^+ dm_wndMenu.CreateMenu(this);1 J8 a$ N* i+ D; _; \& ]1 Z
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");. x z" o: P% V$ @* }
; d6 ~3 R+ ]) W9 b; I% `2 S4 Y
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))1 d, ?" q* o9 Z8 L. g
{
- C+ \. f- F/ z/ b2 q1 j //P以上级别才可以删除所有道具
- _$ d E, D7 L5 I m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
6 t: g+ ]" H. s: y}3 J3 C) j1 d3 k$ q9 q" k/ A
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
0 G; Y3 c1 s& L: ^ b" C! x% i( c/ k lm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );0 l- W7 H; d! h! B
m_wndMenu.SetFocus();
; D% G; S, o, Z' l( r; M' ?' {4 V& ^}6 Y3 F/ O. U) M+ i( Z7 [# ~
------------------------------------------------------------------------------------------------------------, `8 L$ A$ I x
*************************
1 \( @! H7 T" IWndField.h文件
7 t# ]$ F4 Q8 c4 N*************************$ n8 u P$ e2 n
搜索:BOOL m_bReport;
* h5 G# \4 ~! w) X; P; Q5 g其后添加:
3 w- E- z" p8 ^8 xCWndMenu m_wndMenu;
0 C; l9 f; e6 ]6 m4 r搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);8 a; u7 U/ Q$ P5 j) G3 Z. u
其后添加:
4 ?6 L" S8 y" O" Zvirtual void OnRButtonUp(UINT nFlags, CPoint point);
1 f% }* B: Z& h w% v* I# _* o+ b6 l% [
( m* \( p9 j3 R; u) t( Q
|
|