|
|
源文件中_Interface文件夹下WndField.cpp文件
7 \/ E" s; X) a搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )* k+ C! ~+ l6 U% i
8 i2 [ y. ?+ `6 @3 z! F- Bstruct sItem
+ s4 V/ m/ i" ^7 _, |2 G{
0 L0 A( I7 W9 N6 xDWORD dwId;7 |7 E5 d: v6 Y- ^
DWORD dwKind2;
0 L/ y7 G, T$ v6 {DWORD dwItemId;
& K! e6 s! s& eBYTE nIndex;. ?; u( y0 p) e/ C" [+ g, Q
sItem(){
% ]6 Q e0 E- `* u2 d# E: F2 S dwId = dwKind2 = dwItemId = nIndex = 0;: ~1 e4 D4 e/ z9 I" }
}
" }: L0 t6 E% s; Mbool operator < (const sItem p2)( m5 S8 x2 H* K' c3 W9 L
{$ w4 x5 r* x8 f8 w- V
if (dwKind2 == p2.dwKind2), ]/ ^1 A- m' b
{, j" \# T9 ^3 M/ r) R+ o
return dwItemId < p2.dwItemId;
, s6 q0 n% ~$ |0 L7 D2 Z }else{5 l6 C o9 @+ w
return dwKind2 < p2.dwKind2;
4 j5 W3 M: \1 f+ w/ g6 k7 X }1 {# P6 U0 K* d& E. G8 S, E
}9 T3 H3 s1 l4 \2 }* o
};0 O) B6 ?2 i. l- L+ v
class CInventorySort7 K- O& }2 _& I B* l: [3 \
{
0 A0 U2 C, e, s8 V' l/ ]public:, }+ [; r P9 n, p( a5 Y
CInventorySort(): g. X: q0 \2 P3 Y1 j) V: {: M
{1 G' j. j7 N. C& k7 R: ~
m_dwPos = 0;
. r6 ~. e! I1 v- X! ?0 G6 @# v}+ B% x9 a* r) R4 \9 f
~CInventorySort(){}
, b% U8 g4 X5 P- f4 v" iprivate:
! {" o* I8 h) U% m0 e9 a/ gsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息2 L1 i* Q2 J9 q6 u z& U* u
DWORD m_dwPos;
6 y- j7 I6 H2 tpublic:6 d7 Q+ K& O2 a9 y4 D
void Add(BYTE nIndex)! n1 U' [) I" r; n6 j- y" O
{4 [: X p/ c$ ~ [0 u
if (m_dwPos >= MAX_INVENTORY)3 j% D5 D+ e6 K" s, {3 F
{3 W2 D3 p; G# I
return;
' k& K, G1 E& P9 T' C, e }
9 d' J- k. Q/ G) O4 g m_Item[m_dwPos].nIndex = nIndex;/ Y% z$ d2 L. T! B* [
m_Item[m_dwPos].dwId = m_dwPos;
5 `; K0 M$ T1 c. u' r5 L m_dwPos++; f! u7 W ~) h& b* R
}5 k* q( B% U. l0 q$ a5 }- y
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列9 H2 k+ @$ T8 F9 ^* v" m
{/ {: k0 e$ m* t8 s: y( E5 _
for (int i=0;i<MAX_INVENTORY;i++)
/ G+ T6 Z5 |! J4 B/ f3 b {
& H' L2 p; O9 W1 V. K1 x( t( f3 O" a if (m_Item.dwId == dwId)+ p$ f, Q& S$ A4 d2 X
{
7 o* ?7 ?" a4 e& O* y( n* i return m_Item.nIndex;
; s. C, g! I" o }
9 {; Z( W* u+ b7 U% I }
: H/ ^; s2 |% E& a! }' V f+ k return 255;
. f$ }" F; c# y9 C7 g}: O- _% M" y7 _' M
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置# n* N4 m) p* C/ o. i
{. @* T; a0 T) U8 s: s
BYTE nTmp = 0;- d' H3 W2 ?" n: _, i$ ~& H5 c
bool bDest = false,bSrc = false;
- i( a+ S+ Q5 W# q/ A for (int i=0;i<MAX_INVENTORY;i++)
% d% X/ L1 m% v Q, ^( s" m {$ s' @) D# @+ d7 m( P
if (dwSrcId == m_Item.dwId)3 n8 e; {, b$ r
{
# h9 Y# B- G) U! ~ //id相等 则 改变对应的dest和src i) ?/ m/ T4 a/ L
nTmp = m_Item.nIndex;
3 n7 K+ n, q6 g4 i* G m_Item.nIndex = dest;& ^' \5 u2 S! Y: Y8 C- V. b f
}6 ~' z9 j4 w3 C/ W. X
}& n( H' ~1 A. L$ M2 \/ X. i# z8 s! S9 g
//临时数据保存完毕,交换开始; ?& K/ ~. b# `1 E8 U
for (int i=0;i<MAX_INVENTORY;i++)
% n( z+ c" d' t: S* G$ t {- s8 e* M) W: `6 q7 ?+ B1 y
if (dest == m_Item.nIndex)
3 k; i, S9 F; V/ a7 _) c {4 E) ] `: m7 o$ D6 ~) M P# s
//id相等 则 改变对应的dest和src' M+ ?* f* \0 f Z: |
m_Item.nIndex = nTmp;
8 y& `7 x* D0 Y0 _, M/ | }( N1 D% R w& E! u0 j# E4 R
}4 H4 M, M0 c% o/ |. n, f F
}
# V* B- J! X Y |( w};$ _2 A, f% ]( Z6 Y3 Q
-------------------------------------------------------------------------
( Y z9 ]/ e3 K k依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
1 C! z# P) ^$ h1 d& |搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);% ^6 W- d6 G- Z$ M1 L! |7 O2 ^+ k
紧靠其上添加:
3 a3 j0 z- K8 m" ]7 t6 b1 }# Jif( pWndBase == &m_wndMenu )
9 P$ c2 z2 \( A& d3 E- }{
' @9 |3 c* D: S7 ~) [ switch( nID )7 P' }3 C9 [0 \$ ^2 a- y4 _
{6 R- h$ V9 C( b& q/ n" }
case 2:
7 u& f, `6 w j8 K! X; g: d. v {/ n! a- z% y7 v! N4 }( u5 i
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);6 K. U9 q( n* T
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
7 L' c; l+ d- x' M4 } {2 _2 k ]4 v3 E8 i9 W# c, B- M1 Z: s2 D
break;
% V* K: U, r* n( m0 q }
1 s t; N8 N6 }; W% L for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
5 k% _! o0 ]8 g% L: i5 ^ {3 V/ I. [$ V' }, Y+ r2 x" S
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
7 W, a( ]: j0 ^, ~ if( !pItemElem )
; T/ g! w+ V0 ^3 E: | continue;
8 |+ D$ E O0 u if(pItemElem->GetExtra() > 0)4 R' b. r3 e% S3 v( t3 \
continue;; q4 ^- ]4 B; V7 [6 _
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
- F1 T) T6 W* W( P continue;9 z2 M% V" ]6 M
if( g_pPlayer->IsUsing( pItemElem ) )3 q W9 R; J# y( a7 T) @! }
continue;
3 K6 u. w* d4 ^/ i4 A if( pItemElem->IsUndestructable() == TRUE )8 s2 T) I' u/ \9 }
{/ Q& N( N) b4 ]6 e6 C3 t* N8 o
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
$ O ^8 d4 ?; X1 H continue;
: L6 e6 C- Z2 v3 E1 M$ P V }
3 i p% u$ N1 w$ |( Z g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);7 @* ]- j0 n% p: s
}3 @: c1 l7 m8 o& F4 f
break;
- X- V' J; J4 F7 k; p$ g$ t5 ?" F }
$ F' b5 l9 v3 S8 H: T4 k; l case 1:, z2 s6 `; W- g
{+ T2 @4 Z% r# Q+ w
//整理背包
4 z4 M1 e0 X7 W" E+ ], ^" V% V //////////////////////////////////////////////////////////////////////////
( y0 M; I( S4 o" ]# I //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
$ E- i5 a& c: p* K1 f$ n ////////////////////////////////////////////////////////////////////////// P W/ ?# W7 r
//////////////////////////////////////////////////////////////////////////
& h. D: Z, f$ Z# r" e$ I% e CInventorySort* pInvSort = new CInventorySort;: v5 R* G! M6 W& j
vector <sItem> vItem;3 C5 g7 z) c1 c& C% `# F
vItem.resize(MAX_INVENTORY);//初始化大小
0 ]- Y1 q5 B& D! G9 `) f //////////////////////////////////////////////////////////////////////////' X& c+ M! C, \4 [) K% J' Y) U
//填充数据& F& Z( q1 G& h# v" ~" j
for (int i=0;i<MAX_INVENTORY;i++)3 _% S: u/ Y: N% V m
{! ^4 r9 d( o. T9 l* H6 v" B+ y; m6 ~
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
! e8 v# D2 ? M- L" a! y. Q k if (!pItemElem)
5 ?; N) ]& T5 G {
5 H! |1 s( ]! @4 |$ K4 r1 a" X vItem.dwKind2 = 0xffffffff;
0 e! @% x4 k* V! _' j+ F3 t vItem.dwItemId = 0xffffffff;7 X' B+ Q9 w: s3 _1 Y
vItem.nIndex = i;
" o/ d1 T7 z3 V# }% W& g) z }else {
: J4 t' x' N7 L$ M& d ItemProp* pProp = pItemElem->GetProp();
4 V, g) `0 Y5 H) Z+ H vItem.dwKind2 = pProp->dwItemKind2;) p$ C3 J5 A% \! g% ]3 e
vItem.dwItemId = pItemElem->m_dwItemId;' p2 \ l& [* {6 U8 U
vItem.nIndex = i;
4 b( ~; [6 J6 U: V5 b3 M }
4 _( A( P C$ y/ o+ b5 _/ U //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
, Z1 `0 n. K/ K* c: R% @, R m u }
. v6 I1 ~. v. j //////////////////////////////////////////////////////////////////////////
+ H9 t9 O" {& k4 u" j, q5 N/ ~ sort(vItem.begin(),vItem.end());//排序% D- k) H3 @5 I' U
//////////////////////////////////////////////////////////////////////////+ ?+ H+ ]/ P, f$ `
//交换
; j" C. h% u. @4 c) w3 t for (size_t i=0;i<vItem.size();i++)4 H, j& E- @+ U& }) q# M
{8 Z5 E2 c1 I% u5 j
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
( z0 ]3 \) N' s0 e4 l" v' B/ x pInvSort->Add(vItem.nIndex);
; @2 k* K& h/ j% F0 s }7 c5 x- {, w- I9 w$ c0 x
BYTE nDestPos = 0;' O# E0 ^( G: e. [/ d& @* M* M$ A
for (int i=0;i<MAX_INVENTORY;i++)
3 z3 @2 W. c+ H% k1 ` {
3 @5 \" t3 m1 d8 r. O( W CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
, t0 Q' @; U6 q- c if (pItemElem)
, I& T, d$ k- i1 X. { {2 Y( Q, p" u& V u
if (IsUsingItem(pItemElem))
# M/ r Q8 m6 v9 {- d {2 s) y E: G/ ^, J) Q
//这个位置无法放+ F" X- [2 _' x, Q
nDestPos++;* L6 F; i9 ]: ?2 D* R
}
6 ~ ]! |& [6 _% \ }
, q; `$ H4 z+ j+ E( O* d+ K; z BYTE nSrc = pInvSort->GetItemSrc(i);
3 L; E) |- @2 _ pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);, X; Y1 w3 j6 R) N
if (pItemElem)
: d1 X4 G2 `$ ]- V Y {
6 {7 @: n- R" M8 I& u* N if (IsUsingItem(pItemElem))
+ J! D; {. r) l {
) g( B: h$ p: ^ //这个道具无法移动,跳过
/ n% C) G$ {" G) z, b+ f; z continue;
9 c3 D8 l" S Y1 A& j; r }
0 Q* _, b$ f) ]1 f* S }else{
x2 v9 w9 w+ _ //空位置 不用动
, o1 P: [6 m' ?1 a; r9 T! B& { continue;6 m* |2 @ g- T- |% c4 J
}
: o4 J" E6 y7 `, o- a: U+ i //////////////////////////////////////////////////////////////////////////$ |. O' \( A, y, W: q) Y5 X
//开始移动
B& m, \6 a X, M5 l9 P, i0 D if (nSrc == nDestPos)
$ ]) X$ E5 c) c0 z {2 G' ^; S+ o% D0 d- a
//原地不动' }4 o, R2 N' l- d
nDestPos++;& P4 ~" n, g4 q4 L
continue;
6 N) @$ e0 f- h8 h: O }
% u: {, G) R( y3 a, } pInvSort->MoveItem(i,nDestPos);
$ l1 i- N D. Z3 t5 S3 t6 ?+ B g_DPlay.SendMoveItem(0,nSrc,nDestPos);
6 k1 L+ j! h2 q) z$ k Sleep(5);% C' D( g( d0 R- W) U
//Error("移动 - %d->%d",nSrc,nDestPos);
8 n* K1 k2 O. `+ N2 A2 w nDestPos++;# h! z* U- G. _9 {! q( n% ^
}
& V; Z4 f: I* b5 e5 } //取第一个元素的信息; k. o" a+ i8 W L n* z
/*/ N9 U4 V/ D- w9 i& q. [
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)+ S4 ]7 { _/ z$ J c/ L
{- Q( g5 Z1 D/ v# d
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
) |# B2 S: e; m; B" W g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);, a0 a5 x; U6 t) g( y
}
! Z/ i: Q$ W) B3 w9 G2 d5 p */! n- o N6 n: m. C* X+ L/ w
//////////////////////////////////////////////////////////////////////////
2 ]0 N3 P- D' L* n break;- {1 Q1 C8 U1 x. M! p
}
3 j) h/ s. H. r0 u3 K2 \4 B }
- G& k8 p7 X/ `& T1 p}0 p3 d# q( J ]
m_wndMenu.SetVisible(FALSE);
4 P+ w% ?' ^2 A4 }5 ~# |9 W3 h* Z8 ?- G2 _2 x" `6 V6 g$ _2 c( o
--------------------------------------------------------------------------------------------------------
& H9 E6 L8 d7 m2 i! B搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
1 S I2 a' n. I, r& S{( k x8 w7 Y" \, x) a4 H
BaseMouseCursor();; m! @* g0 w, Y
}
% q# x3 L& P2 h+ U( ]在其下添加:) X% n* G! M' L; C% O
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)! w$ O4 e1 o! r0 C' M; g r; E1 i3 a$ [
{7 X6 H5 v/ O& G& E
m_wndMenu.DeleteAllMenu();
1 h* {1 X: i8 \# I' i- Hm_wndMenu.CreateMenu(this);
$ \7 b- z9 i) k2 jm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
, y0 l- X1 ?' B8 Q" S# m+ h4 k
8 |& e5 N7 G5 b, `, k5 ]9 oif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
6 u. x' a, @. W0 k9 W6 ~{
1 K( E) G8 h* }. c! j //P以上级别才可以删除所有道具, Y( X8 N& P2 G5 N
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
8 n0 z. W! s0 e}) [! n' V: c( ]1 \! c
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
+ Y; g! k9 @0 ^" W4 r$ a! U" E' b1 c& gm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
8 K( t; s I! _) E0 {! Em_wndMenu.SetFocus();2 V- j l! {5 i. K
}0 l. B0 E+ t2 l+ C- @! U% X
------------------------------------------------------------------------------------------------------------
0 L! O( D# w& E4 n. @: t5 ?*************************
K" d B) a' y( W o! UWndField.h文件; @9 [$ w; k# _9 T
************************* k: H9 o8 V) o
搜索:BOOL m_bReport;+ F0 P6 `3 x9 k% M( P& q% f+ b
其后添加:
5 @- ^/ C I, zCWndMenu m_wndMenu;
L# M) w2 n: g6 x1 w/ E. B搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);5 H5 i$ q" ~" R# j
其后添加:
" m1 o; V2 M3 C5 @0 V, z7 I3 Y( Fvirtual void OnRButtonUp(UINT nFlags, CPoint point);8 D6 ?0 H; B \1 @
9 @1 B0 _& u# d3 b& o: B1 i
7 H7 v: r; j" }: J6 j; b* N: Q$ n |
|