|
|
源文件中_Interface文件夹下WndField.cpp文件
# {; v# X" I. e( z: C# S2 v( o搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
* l7 z6 l q2 j" J
- P5 ~2 A" Y' e, X4 b& j9 w; ystruct sItem
. X9 F+ Y. D/ A+ j, d* u( Y% v{
+ m! o7 W C7 Q$ PDWORD dwId;/ K% \* i1 }5 L
DWORD dwKind2;" v; O0 g* X3 z. @
DWORD dwItemId;* O; _2 @% c7 |
BYTE nIndex;
% b0 U1 ~$ ^8 c4 u4 S5 U) E: LsItem(){
: o6 U: a5 \& ?8 L dwId = dwKind2 = dwItemId = nIndex = 0;6 n) k {; d3 [1 ^; N \9 ?' f
}
( [' g- i) h: _! ~1 c; u6 g1 Mbool operator < (const sItem p2)
! _; Z& P5 n, N1 h) {{6 Q( M3 Q: x- u9 Y+ J' y
if (dwKind2 == p2.dwKind2)1 a; |, k! h/ {2 P: ?$ I
{: K+ r/ {4 |8 [: ?9 R
return dwItemId < p2.dwItemId;
?' V" K$ a4 \1 u7 C: @" v0 d }else{8 t( M3 c3 Z( y6 x1 ]
return dwKind2 < p2.dwKind2;6 f1 K% e6 Z- |" j3 l. m% T: ?5 O
}; L- s' F4 ^% B: @' |
}8 f& ~3 b- _+ I7 v/ h# t
};
: N. h: G$ C- {' Rclass CInventorySort
% j1 J7 _& T5 `* O: ^" ]. I{
, Q& r% k; S) i# |1 Z' y# d2 Wpublic:
/ v/ V; g M% t; F3 h( pCInventorySort()
) [& a$ F" x) B/ K0 r8 G0 I2 }{2 P& U# E$ @; R! Y) M8 R; ?
m_dwPos = 0;/ n- E" I8 K: d
}
; m- s" w" e1 T: G' h~CInventorySort(){}
* }/ A, R$ ~5 V+ ^private:
U( E% D& E# [5 Q7 N0 usItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
6 }& s6 y6 F1 A7 oDWORD m_dwPos;% W, F0 C7 a8 N
public:8 w; c: x. Z1 C& |
void Add(BYTE nIndex)6 ~( w& E& p8 T
{, o( x+ s: Z: b7 ]" D$ x; s2 z
if (m_dwPos >= MAX_INVENTORY)
- P1 f e# S! ]' R {" L% z* n! ]) l1 C0 E, Y
return;: O& j; p) {3 Z. N x6 O
}
- D" _) F5 O( U2 g7 n m_Item[m_dwPos].nIndex = nIndex;) J. b; C* f% N, W4 ?& z/ `* ^' G
m_Item[m_dwPos].dwId = m_dwPos;& X+ h8 \) @; Z5 t7 e
m_dwPos++;/ w4 T+ p" ~( ?. [1 T& Y
}% n( c* \6 G# c; D
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
% ^ H l& n! n4 L2 M& o( u3 w{
1 f; _$ G. g7 n3 x4 `* k; v; U for (int i=0;i<MAX_INVENTORY;i++)
2 P8 o% K6 k: x {
" v" |' J9 D; ]- g) S; B9 h if (m_Item.dwId == dwId)
1 f" C* Q8 f( {* g* u {
& K, m1 U7 T# `8 k G F return m_Item.nIndex;
& }' M T9 Z& Z& j }
0 @% _) A6 }+ y% f q. Y }0 U9 K; [8 }+ {3 F$ p& M; a% U
return 255;
+ W/ p6 x, t: ?- b5 D5 T}5 ^6 b% v! l8 m( Q
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
. P1 L& T2 d# f0 a n" U{
. f2 `; B: k- u( U& U9 Z BYTE nTmp = 0;
4 [) j8 Y# G% _8 u" a) k+ o ^ bool bDest = false,bSrc = false;
* u4 J& _8 k, X& X/ T for (int i=0;i<MAX_INVENTORY;i++)% o. b0 v8 f, t3 |. m5 s" j6 }
{& k' A/ I1 R) J. L7 `- L. A
if (dwSrcId == m_Item.dwId)/ ~% I; j8 T0 p: r* r" o
{
$ d, `5 r$ y7 m8 j* b7 U8 U //id相等 则 改变对应的dest和src5 M" d7 L/ Q/ ^9 v: A
nTmp = m_Item.nIndex;
' I: F1 E0 a# b$ ?5 S/ q: s m_Item.nIndex = dest;* I2 u- p6 ^- j
}
' u7 C! P' H4 s X: o5 }* W }
/ k; P' a( C0 [6 H2 j' d //临时数据保存完毕,交换开始
* a. M* n: y& y/ O- _3 g) E( W7 E for (int i=0;i<MAX_INVENTORY;i++)6 [# ~# t7 n9 ~
{
# m; X5 N5 `; Y if (dest == m_Item.nIndex)
. |: A q/ F" `4 \9 Y9 q2 d- V {
b8 j/ k/ m. V% F* S5 m/ P5 ~$ I //id相等 则 改变对应的dest和src8 T5 @6 _7 E5 k% B* r$ u
m_Item.nIndex = nTmp;' x/ d: n1 R4 @- D* {
}; M! x2 r) V+ k: G; A
}
& |3 |: k- A; t. c- i) |}
1 p. o% R X; I3 N, `+ T7 b d7 Q1 u5 K};
2 A* y0 v, J- y* d% l7 j-------------------------------------------------------------------------
$ |- W: M! T6 g: Z2 \依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
2 N, l3 r$ Z5 U2 b" Y) j6 e搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
5 @ Q/ c: E" L$ o6 G: C3 A紧靠其上添加:4 b; [8 k) l/ d" o* o
if( pWndBase == &m_wndMenu )
( L9 B1 f3 d. M4 F# d+ V{, [# O; |+ r: V
switch( nID )
3 r0 a3 V1 X/ ?& r$ m! l2 f8 V7 u, `7 h {3 z% I& a! J+ r0 @3 S/ h
case 2:
/ P( O0 d' Y; u8 [! Y: g* Z {
+ l, h) Y0 I [! X3 @8 D) p8 \ //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);% k* J/ E3 @ w1 y" S2 O
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))6 O# D9 R; j' _6 \ ]$ Q4 N1 r1 j) Z( z
{5 R! \5 L! P3 _! @2 K
break;
3 h4 z! e2 k6 d( a: L4 e$ A }% b8 V- _( ]2 f1 y2 m; Z7 X; @1 p) `
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)" p, r+ I: y+ k4 z
{
* |5 A8 P3 y; B1 [2 i$ s5 o& W/ v) x CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);; s+ u% F" t: N' t( a D
if( !pItemElem )3 x$ A1 U8 }! D: c
continue;( V& N& n/ T! ~$ h! F
if(pItemElem->GetExtra() > 0)
5 @4 T& b: {+ v. _0 C( B continue;
, F* |$ B+ O9 E& ^% `! i if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 0 |7 t9 u% h$ W- U B: z! z
continue;
6 P+ o$ \( H; Q: [4 z- D7 | if( g_pPlayer->IsUsing( pItemElem ) )
7 z; q$ b0 b. v2 B continue;0 q! Z7 m0 k0 N' u
if( pItemElem->IsUndestructable() == TRUE )
+ E/ @, G' F+ n. u/ ^ {( m" W0 G2 ^1 t, L
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );4 @2 O! i! W1 g0 E6 a5 t
continue;1 H; D/ l1 P1 {9 g
}' A$ h( r7 W& V% x/ j, J
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
& F4 Y0 z: I. [2 ] }) ?% {/ ^7 K0 a
break;
% c4 N4 {) l! U# Z3 F5 k2 w2 V5 t G4 Z }$ E/ Z; F) C) `, o5 N
case 1:
# Y- V" B7 R1 M! [ {
* _# [2 Y/ S* i/ S; E0 S2 {1 r //整理背包
/ A! u: f7 O% k8 d* q5 D/ `1 j9 j$ |* ~ //////////////////////////////////////////////////////////////////////////
1 E6 E" {; o, P+ @ //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
, c4 \) J& C7 E7 |* A //////////////////////////////////////////////////////////////////////////0 k/ c, B5 s) q# R/ h" ]- ^
//////////////////////////////////////////////////////////////////////////( I% D7 Y; a( z2 a
CInventorySort* pInvSort = new CInventorySort;
5 T! W. Z8 N! N8 u8 R% |, W vector <sItem> vItem;
9 @6 i" u4 S% s4 g1 |7 }( P$ A9 q5 [: m vItem.resize(MAX_INVENTORY);//初始化大小
( ^+ T+ o0 W" `8 m //////////////////////////////////////////////////////////////////////////
7 L; @( x: D3 y5 P1 X //填充数据2 d9 I/ u. e/ b$ h! Y9 a
for (int i=0;i<MAX_INVENTORY;i++)
& u- z: u! a6 G8 ?9 _ {
* |5 d9 E2 I) z2 D CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
. E4 e: d, S- O6 X) `( u if (!pItemElem)9 M( V& s" n4 t+ p; U
{
- R0 r) P" t G7 f6 } vItem.dwKind2 = 0xffffffff;, S% w; L- _; I; b9 f1 |7 d9 c
vItem.dwItemId = 0xffffffff;* ~0 U, v' r& N) X8 E! [
vItem.nIndex = i;( ^. f; n9 v& {% n
}else {
6 i+ i6 Z- d0 K% W& ^ ItemProp* pProp = pItemElem->GetProp();% b, a1 L$ n9 p b& e( L' ?# s- q% i
vItem.dwKind2 = pProp->dwItemKind2;
5 X; v& e1 g# w& T3 P8 K& u0 T vItem.dwItemId = pItemElem->m_dwItemId;
- Z2 E9 t' k& o vItem.nIndex = i;
& Y. O+ R4 r# @- U! r }
$ G. U5 L e. f% ~0 e/ R //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);# b$ d7 J! o5 A0 f) L! Q3 A( e0 k
}
' C/ K" z8 y, m3 ~% S //////////////////////////////////////////////////////////////////////////
2 f6 S' k0 Q( V/ ^1 l sort(vItem.begin(),vItem.end());//排序( ]& ~7 k) P& b' }7 G9 Y: u5 s; z
//////////////////////////////////////////////////////////////////////////0 B, q& q" ]2 t1 B
//交换
. B0 [$ w: Z( T3 C8 \ for (size_t i=0;i<vItem.size();i++)* I2 u0 r6 ]* K) P, j
{9 C" Y2 U2 ~' b* g( r! N
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
; c* g& m& R/ E9 j7 P$ ~9 L( M pInvSort->Add(vItem.nIndex);* M) e) E9 D$ `! p
}% t- ] O& _: N, |4 k
BYTE nDestPos = 0;( L. R& h. Y( m' O
for (int i=0;i<MAX_INVENTORY;i++)1 P/ K; C* U- n4 d( W
{; K% ?4 z9 S+ E
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);: \* }- q2 v/ h! O7 U1 E+ g7 F S
if (pItemElem)
: d' a( u# E" U {; X6 e* W. q2 @0 F( k0 S5 a1 N, J
if (IsUsingItem(pItemElem))' A- Q7 Z; `1 E3 @
{5 |* K; H/ z# o
//这个位置无法放
3 @7 z1 V6 }5 |4 {9 q6 Z7 I; ` nDestPos++;- B; s' W1 `) z9 ^+ K3 N9 a
}7 L @! H5 x" v( T2 d: a
}
& j( M" f5 q. d7 ~, q3 I BYTE nSrc = pInvSort->GetItemSrc(i);
; U: T4 ]; z' f8 F( X+ R pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);* e% L6 f9 D- U: D0 T2 C$ L
if (pItemElem)% j6 l) g% R* k8 u
{
6 v) u) u, c9 F if (IsUsingItem(pItemElem))
9 D x5 W+ i) c! T {% e! Y. w/ u! ^% f0 ? v
//这个道具无法移动,跳过: C% A* w' ~+ h* ], T2 D
continue;+ C0 a, u% _* S- U( w! J
}
5 _9 A# ^# w0 D% }, A% U, j2 ] }else{, Y$ T* {! J1 B
//空位置 不用动
: k" e9 M! _$ ?. o8 H" g continue;
5 z* t/ N: v2 D& R }
$ Z5 p: [0 @$ j" f1 t0 I, @+ R, r8 E //////////////////////////////////////////////////////////////////////////
( ~$ P+ L( {3 b: z7 S1 V //开始移动
. D2 `+ @5 g6 M: l+ a" J: { if (nSrc == nDestPos)/ m6 E. R# F# _; ^4 n, x
{
. t' l, t" J; n" c //原地不动 W0 m+ [ ~ H% d2 x
nDestPos++;+ t. h# Q; x1 o. \, ?% H
continue;# d) Q, e. n2 ]$ N( M
}
* i. i' A; d! h pInvSort->MoveItem(i,nDestPos);
3 U& B9 n' n: A* v3 ^ R. [ g_DPlay.SendMoveItem(0,nSrc,nDestPos);) g+ ?# W2 \7 @6 b6 v* D2 r
Sleep(5);
; a) G3 u5 }( ?/ s( { //Error("移动 - %d->%d",nSrc,nDestPos);* f( E9 n1 G6 H; A+ d- @
nDestPos++;
2 [! y& p! U% ~ }3 T9 u- h# X" B* ?+ K! J& B: K
//取第一个元素的信息 u3 |; ?$ K; v
/*
. g/ M; n6 u' ^4 g* @ if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
! s" K: f5 ?) _! W' H% ]. L {
8 q. j! u- \! e Error("Move - From:%d,To:%d",vItem[0].nIndex,x);, q G2 a6 Q* c/ [
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
+ A6 X( t: x* X }
' Q6 v; x. U. c A+ M* ~ */
0 ]& m* M- ?4 H; V' J& W b8 ` //////////////////////////////////////////////////////////////////////////6 @, m1 d. `% g' y" d( L. g+ L
break;
2 }# W6 j$ [( k U8 X$ `" O4 g+ ~ }
& X4 O. x7 [1 E* _" [% M8 n: [" ^ } : M# R7 L$ M- K
}" h/ w1 h9 R$ Q
m_wndMenu.SetVisible(FALSE);
( \" Y) Y7 n \( t2 ]0 S7 R
0 O `0 o( z# Y+ v1 I. {8 N' r--------------------------------------------------------------------------------------------------------
! Q6 H& d4 y8 e+ [: i搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
0 r+ p3 s, S' Y3 G. |{# X& j& W: k' v2 t7 v4 M9 [
BaseMouseCursor();# V8 d) f0 _/ k I+ F7 @
}
& J! S) f8 m4 v9 S6 u在其下添加:
& ^) a2 V% w7 Bvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
3 n+ u; H; w7 u6 i" A{
* O0 z7 @. h* B3 u* A( b; [, Y: ~m_wndMenu.DeleteAllMenu();
9 f- I; q; P& B; L0 }4 v# |1 m8 ^m_wndMenu.CreateMenu(this);. x. H2 v. [( d2 D; Y& v8 x" ?$ b' ~! v
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
2 }1 g( j9 r0 I; L2 Z# g" X! v
0 i8 h6 A4 F, e$ o/ a9 Mif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))7 F8 |2 C7 M! O* x( Y5 F8 u
{9 r4 C1 y( s6 h7 o3 f" K
//P以上级别才可以删除所有道具9 x8 A7 C7 Q9 K) y: X% g
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");0 t/ a W6 R5 j9 {0 M
}
2 f& S/ O6 O( e# z) B; t' um_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );6 [9 t* P* T; Z, k
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
% w9 ~" k! r% T1 O) gm_wndMenu.SetFocus();7 A% U' w/ l) Y. d6 w1 ^5 |( L2 r9 u
}4 D4 v" V! C& w
------------------------------------------------------------------------------------------------------------
: d# i2 w: ?* V- `1 B*************************. m6 ?: I4 g+ _% Y7 N
WndField.h文件/ y- k" U' s6 a8 ~$ f) a
*************************
. G) [ E% ]3 {搜索:BOOL m_bReport;
; |5 t1 W8 S" @; f/ b! h其后添加:
: U. B" V3 ?4 A! WCWndMenu m_wndMenu;
; P- U1 j7 H( H' j5 x( U搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
1 h! \$ R" g* F; ^# S7 `, L其后添加:
! Y1 S8 q" ^2 bvirtual void OnRButtonUp(UINT nFlags, CPoint point);7 M) Y; I3 T5 r; j) \
+ `) q* {2 y5 b6 t1 f! U8 o4 Y
1 \2 J8 F8 c# k% w- ~
|
|