|
|
源文件中_Interface文件夹下WndField.cpp文件
$ ]( G+ ]& D" |/ H1 O搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ): `/ K3 I/ X, k7 t* t
& @2 i2 l1 O# Z$ W4 @5 x' K, Cstruct sItem
. E8 {8 s' B3 y6 r2 u{
5 q+ `# v9 b' m/ B. w1 }DWORD dwId;
6 u/ Q# v$ ]( a" x7 L1 MDWORD dwKind2;
# L5 T P$ j1 b VDWORD dwItemId;% O, W1 |. e T4 \4 j
BYTE nIndex;
) F& a1 E& t' P8 D. ZsItem(){
9 X9 d( j* i9 V: A+ n dwId = dwKind2 = dwItemId = nIndex = 0;
$ @, X. n- k* j}
& a8 h" Y. w/ Abool operator < (const sItem p2)
3 O' |- n( z/ V9 m8 j Z{7 J6 S# k1 W# d
if (dwKind2 == p2.dwKind2)
. w! p/ s. d% y3 Q4 N1 d+ Z {
6 ?% F' y& J* S3 L% [+ F+ x return dwItemId < p2.dwItemId;7 d# w* w, I0 U6 s7 {
}else{
; k! z# z2 g: l& g' D/ k" P return dwKind2 < p2.dwKind2;* M- C# H3 {+ k( a& o- }
}
2 ?( X5 r! u$ y% ]}/ d3 F: }% }! k* r8 T' a7 n( E
};! X, t% C9 R" x+ C: E# E! G# N$ r/ `2 P
class CInventorySort R' H7 @" ]8 b
{7 L+ y. Q* S4 j' K3 z( w
public:# J+ @0 M% C( v
CInventorySort()& Z* h* d( i0 d
{
7 h5 V9 A& V z [0 @" Z/ F m_dwPos = 0;% P+ \; G% h- l5 M K& i
}3 V* t6 _ y2 b/ h/ J. U
~CInventorySort(){}4 [( B' u2 s* G2 C+ ^, D; S
private:5 d/ m, O6 u+ I2 L) B7 S
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
; V- P7 y- _# Z) dDWORD m_dwPos;+ Z1 H( m% `' t/ M9 @9 R
public:
. ?0 ]7 O! g- ?+ _7 |* @* U* `void Add(BYTE nIndex)
2 m+ N% g0 X: j' c6 }{
7 e. @; V0 |% I if (m_dwPos >= MAX_INVENTORY)8 C9 j. |% s% k( } ?/ Z
{
l' A/ X+ K, t3 _* \+ E4 H return;
: q. ?$ B4 n5 i9 a8 _: G8 q }
; G) E, h; Z+ K+ X: g& g9 t m_Item[m_dwPos].nIndex = nIndex;" X# a2 ^2 I8 H
m_Item[m_dwPos].dwId = m_dwPos;
4 U8 L4 A5 y4 i, D m_dwPos++;
# o4 g3 G4 h2 R6 v" B% b+ x}& }- v& V0 k. U1 z/ Q
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列# y) {. C! E* n, q) Y" i! t& w
{
- [" K, X: K: S) |$ { for (int i=0;i<MAX_INVENTORY;i++)- ^8 L& Z" w5 l! x6 r
{7 k, M' y3 s' c3 c$ c& R
if (m_Item.dwId == dwId)- X& x/ W. j# k9 m. u) c, e( O
{* e+ b; Z) Y: m8 t2 F/ ]7 o
return m_Item.nIndex;
2 s2 ^* B/ s4 a3 c1 B% m+ L }
8 e9 h1 I6 x4 o }8 ~5 I5 H/ y- B' a
return 255;" F3 F) J: O. l2 s
}
^$ I# A: A% @' A0 avoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置) k: v3 t$ M. n
{
9 q( P; d; a: N7 X) t( ^ BYTE nTmp = 0; D: q$ R. G8 b+ u
bool bDest = false,bSrc = false;
5 }$ y- w0 A. S$ Q5 q for (int i=0;i<MAX_INVENTORY;i++). s- r7 Q) B; k; y8 l! [& Z# p# }
{
$ \; C' P5 _0 [' A# R if (dwSrcId == m_Item.dwId)
- j* m, A7 q" t {
3 {- \4 \2 N( J1 A; X //id相等 则 改变对应的dest和src
( e6 v* N' C2 T: b nTmp = m_Item.nIndex;
1 K4 J! y: B! s' g' N m_Item.nIndex = dest;
/ l, x5 V0 \- J) h4 U; |( U+ @ }
5 D0 `- [+ b- [$ P' I( r. o! b }
( L$ E6 u: w) W& C9 } //临时数据保存完毕,交换开始3 ~6 x' M( e$ o. c( j# M
for (int i=0;i<MAX_INVENTORY;i++)
5 I! v$ g+ O' @$ N3 ^" K0 t) M5 } {7 A' k4 {/ `4 A$ v
if (dest == m_Item.nIndex)6 I9 @7 ^/ _5 U& M( N) P
{
+ C# m; ]& e" J; R //id相等 则 改变对应的dest和src
" i; O: V2 }; C- U. P m_Item.nIndex = nTmp;, P" [& P1 P/ G# z+ v
}
' M) i/ M' D. ^' { }$ h1 b" h: B3 u. _ K8 e- N4 a5 o
}! I, i) ], f$ |& |& \$ R) ^% b
};- B: B* S L) }. L6 L4 t- a
-------------------------------------------------------------------------" S' A( w, K( Z
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )7 F; m, g6 P; S! E1 F0 H. Y
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
, r7 Y8 Y% X8 E& u紧靠其上添加:( t0 N6 [; N8 b4 C. B3 h
if( pWndBase == &m_wndMenu )
5 Y- h: Q9 V/ v" `: r{/ \1 b1 B4 h3 p: w) q2 V
switch( nID )
7 D/ a& `2 o0 i' C" @ {
! K9 o, O# V/ ~4 k. S4 x case 2:
7 N2 k1 j, v4 U0 R* F) Y4 K4 t {
% |% n2 N# U$ r2 m; G5 o: \6 O W+ V/ _ //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);! h+ _9 P* n3 d" q1 W& E G
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))( E1 m Z7 L7 \. R$ L6 ~' c
{" K9 f7 I7 o+ F! _4 R. l
break;9 m- R" ?8 o( t* H% m
}7 \- b3 G( f/ M/ ~
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)/ S! M1 f; s* B2 n; W4 D: D( z6 e& I3 B: |
{
8 B! H6 R0 s; @% ] CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
" ]. G! D1 H4 ~ h8 V+ d. Q if( !pItemElem )
: \9 r! S2 `9 { continue;4 M. ?# G/ v& w. D5 `# ]7 p1 u- n
if(pItemElem->GetExtra() > 0)& v- a I3 z E8 \! ~' {& w$ {
continue;
6 H/ Z/ ^* z1 V' H if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 1 `4 S, k, V0 B3 G
continue;0 v; c/ L1 p. V9 Z" `) V' [
if( g_pPlayer->IsUsing( pItemElem ) )% y( N6 ?0 D F
continue;
- {3 |& i8 v& w2 D& S if( pItemElem->IsUndestructable() == TRUE )" h/ N) T* i# c1 e4 g0 g, n# t
{
5 f* x. t P4 g" \6 U5 }& m g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
& |2 V$ r. h6 o3 ]! s continue;
( e; Q! P. o9 e+ j& U' a) Z }
R/ u9 L% Z( n3 N g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);3 R* I: V9 t2 w8 n1 j0 ?. Z
}0 A1 Z/ B7 j0 j y! K5 n" h k, Z
break;! l- N' {7 V& i3 [+ i i
}' x! J1 O8 L# c/ O- O2 [
case 1:& ^8 q! [% U) N
{
& ^" i/ H# ?2 Z; o/ [7 j7 `% I //整理背包7 L7 d( e& }' O1 d: H* }5 a: v
//////////////////////////////////////////////////////////////////////////
; h( t8 n3 W/ I9 Y9 K //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
) ]8 j- W( u* v _$ Q //////////////////////////////////////////////////////////////////////////- k' J; U0 L! y$ y3 Z! |
//////////////////////////////////////////////////////////////////////////
; M( h* _' H6 k% f CInventorySort* pInvSort = new CInventorySort;
; G6 H! }- I7 ^ vector <sItem> vItem;
' a8 }2 F8 _- ]5 Z: h( |' v vItem.resize(MAX_INVENTORY);//初始化大小
7 x' v) l, `9 ] //////////////////////////////////////////////////////////////////////////
* ^% ~& {9 }! |- x: y" e) k4 A //填充数据$ K/ z1 p' t/ ]0 k- B( m2 r
for (int i=0;i<MAX_INVENTORY;i++)1 D- x$ k, U! z) c
{, I3 L& c- f4 i, i, f W2 h, Q
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);4 V$ {. B1 N5 y" g7 h5 P3 X5 E
if (!pItemElem)
. A* B b0 V; [2 F! o! u {# g; h: B3 Y, `+ T$ v; z" w$ z
vItem.dwKind2 = 0xffffffff;" g! @8 U4 d5 r: D3 {+ ?% {
vItem.dwItemId = 0xffffffff;) x! ~6 ?, W( q7 U# u# ~+ w% @
vItem.nIndex = i;0 {4 }! l% b; Z& ]* R5 |
}else {
) A+ a9 A) M2 Y) t; {( X! `$ ] ItemProp* pProp = pItemElem->GetProp();
( n: l9 q* q% Z( U, o0 v7 b. u! Y vItem.dwKind2 = pProp->dwItemKind2;: M2 f5 m! y" T; h( \ _
vItem.dwItemId = pItemElem->m_dwItemId;
5 Y1 m! {" ?# W9 ]# W vItem.nIndex = i;
- j2 q- p1 U* B. d/ b( Z, R1 I8 y }
( E4 C; c+ E$ k j9 K //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
5 d8 X' L. Q6 { }1 ]5 M- W" [4 a* Z
//////////////////////////////////////////////////////////////////////////) [* G: H8 z5 a V8 u! X3 Q
sort(vItem.begin(),vItem.end());//排序
2 K2 s" z, Y3 ?9 F" ^' z //////////////////////////////////////////////////////////////////////////1 j6 [7 u1 t3 @% b2 A# q
//交换) M# S: J/ S8 Y6 Z# g! p( D
for (size_t i=0;i<vItem.size();i++)6 ~6 w# |! |' o0 c* Z6 i
{3 k, x4 R% J6 E8 A1 Q1 V$ t z) u
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
2 H: ~" o( A- w8 b' \ pInvSort->Add(vItem.nIndex);
5 ?9 A6 b9 Q4 h1 b3 O }$ v4 l) X4 K( C2 M6 \7 r
BYTE nDestPos = 0;
/ g/ l5 }+ z( o. ] for (int i=0;i<MAX_INVENTORY;i++)' |8 H' X- _4 [% X
{/ @% e# T) s) j. ~3 y V
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);. i9 e: J; b }& [
if (pItemElem)0 q& P1 e$ c. |8 \
{) u: q" s; W/ a l# i+ G
if (IsUsingItem(pItemElem))" @9 _8 I/ ?4 e( s; V9 m
{
6 O2 N* g$ T# j! @/ c9 V //这个位置无法放% i" b3 ?2 [# [; [: @) v3 s
nDestPos++;
& w2 a/ t! T0 G! w }
) j: U+ j% a3 r& o- M; a }3 C4 X L" x, V( d( e1 ?& N8 k f
BYTE nSrc = pInvSort->GetItemSrc(i); i3 E- {6 x. F& _. J( `9 }1 b. U
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
& B1 B2 ]" T$ ^$ o- Q$ S1 {% v if (pItemElem); }" F% O( y+ `
{
3 f3 \& H; M( K: ? S if (IsUsingItem(pItemElem))
7 N( j/ F6 U4 m4 P. T {; e F. E* r. u) X# X* N2 _" j
//这个道具无法移动,跳过
) |, C" V6 | y/ ~: ]; y continue;
6 S" A- |$ z5 `: G, U: O, G I }$ e) I7 W. p# d: ]8 K9 C* f
}else{
' Z0 J4 n) y$ M: t$ Y //空位置 不用动2 ?$ @% _ K' e# I
continue;# G) h7 `1 h' {; V" {5 R4 b5 a: Q G
}: p9 B2 ~2 q: v& Z$ c* y
//////////////////////////////////////////////////////////////////////////1 E' _- s7 D3 R6 A- r+ Y0 N N
//开始移动
2 u n9 P2 N6 j; O5 Z' ~8 Y if (nSrc == nDestPos), H- }: f" v4 G$ @5 A: d& F
{4 ^5 J6 x- Q! r0 V+ I6 I' K
//原地不动1 M# y( s1 y' s7 P. f/ L' K
nDestPos++; ~8 e, y. ~' e
continue;
/ y: q! P3 N1 A3 S0 G! I: ` }
' L! _3 K& n5 r5 | pInvSort->MoveItem(i,nDestPos);
@' j/ J7 y& W. H, P8 k/ V+ N g_DPlay.SendMoveItem(0,nSrc,nDestPos);
- t4 `! u- d5 u" Q3 _8 }/ r Sleep(5);8 B! Y! w G& S2 [
//Error("移动 - %d->%d",nSrc,nDestPos);% R& K6 q0 I9 }3 f; K
nDestPos++;
# C3 A, t1 ?$ F c( K8 h }$ G" A* b% ~% [" j: B, k ?8 L
//取第一个元素的信息" K {6 ~ l% p7 v, }% @
/*
; ^ }$ Q4 a$ d7 x. j7 W if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)5 m4 i" V6 f3 }5 X5 m
{
' p e; Y( f# Y# B& n9 L9 p8 b Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
( w: O+ E& N, N% A6 Y- g7 b: k \3 { g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
V X1 F( M! p5 \ }
& i! ?! `9 b. T' ^- X# P */. h+ x/ Y0 `3 p8 h+ K4 V( t
//////////////////////////////////////////////////////////////////////////& v4 A& H3 S' U e* n
break;
/ l1 V% V4 n1 | }% D" \; g8 K6 K) w5 a) k+ v
}
+ k7 L# ]' I9 F( {0 s+ C. F( g9 t- t5 Q}' ]' @: f+ ^! T2 J& F4 `% |; D( Y
m_wndMenu.SetVisible(FALSE);1 y$ |8 b6 w" u% ^1 s- L$ t7 T+ @
! v! n- }1 b$ C4 i4 q$ E
--------------------------------------------------------------------------------------------------------- g' X6 j. T: V- f T' p
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
( X+ W" e% B& W" l{, S0 h: r1 y; K$ |' u
BaseMouseCursor();
+ F- H8 j" s3 R% s; x}
# S; d; {6 J- z- p# B% t在其下添加: R( o- l( W U) U( W( K
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
* O! j0 o ~2 h- p( z{
7 q! {' V9 [# h+ d7 jm_wndMenu.DeleteAllMenu();, y' V( b: Z% u. A0 M, c! u8 \
m_wndMenu.CreateMenu(this);6 G( y. z0 Q0 P. P, w" _
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
. t& Q# y8 R# ~/ P# D( D# R2 p2 b3 k# m, [+ K2 N
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
& F7 s/ `' b/ G1 @; E) w{; A! w2 `! [9 p t. }1 x. O% l
//P以上级别才可以删除所有道具2 R/ |3 W- R" l1 e8 j
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
B2 r8 d7 d% L" l}* Y4 t% N' L& X: \- p
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );6 N1 Q7 y, d" \4 | P. v' n8 ]4 j$ z
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );; W& q/ |5 k5 k" s
m_wndMenu.SetFocus();
' Q8 Z, e; Y- f5 d}
- X) W6 L) F' s! u; k* x' x------------------------------------------------------------------------------------------------------------
( g+ X6 T6 V3 H1 Y/ O% {*************************6 B& H2 E4 Z: _6 v) B8 Y, M0 ^ J
WndField.h文件% K& f6 b; G! L0 S* C1 ?
*************************7 x! G1 l& T% S* l! S V; v* |" a
搜索:BOOL m_bReport;
- v3 L) L( K, N7 r/ w其后添加:
6 L% B' \7 i( iCWndMenu m_wndMenu;
# C0 Y8 d/ S7 ?5 h; ^搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);/ \; k: E8 x% o. Q J
其后添加:
' y; D. P; u9 fvirtual void OnRButtonUp(UINT nFlags, CPoint point);
3 g h/ c. c* N
; d: L: O _" u% x/ a9 d+ L! v& R5 {7 i$ N( b! K
|
|