|
|
源文件中_Interface文件夹下WndField.cpp文件
4 c: r4 t+ p3 }# j* O# G0 G3 S2 v9 H: r! }搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )- N/ q3 G9 ?5 O2 P
% S6 z7 z8 Y$ t$ X4 ~( a# s* A' \3 u
struct sItem
; R6 Y ?% b& O+ I{' I; ~# ?1 \2 \3 O! D9 `/ D" s
DWORD dwId;8 P i' k( } h! u/ s; C. j6 Z
DWORD dwKind2;
4 i* r! h" D, ^DWORD dwItemId;$ g5 T2 f1 _7 i- F; x
BYTE nIndex;6 L3 f8 [4 w, @, z- Y8 ]
sItem(){" T) X7 W3 I# B* c
dwId = dwKind2 = dwItemId = nIndex = 0;
7 }/ a A2 n2 T3 v- } R: d2 E3 u$ o, {! d8 V}
" l' W" z4 J: r9 X: [9 J: L! vbool operator < (const sItem p2)
( J' g$ ~$ E& h( e# \{, d4 K) j7 d6 ]( d/ j6 u( e4 o
if (dwKind2 == p2.dwKind2)
' G o; l( ^" j4 i" g' V: f- m {
. Y! A0 p) `4 h7 S8 }6 I8 t return dwItemId < p2.dwItemId;
1 u% L8 W" X e) Z0 k) Q }else{
R& b. x0 j0 N$ j1 x( [ return dwKind2 < p2.dwKind2;
9 D+ Z+ }* @; Y; B }8 C+ F; [; k/ S3 a$ q
}! S& s: I( w. C7 `! t; v, i
};& v0 p) b( q1 S5 c& ? S; ~
class CInventorySort
+ N5 n+ O* g. c. v- \: F$ ^{
' s5 ?' D% y6 R2 I, }* M5 H: Apublic:
% Z. w& d! @! w) c9 SCInventorySort()6 T1 D, o/ F: O5 I0 ~1 L- n( R
{
: ]. M# h3 r/ {0 m, ^ m_dwPos = 0;0 p9 i( ~+ T+ e Y
}& f: V# T! K: i$ K# J* y
~CInventorySort(){}' G& Q. m4 Z+ h R
private:1 K6 ]8 e# A% Q E' `% Z
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息$ e! v4 R! q$ H4 P
DWORD m_dwPos;5 l; G' v$ m' _% }9 [
public:
7 A" `; |' i; H" Fvoid Add(BYTE nIndex)+ h* s+ M, S2 q8 ?2 J! f: p/ ]
{
! H. m8 T- a. B. z* P2 O0 X% g if (m_dwPos >= MAX_INVENTORY); F/ ~, D/ ]# K
{
& y) O4 X/ S( P7 a1 X return;
' I; t# S. j/ a! u! v4 a }
6 W9 p9 ^; _0 i% q; e o& N m_Item[m_dwPos].nIndex = nIndex;' R; W p) p" z* J3 q
m_Item[m_dwPos].dwId = m_dwPos;
2 u0 s( z% J& n; \; e7 ]' I2 p- C; f m_dwPos++;& i1 I z* x0 J$ s8 U/ d* A/ L& x
}3 _: V+ R/ N. ^
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
/ Y2 E+ s4 c% V2 J/ |% y# r{3 z2 l* Q& I" D# }$ F2 z
for (int i=0;i<MAX_INVENTORY;i++)$ Y- p4 b7 D# [# J! J
{: |& ^& k5 k) m
if (m_Item.dwId == dwId)& b2 p; H0 O$ A
{- J9 y+ d0 W+ h5 N4 h( E
return m_Item.nIndex;
% C9 M$ q8 o7 a' J+ b9 v }
. o; w$ D. p- H/ ? W6 o$ C! O }
" u" X- T$ b0 }, J3 u$ q return 255;
) W( b! y! Y4 E. P5 N5 J3 R}8 ^; C+ K) ^# ]5 B
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置- P' |0 z- M+ S+ p' \0 s9 Z
{
, G0 B# Y/ T9 |/ _) S: @ BYTE nTmp = 0;- ]2 V! o+ N E1 w+ |
bool bDest = false,bSrc = false;
% z4 x$ e2 ]) X9 V, k: q' G9 O. d for (int i=0;i<MAX_INVENTORY;i++)
: }, l5 X6 S6 o {; N0 H2 ^8 b! M1 ^% n0 E* |! Q
if (dwSrcId == m_Item.dwId)" g9 b. k, y' x1 T3 @% U* w8 {9 L
{/ ?& @3 h# F/ b" D0 b$ C
//id相等 则 改变对应的dest和src$ i& @: G" y# U( L: b: U
nTmp = m_Item.nIndex;( ~) p _% M) `$ r x t0 m
m_Item.nIndex = dest;* b( ?0 t$ o8 \- ]) a/ V
}
0 c- w0 Z$ u1 h- ~) N; _ }8 P) d, p: M6 }% j8 o6 `3 Q
//临时数据保存完毕,交换开始% Y0 ]- m1 s( }" _& g4 G
for (int i=0;i<MAX_INVENTORY;i++)
4 O) Z* R2 \8 ]2 J {
+ D# u- V6 B m* ?2 j if (dest == m_Item.nIndex)' ~3 U% u, ]( n- C
{
6 y$ c/ U$ Z) j4 \8 w2 G3 c //id相等 则 改变对应的dest和src
" j" u+ p9 M& T# ~& p0 N4 A m_Item.nIndex = nTmp;
3 s" f. K5 i# o2 [( J( Q# { }9 E7 Z1 K1 r# r: c7 i4 I
}' j: i; G) I$ w
}( s! ^% C& [2 r% L U
};
8 q/ J: t/ \$ X; p% A9 t1 v# y4 W-------------------------------------------------------------------------
8 _3 h1 ?% ?5 }1 v依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )* D: S& o: E2 O+ z! ?5 S% F; R
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);; Y, j% O% D& m$ A: K- k8 {( l
紧靠其上添加:
: f* X# x7 g: w b% qif( pWndBase == &m_wndMenu )' R( o: B2 {1 K1 [
{1 K: C% S3 L" e+ [" {
switch( nID )$ u% _; K$ t0 Q& Z6 G! i8 A f
{
, @) g' N# J, ]/ L: ^) O4 m/ _ case 2:
: Q6 j% C: m: ^6 D' Z {
, w6 @5 _3 x& G. ^1 f9 w9 F //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);1 E, P! _1 m6 B) F2 B" i6 n! a6 ^
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)); Z9 w) m1 @2 R4 ~1 A; f0 p) L# e5 V
{' R* | M4 S6 M I' \
break;. ~3 @7 Y/ W, N( n
}
9 c$ |9 a+ k5 J9 F+ I for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
h' W/ }! N/ I8 R/ t% N7 t( @) R2 M {
( e" \# O5 ^ I% w2 u* G( t* n5 p CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
! n: b2 ]# d L# I2 \: \ if( !pItemElem )" \! u0 Y' L6 }
continue;4 J+ y2 o6 U1 j7 J1 W. h3 q
if(pItemElem->GetExtra() > 0)
/ V3 h* j8 k7 k( z continue;
: x/ X4 z$ W0 z9 O3 I* C9 \8 d if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
! ^0 C. ^/ h& l) d9 z! S3 D% ? continue;6 S6 ~: L; x. f N- A8 s9 `
if( g_pPlayer->IsUsing( pItemElem ) )
! m- L6 E+ K6 q7 [6 s ]& ?5 q continue;
! M8 B: t3 N o( t1 D if( pItemElem->IsUndestructable() == TRUE )
% [$ c4 h% W' b: q$ y# l0 Y% Q6 R {
* ?0 P6 C3 G9 D+ g* L) Y6 W6 e g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
( {. X6 _, |- R' J8 j% ?' f# @ continue;
, T, x. f% x8 ^* e$ [ M }
( }* O0 m8 q& \6 b5 [ g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
& |: [' f) w. `; w: f3 N; }: \; B }
/ H/ J$ J3 r0 u* p- ?+ g, @* N4 d break;/ z) P( N/ v. F5 r% @8 h
}
% D& m1 y1 L, i8 `% ]! O8 _) b5 a case 1:6 |+ ~( t K* J i* q7 c0 w
{
7 G. z/ I! b' y- S //整理背包( s8 [* m" c0 h
//////////////////////////////////////////////////////////////////////////
# W! l5 |* t; L2 M //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );/ l/ Q* C O/ \9 }0 C5 z
//////////////////////////////////////////////////////////////////////////1 Q1 j8 x) e6 G, F3 Q3 Y' P
//////////////////////////////////////////////////////////////////////////
0 g) T; t' [. H CInventorySort* pInvSort = new CInventorySort;
! u$ W2 n( L( Q( @9 ]) E' H vector <sItem> vItem;7 |+ Y t' f6 O0 j+ F8 Y+ ]) s+ x
vItem.resize(MAX_INVENTORY);//初始化大小; Y$ G! t# ]0 L) e2 l
//////////////////////////////////////////////////////////////////////////$ n% g" X5 B( c }4 |
//填充数据9 L- v! Z/ _! m0 J
for (int i=0;i<MAX_INVENTORY;i++)8 @/ z( @3 n" o
{
0 I/ b# ^& I: [/ V( \/ m% }5 Y CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
5 u/ `! z, d. X if (!pItemElem)) V Z, j- I. D, g
{9 U) V# w s" W& k
vItem.dwKind2 = 0xffffffff;
- Z; {9 Y2 w1 d1 d vItem.dwItemId = 0xffffffff;9 |4 {- Y( W3 W; T
vItem.nIndex = i;9 l1 W6 T1 q' Z( @
}else {
+ z: C% Z& L( W2 a/ a ItemProp* pProp = pItemElem->GetProp();
$ N3 j" c% H* c: t7 Z) F I vItem.dwKind2 = pProp->dwItemKind2;* i2 j9 K) N. n+ d
vItem.dwItemId = pItemElem->m_dwItemId;
1 u r8 _3 b: i, r0 ~4 y R+ u vItem.nIndex = i;9 X2 g! Y9 X8 a1 k: D
}+ z7 X5 a& j/ k# s# \. F2 G$ N
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
* n; B2 @6 p- z$ c2 F4 n }
7 S* l. Z. ? \ //////////////////////////////////////////////////////////////////////////
, r' ] x' a! H sort(vItem.begin(),vItem.end());//排序' M+ Y( a) M2 O% j
/////////////////////////////////////////////////////////////////////////// W o/ Z& r6 Z- H8 P" d
//交换
" C) Q1 s5 a) Q) F2 R' v4 U' n for (size_t i=0;i<vItem.size();i++)
/ h9 G* I$ {2 e) Q; _8 D( j5 ?& M {
" E2 `3 U% `/ K- r) _4 r //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
/ x: i, |6 H; T5 ~5 x3 Z+ A: e pInvSort->Add(vItem.nIndex);
+ k. H- l9 i5 @# Y; b! l. b/ m }
) D, G" {, X5 r; B BYTE nDestPos = 0;
: a, ^6 P0 b/ \0 s2 D5 H for (int i=0;i<MAX_INVENTORY;i++)' e6 R9 C' U' k% I
{& g+ ^# X1 H B! Y0 x2 \
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);9 i ]0 E$ I$ @3 W4 |4 A" M$ m' b0 U
if (pItemElem)
7 z1 l0 o$ }1 H, q! h9 b {. z" |$ F. M; n$ f/ T8 }+ B. y
if (IsUsingItem(pItemElem))- `1 ~' T' |# T1 `' B W
{( k5 \1 ]) k { N ]
//这个位置无法放
4 y7 i- t$ \' P' F nDestPos++;
+ L7 D1 [* |% |9 c }/ U, j7 p$ D+ k; i% @: D+ T
}: x0 a6 h) a2 O
BYTE nSrc = pInvSort->GetItemSrc(i);
" F8 {0 U8 z& s+ [8 C pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);- ]3 a8 K- X. h I
if (pItemElem)
. ]0 I+ a+ Q7 B5 u3 W {4 |" w6 @0 a2 W, q; \
if (IsUsingItem(pItemElem))
* Z; ^. h. M& A {
6 j- f. U9 v$ F' K1 ^# H //这个道具无法移动,跳过
4 V% J5 F; o! \! s continue;
) j% K% c0 G. {; r }8 y% W# E9 J; d" S6 q
}else{
: q, F: w! p0 S: C- j //空位置 不用动' z" O! r% T$ ~0 Y; {0 @9 {% J
continue;. F. h$ b3 J+ ]5 x
}% b8 @! P( P4 b" }! ~# I7 O* U
//////////////////////////////////////////////////////////////////////////
9 e' d: W8 B, Z" ` //开始移动3 a) c: U! q. o5 }; l. }
if (nSrc == nDestPos)
0 K( i' w! b9 [6 N% L `' I, M- J7 N {
- Z# ^' q/ A0 q, S6 y+ \+ V //原地不动, y6 g, s0 ]9 E" T" y; C4 c6 Z, \
nDestPos++;" S6 m* s: i; g" _2 G1 O
continue;; T% \7 Y) x5 o. n7 e/ [
}
{, A# w" w( r7 }# p ?; S. a T pInvSort->MoveItem(i,nDestPos);: g5 Y5 x* u8 n; ^# J; [7 l3 P
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
) j' g5 F! {1 c3 w Sleep(5);
) h8 c- l c4 u: y% Y' ~ //Error("移动 - %d->%d",nSrc,nDestPos);& d5 x3 W% H3 m) S5 k( n# x
nDestPos++;
; e% D# G6 v! e0 i I }8 z# N/ w U: V+ N, ~$ O
//取第一个元素的信息
/ D; b2 u2 u ?1 f) k /*2 r7 Y) t& ^ _: ^. \. r+ F
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
- r6 e6 C4 @7 X l$ s# F. g {3 Z: C- x- h, M8 T
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);9 B9 C: T( `. h) a
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);& @7 S: B0 l) t( L( [* P* B
}. Q& C, x9 o! P3 \" L/ I
*/
6 u0 F& E: j2 B+ O1 E0 E3 F4 u. x //////////////////////////////////////////////////////////////////////////
! n: d4 ~2 c C6 R2 P break;
( {8 f: ?' c, S# F$ E }9 s) t& Y; e) N6 c& r
}
6 E6 |3 Q5 K5 B5 g' t}
, z5 v$ {- I8 z' z3 Zm_wndMenu.SetVisible(FALSE);8 O# ?5 j( i1 e) G
! g; q4 P; @3 J6 ]4 n7 o. n+ K- _0 |
--------------------------------------------------------------------------------------------------------2 K, y# I/ Z4 e
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
/ ? N$ k$ i1 S{
" K7 F: l4 i' k0 d& @- QBaseMouseCursor();) m" e3 h0 ~# t" t$ h% v! v8 g a
}' q {& t2 U9 z% H, g9 e
在其下添加:9 x7 B! `& r/ P" S9 F
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)1 g8 ]8 ^+ Q4 `9 T; q
{
5 s, K' ^3 Z9 K. z" wm_wndMenu.DeleteAllMenu();
0 a `1 @6 J! A2 Q3 Rm_wndMenu.CreateMenu(this);$ \, M4 `% t: t4 k4 q6 g
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");7 a! g! @' `: n" t4 r
/ ]+ o2 O2 K$ f4 W1 t+ `
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))0 f! S8 ]+ o, P d- B, K9 C
{
" m; k3 o; K( S! ]8 a( H //P以上级别才可以删除所有道具
+ E2 E! l' c* a* W5 N, x. { m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
9 c' M( Y0 o1 @}
: \- M: x) x. W$ A/ \m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );0 X0 v* Z8 b; ]+ F
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );# w; H2 n( x$ N4 Y
m_wndMenu.SetFocus();
& y" f. \' d0 E. d1 O}
& m8 ?0 T& H2 V- V$ ]% P------------------------------------------------------------------------------------------------------------: h) P6 @( y! i. Y4 b2 L) d. b
*************************
, ^7 N& D4 \2 OWndField.h文件
# V. o: @- h2 @7 u$ C4 S3 j) h6 O( e*************************
3 E: z/ [- d9 [' B9 o s搜索:BOOL m_bReport;
4 U4 A. r% l/ M$ T' ?0 T5 Y4 K其后添加:
' N4 {% r+ k$ _, ?: BCWndMenu m_wndMenu;8 _2 g8 W: {# `; r. ~
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
, a: K3 X8 Z9 e1 |( a# T其后添加:* |: V }" T! W* @+ R6 B( Y- F
virtual void OnRButtonUp(UINT nFlags, CPoint point);
9 D" K2 _+ ~4 M b, l4 s8 I, W8 v
* g2 R* N0 V' ]* F0 b% h2 F' x# U0 {9 {; }. A8 e
|
|