|
|
源文件中_Interface文件夹下WndField.cpp文件
8 U- H1 g1 ~' q搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )! T3 `# C( r" }8 e
8 `! N L+ K$ [0 ]5 H8 f& kstruct sItem% E9 @. {* X6 J; l2 C
{4 p% D0 \. t- p; w
DWORD dwId;5 \; [" \! ?& Q3 \) u& d2 G* R
DWORD dwKind2;2 E( a1 I2 t3 Q! [( G
DWORD dwItemId;
, x: o5 b- X4 TBYTE nIndex;5 ?: R* q# J+ ]( B
sItem(){9 u0 b: s, ] C' `% [
dwId = dwKind2 = dwItemId = nIndex = 0;" g- N2 q( a. r7 ?7 v7 S6 ~1 M M
}
- L7 u% @8 I0 \% w& }bool operator < (const sItem p2)
6 V7 e: @* Z# l# H% k) B' s/ `{
. H5 I; G6 \+ ~; C5 ]* v0 t t/ U7 L if (dwKind2 == p2.dwKind2)) W8 `$ f, l3 T7 F$ E/ {" \. L
{
# n8 M# y1 A' |4 p return dwItemId < p2.dwItemId;
- r2 W# R$ ~1 t3 D3 t9 n9 M. Y }else{
) a* L$ b/ T( |2 }; b7 | return dwKind2 < p2.dwKind2;8 ]9 q/ @3 G" ?' Y6 B2 s) f! s' Q" F# \
}
) J M' X1 F8 E" z}; H+ ~2 o& I; U0 k# q
}; f/ i. N1 j+ u2 {. o: |
class CInventorySort
* I9 S( ^: }; S7 q/ {{
. q; a- [; k% f( k3 a; ypublic:
) A# @& ?! G6 J% ]# zCInventorySort()
; r. Y$ D$ N% o8 v0 s/ W{
! T" r5 x0 ]- v+ p7 G& Q0 |1 o; P m_dwPos = 0;+ m0 _. T& |, Q: z8 n
}/ J' [% k9 Y7 d, L4 c
~CInventorySort(){}
* w" A; t" _, P; d. Vprivate:
8 S* {% Y+ B3 F, J4 C2 n% A0 q* vsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
4 {7 v4 t$ {7 Y: l0 N7 d, gDWORD m_dwPos;. I; @. C) M* }
public:% t: B1 ~: I. j: D6 D: @; ?3 B: b# x
void Add(BYTE nIndex)
4 \5 o3 ?% c+ ^, v) r3 A* B{, k( m. c3 S z( Y9 Z
if (m_dwPos >= MAX_INVENTORY)
$ ~( ^4 o+ R9 n( K! c; m' K- x. o {6 [7 \ v4 G1 b/ V
return;
- c8 {5 D: s3 x1 ?1 _+ s$ t }2 s3 |1 S* g$ ~( d
m_Item[m_dwPos].nIndex = nIndex;- K7 N. V7 g4 ~* M) W
m_Item[m_dwPos].dwId = m_dwPos;
+ b( b$ ^+ ]4 y0 m m_dwPos++;$ k8 [4 ~- f7 ~ ~% r2 X+ f
}
+ `3 `3 P/ w8 YBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列- Q7 R7 t0 l) o. X; I
{
+ b4 ]2 E% d/ N3 p" Y5 g for (int i=0;i<MAX_INVENTORY;i++)
( f, B3 N, c+ e; u {
, r Y' Q; x2 Z) x' u6 y$ M if (m_Item.dwId == dwId)
& q5 L) l! _+ @) c* ~- a: {/ ] {
% U- e0 k9 l& W return m_Item.nIndex;
" g I9 a) e$ [* W+ t1 k }3 J/ ]0 j2 Q# S4 g
}4 D6 a6 G" z: q, Z$ ~( d' I
return 255;
& c$ N% m }% Y" S# x/ s}
9 c' T9 v% X; z- E$ Xvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
+ J0 \- H' q) }3 k! Z5 X0 b{
9 W& I3 K; v1 w. A2 ] BYTE nTmp = 0;5 r, w& I, e7 h! r5 ~6 N
bool bDest = false,bSrc = false;
/ P9 O' P4 ^* K4 P, c$ t for (int i=0;i<MAX_INVENTORY;i++)
2 P' W; r( O `' ? {
/ @1 y r$ v$ `* `! o! {5 N" ]9 a if (dwSrcId == m_Item.dwId)9 C$ v4 G% S- x* ?% I% R: J$ J( M
{9 u# i' r/ N( O8 g. e
//id相等 则 改变对应的dest和src7 g1 W- |+ [/ `; H2 ^
nTmp = m_Item.nIndex;1 j- K `6 j# I$ T* h# k
m_Item.nIndex = dest;! f6 ?) x% ^, ?, X. z* F
}
" @% f1 f8 ?6 c+ P% ] }. q7 _4 @" c3 `" _ E9 J0 Q
//临时数据保存完毕,交换开始
7 K7 w& a4 P+ o9 L. Q for (int i=0;i<MAX_INVENTORY;i++)
! w' E, O' d x2 T D {
4 x9 z/ o7 D4 c) @: N if (dest == m_Item.nIndex)1 x" L3 ~) d5 n6 P; X2 v+ e
{
0 U, v0 k3 M8 |1 g //id相等 则 改变对应的dest和src
: f' Y/ P1 |3 B5 x* g m_Item.nIndex = nTmp;- ^) n! d* E$ B, s! n* q9 B
}' e D q: g1 L! ?& Y5 y
}( d/ P. ]4 W/ g j U
}) X# O5 \" w5 {3 }% x
};$ w/ K1 M% u! X8 O/ i! U- L& e
-------------------------------------------------------------------------
+ N; U" j, K1 ]/ v" r' m; L& f依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )! B' O0 v" j1 v$ p+ y
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
' W9 H9 i+ y' h6 U+ w紧靠其上添加:
0 q2 M% D' x& n2 l4 X! s: _if( pWndBase == &m_wndMenu )
1 m' a* I+ z% U( w& j, I{" ^+ i. J7 @) x' p3 `3 M0 ~
switch( nID )/ t- B3 f3 Z$ }( `7 s
{6 X* c9 X3 f Y m- u- M: `: w4 ^, n$ r
case 2:
h9 V7 `& s8 J, A6 j/ q {
9 V1 P& i5 n! y( z4 n) N$ G$ Y //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
& k; _& Q. P9 T. V" b if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))4 @ Q3 ?8 ~2 U" k1 o% \
{5 W8 g* M) b, }4 u7 l) N) R
break;
. d$ |7 l7 V/ @ }
0 I, Q7 K* ]5 r: A* l for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)' U9 N! n8 y- z9 A' L4 f1 \
{
! G! ~! I6 i. W( P% W$ R* N CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);6 G7 I0 Y2 V+ ` L' y3 I- | E
if( !pItemElem )
4 ^: G/ I4 W% a) ?1 [ continue;
, R" p6 o6 T9 R. I4 E if(pItemElem->GetExtra() > 0)7 {9 Z3 N7 a7 Y6 H$ A" M' l$ i
continue; `) z' @. g& P8 R6 S6 t
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
/ X4 D8 U5 V$ @, p continue;+ D# `) F) Z0 m7 r
if( g_pPlayer->IsUsing( pItemElem ) )9 a6 m) ?$ d( _3 `
continue;3 j7 t0 f; [# o& g
if( pItemElem->IsUndestructable() == TRUE )
% G' d# O4 \1 q {
7 C7 ~: c' E: k: Q g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
. S2 ]) o- X& D0 Q. K continue;' n2 }7 J5 [1 ~
}7 ~/ r2 V: r D, P8 Z% a4 g! v( ~6 R
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
* w1 G6 F% H3 z' Q; c+ u2 P }: Q& I# V$ n# h" q0 n7 y" G9 W
break;9 L/ a0 f1 g3 }
}
7 b1 x3 Q& [+ p9 k7 k: F& T) P: M case 1:
# M( |! s& G& y5 c3 U7 U! ]- ~4 X {
$ T" b1 d; O& L/ r2 e0 D; ? //整理背包
: q- A3 a1 K$ {) f3 N //////////////////////////////////////////////////////////////////////////
4 D8 E. U+ \9 X A8 T1 C //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
( y1 L) V. i' Z. i //////////////////////////////////////////////////////////////////////////
! S$ Z8 I0 X9 W9 h& { //////////////////////////////////////////////////////////////////////////
" R( ~4 G- R2 P5 K6 e" Q8 e4 } CInventorySort* pInvSort = new CInventorySort;8 g8 w. o) X t- F1 g( ~
vector <sItem> vItem;
( x# n- U+ p. t7 k vItem.resize(MAX_INVENTORY);//初始化大小0 X7 l- k3 w+ s1 w
//////////////////////////////////////////////////////////////////////////, e t! n P( U3 n2 W
//填充数据 L: o" {& N, [$ b; g; Q: l7 G
for (int i=0;i<MAX_INVENTORY;i++) S& I5 I- J4 K# p s* C: E0 f4 B
{) b; B6 n( O8 w, c
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
4 o" ^3 I$ q( G! b) m& D if (!pItemElem)
! c% @1 N6 o7 e+ ?& Z5 | {/ |; R0 I& D0 Z# W9 r1 F* ?
vItem.dwKind2 = 0xffffffff;
0 ^/ o( A. c2 X5 ]3 V vItem.dwItemId = 0xffffffff;: Y$ N. O; U4 q" r: |8 [% c
vItem.nIndex = i;
. T( q( v' z# F' k }else {
% X. p$ R% D( w k8 s ItemProp* pProp = pItemElem->GetProp();- [, i( P2 Z _
vItem.dwKind2 = pProp->dwItemKind2;* X9 E( T8 j4 Z
vItem.dwItemId = pItemElem->m_dwItemId;- R* Y, W; K, U
vItem.nIndex = i;
4 [$ q/ D* y' M9 q0 C0 c4 J$ @ }* ]4 P& j# J: L4 D- l
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);, i4 d, H. o' U. w0 z8 Q* B- t
}
r5 _( O4 G2 ]; j. W( I //////////////////////////////////////////////////////////////////////////5 Z4 V# P2 G" w3 C
sort(vItem.begin(),vItem.end());//排序$ [0 K5 b+ d8 [4 ^$ S
//////////////////////////////////////////////////////////////////////////4 E4 ?# B0 N+ N& b [
//交换
7 ~. x, h* _( W! h for (size_t i=0;i<vItem.size();i++)
6 a2 D. H5 |% s4 X/ K- l/ D {: @; e2 z% P& R' e
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);- C! A; \/ }3 d8 d! f/ @
pInvSort->Add(vItem.nIndex);3 E @/ S0 ]1 X8 X
}' L0 H# h6 y9 q; l4 k3 h0 J
BYTE nDestPos = 0;+ |1 F8 m# `0 ]" T2 c4 R1 ^5 J
for (int i=0;i<MAX_INVENTORY;i++)
0 p. [# D" m+ n) n* I6 E* a {
2 h6 R# | S e2 R; `0 D1 N CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
4 |& g( q' O+ U% m if (pItemElem)0 w# L+ E$ c3 [
{! c3 z/ A. a9 m6 V/ z
if (IsUsingItem(pItemElem))0 Z+ A5 t% ~0 z/ G# c
{& W; }$ c, G u% O% c; c: d0 o
//这个位置无法放
& S2 ^4 K6 a, `- S nDestPos++;5 s5 o9 B6 w: d7 O- G1 z
}8 S* G0 R8 K% r; [8 S/ r
}
3 t( A8 N( k3 F, a5 g! Y BYTE nSrc = pInvSort->GetItemSrc(i);
. {0 Y r+ Z, g8 P7 T6 o pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc); R; A$ I) S5 I7 c* O; t
if (pItemElem)
5 ~+ S, Z4 k5 F' d* y" G9 q {. u" ~4 c# A( I' X9 d @6 Q
if (IsUsingItem(pItemElem))' ? e. I$ ^( E; F0 H% z
{ a$ t, t* `' H: y
//这个道具无法移动,跳过
" l u0 X: X, e+ {; Z# _ continue;
% ^+ F3 _7 ^9 H2 D3 N/ n V }: ^" @( F" `. D) X& I% v
}else{) i# n! c2 X* ^/ |0 @
//空位置 不用动4 M/ q* C) }0 a- V! m
continue;( |; [! K! z% k& O
}, G$ q5 L0 D8 T `
//////////////////////////////////////////////////////////////////////////) U* `, v1 X4 h3 m! l6 Y% z' g
//开始移动' I- H) M. s/ ^) z. [& A
if (nSrc == nDestPos)
$ _% o8 b. f; U {( q2 S# W+ \( f
//原地不动2 M9 G V; ^8 v. V1 G
nDestPos++;
( e; l% P' S, j3 H R2 l- O continue;( l9 z9 {* p8 Y9 k/ d7 `6 Z# U" {
}
% D& s, m5 E. Y1 U7 D7 I pInvSort->MoveItem(i,nDestPos);
' V, L9 M* j4 Z0 J" Q' } g_DPlay.SendMoveItem(0,nSrc,nDestPos);
* R3 Q0 v, N* N Sleep(5);
& N0 o( a. B7 K$ y& J9 r //Error("移动 - %d->%d",nSrc,nDestPos);6 N# h8 H& ^4 N! Z
nDestPos++;
1 f" t; B( t4 i/ x0 ^# z }* E0 g( `6 `% j8 [7 R6 ^" R
//取第一个元素的信息$ x- D. U: k2 n H/ i
/*, j% h. [' W4 B0 G! _
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
. u: E4 h; A* x {
4 z- M! k4 p7 N- _; Q Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
, t6 D, o& k3 D# P, e% r g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
2 @. g$ N' D% i7 n7 e" i6 d }
0 x" |7 k* A7 ^4 e |4 \ */4 a& R" q+ r# u. H- G% i1 B
//////////////////////////////////////////////////////////////////////////, Y0 T' g4 J- A
break;8 |0 j8 V- b6 d" l7 f5 ~$ L+ j( [
}
. M d- e# z% U2 v/ f U }
/ V% p# w2 U& o: V}: b u1 `! n% T4 ]1 A6 E/ E
m_wndMenu.SetVisible(FALSE);" \8 S- |9 a) V, [4 r8 Y) h2 l: B, C* _
! J3 _& T o, }: _% [
--------------------------------------------------------------------------------------------------------
1 {- V+ u( S- C) T搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
D, }0 M! n' L5 b0 G9 d{
, W6 p9 o3 R1 F2 c( uBaseMouseCursor();# ^: A1 R, M7 H. W* C7 l- r1 w
}
8 ?' @' e( }( X h在其下添加:8 s6 d& n' t8 j3 N
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
! z" f: O. D& Y& p7 C4 B{
& C2 O0 Z! @% `6 q* D6 D* H% c* Qm_wndMenu.DeleteAllMenu();
8 g' f( L' ^8 M9 B: \; D# lm_wndMenu.CreateMenu(this);' K7 _5 w0 i: `% l4 F I
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
" y$ ]( f3 |# y7 T6 Q# z- G1 G/ C+ P8 m4 Y6 Z: Z9 m l S! q) f
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))# u5 O U2 B) a5 g
{' l% i9 h) m* E+ b9 O% s
//P以上级别才可以删除所有道具: ]* E/ J2 J* u
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");- s `4 ]1 _ B
}
% z- m M) j7 l+ T/ U) M% ym_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );+ |- f% `7 D z! K
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
9 A7 _4 {' v0 _# |3 s, a/ K; Vm_wndMenu.SetFocus();8 W; Y. T1 \+ h% @
}; x, K; ]$ X: T1 W
------------------------------------------------------------------------------------------------------------( U6 ]' u" }# @: r9 D
*************************
e6 @9 P" t# ?+ l- _! ]WndField.h文件
: H# m6 F: g# L*************************" W% N/ \* \ T
搜索:BOOL m_bReport;* C" L- P5 D! d1 g, @6 N5 l
其后添加:
' K' D+ z8 J9 g+ k: e; e& UCWndMenu m_wndMenu;
( a7 R( C1 T5 c8 ?* h& b2 w搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
$ [; I/ {5 X# ]+ Y. m其后添加:3 Z5 x* ]& v9 O0 C8 M Q% ]( E
virtual void OnRButtonUp(UINT nFlags, CPoint point);/ a8 n; r+ D5 \) p% s" M& m0 M
$ e" [, ?0 a1 F' x- M
4 n4 u" G! f% _1 Q: L9 R. ?1 n: x |
|