|
|
源文件中_Interface文件夹下WndField.cpp文件' O/ b9 V1 e8 D5 |) v8 V% I
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
: q/ Y7 T; V6 Z0 T+ P4 F" w6 F- `# d; ]0 o" L. Q/ P) A! {
struct sItem
6 z( H/ |! O, l S{
9 {7 r( J; c( X/ N0 I( ~DWORD dwId;0 v2 S+ s& `" [0 c% g& l4 C# b( H
DWORD dwKind2;( H9 e8 u! ]8 ~0 W* c! e# Q
DWORD dwItemId;
4 y: l2 B# g; H& X4 K$ H( g4 bBYTE nIndex;
% q9 Z' C3 U% G Y, Z. p8 {/ ysItem(){9 U! I; j% u( j7 Q
dwId = dwKind2 = dwItemId = nIndex = 0;
; T( w2 B0 @2 \}$ B7 H/ I6 w; Q) k
bool operator < (const sItem p2)* K7 H6 @, C E
{" _: U3 ?5 D- K( E7 U' H
if (dwKind2 == p2.dwKind2)
6 `- ?# O0 r4 n9 \4 q" h" V {6 i% i6 q0 K: H3 K) j
return dwItemId < p2.dwItemId;
9 E/ [5 p( R, i* \# t3 f }else{
, c0 h: y( C; B! v+ P$ D+ M* e return dwKind2 < p2.dwKind2;
% Y) t. B/ [& E) ]1 S }/ p) l# D, o6 t6 @3 G7 e0 D' C
}% v3 `! R. X& V8 F: J. l6 B
};
7 Y: ~2 k' i( @9 E4 I+ J/ Zclass CInventorySort
0 C4 M: m) m' |8 f" e& W8 W* H* m1 R{+ B* S0 m/ v# l& V8 l
public:, P u8 w1 `; U& f
CInventorySort()$ A! V6 \, ?/ K8 R" n$ i
{; x. N2 R5 T$ c% |- i' }$ {& V4 t
m_dwPos = 0;5 r4 q8 u9 P" z, q* U
}4 V& q/ ^5 p+ r( `
~CInventorySort(){}
: {$ N, o3 ]" K c/ e# x0 g! Oprivate:( s1 [" p) c6 }
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息2 x- o( H0 O7 ]2 g! K& Y
DWORD m_dwPos;
% j+ y. G& L" A7 ^6 Y$ w8 _( X0 fpublic:* c* z( A4 ?3 s' B. ~
void Add(BYTE nIndex)
* z/ v( S4 l, `/ N: z' |{
/ v1 f" ]5 k; d2 C, i1 }) O6 ] if (m_dwPos >= MAX_INVENTORY)
' S0 S: t/ P/ F9 c1 a {
0 o4 Y, c) ~7 s# b: { return;
; m) w( ~- w3 i- R2 W$ t" d$ ?9 a }
; F) H" g1 \% o: @3 P. A1 \ m_Item[m_dwPos].nIndex = nIndex;, t+ S2 W, M1 l; C
m_Item[m_dwPos].dwId = m_dwPos;- n- t+ Z' u* X) U# I& M, B) O' Y
m_dwPos++; T' a! z, `4 o4 l
}) L/ o3 G5 q- v6 v+ U. g% W
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
! m$ P. H' {1 s/ B, \5 n5 g/ x; [{
9 g% z2 |0 k* V for (int i=0;i<MAX_INVENTORY;i++)8 @0 I$ d1 n) {4 U! a
{
8 k! [3 ^* q6 b% d$ p8 g2 i if (m_Item.dwId == dwId) G B4 X+ l5 c8 T) f' f
{% d; C) X/ B. g U; N
return m_Item.nIndex;
3 J4 r& i. W: r( ]$ z! {/ z }
6 ?7 O: n8 }; n/ @- N* b }
7 G6 L* ?- L+ v$ U1 f; ` return 255;
$ w, u) P- m7 H, ?( \' p) @: {/ B0 g}
2 l5 \! @" {, g% V' \8 Mvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
6 s2 ?5 ^" ?3 p8 o o3 |* X; a{
- X# V9 d# o# F) x; [9 \* U BYTE nTmp = 0;2 y9 R4 G9 P' n3 O
bool bDest = false,bSrc = false;
2 v: x) Y, N. {' { for (int i=0;i<MAX_INVENTORY;i++); Y! G3 @1 f! [; X& @" x
{5 w1 ~; l4 X" w4 K8 X+ \7 R
if (dwSrcId == m_Item.dwId)
( {4 Z- s' V6 e2 [6 c {
: b; x2 B" R7 a/ K( Y) L //id相等 则 改变对应的dest和src
6 p% s/ }, m8 G7 v6 A nTmp = m_Item.nIndex;1 M; N& g y! i' W$ g
m_Item.nIndex = dest;
9 P. _& {. ^! u* P, y, K9 V( R! c6 B% l }
0 J1 b$ i7 m0 @: {( f/ u* K N }
9 t9 `# h- f# o; x //临时数据保存完毕,交换开始! d0 M8 C3 ~. ~, g s
for (int i=0;i<MAX_INVENTORY;i++)3 e* C+ X+ ~8 B
{
6 ~6 a$ o3 \! [7 L0 \ if (dest == m_Item.nIndex)
& d2 P, @$ N, I8 E, x- e2 o) b4 J {' \" Y+ F0 F! K0 @6 @
//id相等 则 改变对应的dest和src
. N2 b* Y" V4 i4 E: F O m_Item.nIndex = nTmp;
6 B. @- c, `+ {/ Q% h( A0 C }2 |. W4 _2 Y c! w$ K6 }
}
# B7 A6 v1 z6 y5 b. S! p}. Q1 J- [, D+ W4 a: Q( J; m" p7 c
};. w( a4 [& ~2 C2 M
-------------------------------------------------------------------------
( O! r! X& B* K+ A4 y/ k0 x* P1 p& q依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )$ {2 o5 Y% l! M3 ]
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
' b: f3 ?. _/ E紧靠其上添加:
8 t* V& O8 I) y1 d" rif( pWndBase == &m_wndMenu )) M3 o! K& A5 H( ]- _$ l& I8 }
{
4 g7 D- Z1 a0 l* f# E$ I switch( nID )5 P1 }% M: _; @0 U. f0 ~& r
{( `9 a( L% ?4 _# B8 Q% E4 [
case 2:
6 k% |+ }8 G' X5 r' I. z& g8 i' W6 g {8 A, w. \: T, D4 J
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
$ Y+ A$ h' R8 C* n if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
! l7 _. j- S1 ~4 y( f {
v& N/ E n/ m( x& S: U break;
8 _+ b8 J1 D# x+ v" ~6 e/ r2 y: E& w }1 m, O* j8 _6 O/ F7 K
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)( H3 v; N; {/ o
{" ^* A: \2 N$ K* ^* V$ r5 o
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
^! B& q0 x0 ] if( !pItemElem )6 f& l6 C3 M; s& z U; I ^
continue;
. G. x% h* d3 J if(pItemElem->GetExtra() > 0)& e- {2 F! O8 i4 h/ D
continue;
$ J3 E) ]: z! u. x7 u6 x if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 6 D; X- Q6 e0 ^ T" y) U
continue;
" H0 w7 j+ Z3 G @5 Z if( g_pPlayer->IsUsing( pItemElem ) )
. t" ~3 V7 T; k! U- m continue;8 ~ m( G: N; Q
if( pItemElem->IsUndestructable() == TRUE )
+ q) q! U# P# w) k {
" I+ r2 K J/ Y3 r8 p* G# m$ b g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );2 C2 N/ Q# h0 h8 B$ d. W' k
continue;, F/ I, F( w7 \) p8 B2 Y
}8 d. T1 o( P! C
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
# c1 I& O6 N, s }$ g, { ?# G; |
break;
$ A, E, z/ P9 V5 y3 B+ [& E }# ?) F$ c& S/ z. t8 ^" i7 i( X
case 1:7 D6 u$ Z* G1 q/ E3 A) p& V, n
{. E7 J- Q) }5 N0 c8 ~5 E
//整理背包5 [$ Y# \- R4 e9 N: I
//////////////////////////////////////////////////////////////////////////
1 b+ F2 c! v _9 ?% e. V //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );2 n& v. m) x# h% l
//////////////////////////////////////////////////////////////////////////' Q* g. i+ S& x; r9 D* t
/////////////////////////////////////////////////////////////////////////// ^, G9 \7 H! }/ Q' }9 z
CInventorySort* pInvSort = new CInventorySort;
; C4 g: Y/ G/ E6 K6 t5 N7 G0 O$ [ vector <sItem> vItem;: R; B/ `4 b* i( h
vItem.resize(MAX_INVENTORY);//初始化大小& [) z |3 F4 @ z% K9 z: o8 F
//////////////////////////////////////////////////////////////////////////' Y$ Z1 ~, [, C7 X% v
//填充数据/ T' B {/ h& [9 ?
for (int i=0;i<MAX_INVENTORY;i++)3 x3 q d6 o2 A' j5 @
{
+ I+ H, r4 `& K( H9 N0 e CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);" F; r; j* D- A
if (!pItemElem)' e4 \& O' Q6 ^" T' x( Q4 n
{
1 k) o& ]8 d2 X vItem.dwKind2 = 0xffffffff;! P P8 _8 G+ E9 x# P
vItem.dwItemId = 0xffffffff;
1 Z' b# z7 j: W" m, Q- F* ^$ o vItem.nIndex = i;5 O, g4 L* R0 N& b- j
}else {
, q- U) j7 r. L4 m) ^) V ItemProp* pProp = pItemElem->GetProp();- e8 e8 B2 \. N" s( r6 T% O: O2 G
vItem.dwKind2 = pProp->dwItemKind2;
6 {( L6 X* P5 I O vItem.dwItemId = pItemElem->m_dwItemId;
. U" ]$ q8 q/ b: C, d2 Y vItem.nIndex = i;, J! Q( V6 K4 @" O1 p+ b: ^
}
' J+ M# P8 e4 Y; @ //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);7 q# k g! u" \! ^5 h) U9 T8 X
}
0 A, b) Q% U% s/ d$ N- k. |; | //////////////////////////////////////////////////////////////////////////" h/ m9 l6 |( G% g
sort(vItem.begin(),vItem.end());//排序 c B) I7 w" V7 q0 H) u! R
//////////////////////////////////////////////////////////////////////////, }& Z3 N6 x( \: a! w: o. |* q0 k9 h9 v
//交换
5 a3 I# @' Y6 O) e. Q2 m# J for (size_t i=0;i<vItem.size();i++)
f. {' [0 A a! s, }6 K" n {
/ y* P" R3 _) f/ i$ w //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
7 w* Z7 t* g& W$ J. c3 O# R pInvSort->Add(vItem.nIndex);% ?# N% ]8 O2 B4 _7 I
}- S* n# @9 s2 F$ [ ]# e
BYTE nDestPos = 0;, e! H/ t2 a) Z! U' p7 a4 z$ y" n
for (int i=0;i<MAX_INVENTORY;i++)
& X# |4 W: i/ e( D4 Y4 [ {
, O1 _# n5 ?( H9 P% Z5 ]" u CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);, W$ ~; L' l; ?0 S3 K9 \$ h* ^+ J
if (pItemElem). q/ b, ?- ^! c+ E# ~: \4 O- M2 x
{
+ K. ?! H: D, `' I0 r. j if (IsUsingItem(pItemElem))
& [: Z: m' t+ T/ a' Z {1 J5 B6 I e1 n2 \7 w! C4 r, M. U
//这个位置无法放
6 m* O0 Z$ K a5 p nDestPos++;
% t- u6 t! ~# A! g3 W o" I }: T. S( s! S: S! D g: [
}
1 c+ l+ l6 q; } g; z% l( k BYTE nSrc = pInvSort->GetItemSrc(i);; Z- b. j9 K6 t
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);3 U4 \3 K9 {8 R+ V8 m
if (pItemElem). `) l5 l9 k/ {& L! }
{1 ]7 m# P, z0 V3 R4 z6 ]* n
if (IsUsingItem(pItemElem))
: ^( [) T4 d& c% y7 Z {5 a# g- l4 V( [, o p3 o* P' P
//这个道具无法移动,跳过
2 e `0 M/ z; ~! N' R2 _. \3 }: j continue;
. j& h4 `. B. {" j9 y4 ^ }- C# g- t# U2 R a! c
}else{
' {; w; g2 v# `. ] \ //空位置 不用动2 s2 W% k, F7 \, h* ]" D4 K! M- I0 z
continue;
( v$ Y _. S ?( W6 R3 s }9 s# M+ c* N. |% z+ `) X0 V* U
//////////////////////////////////////////////////////////////////////////
. v2 N/ o! p+ x. l$ r //开始移动$ u! G/ g! x$ }, X. u5 K) ~
if (nSrc == nDestPos)' Q5 K: g4 \' R+ @0 \+ C& S
{( S D9 `$ O1 m" W6 K2 X
//原地不动
6 R2 w/ }/ p3 |$ \7 H nDestPos++;( T: f" P3 Z# D Q7 b1 g/ y
continue; K/ @; O" H" [* |# l4 y; W% @# M
}" {/ W$ `1 n" L& R2 Y
pInvSort->MoveItem(i,nDestPos);
; ?; D( {2 |) H5 O/ K g_DPlay.SendMoveItem(0,nSrc,nDestPos);1 h# w( `7 ^+ K: U( n2 F
Sleep(5);
A8 @. ]; T: n/ s# K1 Y7 S8 \ //Error("移动 - %d->%d",nSrc,nDestPos);
9 G$ b$ Z1 L9 [& r nDestPos++;
( b; F C7 \; S- l }) ]& Y I8 f* F' B; ~+ \7 g
//取第一个元素的信息
/ s2 S- x1 z0 h% U4 l1 {- ]+ b /*
$ k9 Y' ^6 |# ` if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
: O4 U w4 M ~, R; W {
* t& I1 a" o8 Q Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
1 D) z& g. W% I" e g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
! H. [5 U! r0 E% r* ]1 U3 Q, g% S7 n }8 r# b4 u4 k E% l. F/ [0 i
*/6 x$ M' [5 t4 r/ ]
//////////////////////////////////////////////////////////////////////////
& m1 W- X3 e$ J break;
: c1 \" y4 S( B- ` }
5 p# X3 G7 D8 R& q9 K } 6 k {9 a6 w, T; D( m) E
}, X, W& u* v: C: ~+ ^/ i- @5 e! b
m_wndMenu.SetVisible(FALSE);
, @2 P4 x* G' y5 n2 d& l# m
' {7 r: t1 f8 H7 }# ]6 Q* g9 u--------------------------------------------------------------------------------------------------------' W# g6 `7 M1 ^! f; T* g1 K
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
% z: }8 b% f( Z2 u+ u{. ?" l- ~$ ~, b3 l+ ]& i+ L; A# F. R% b
BaseMouseCursor();
0 Z. ^. l+ S7 c6 n1 L* ^/ N1 A/ U+ U}
' k: G9 s Z& `在其下添加:
# J( r" g7 J5 }5 y. |9 xvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)* f: x' j2 L: @
{
8 f& B# T' K4 \" P8 p7 ?& Vm_wndMenu.DeleteAllMenu();! }& ^; ?- t( I4 D$ B! V+ d
m_wndMenu.CreateMenu(this);1 G" H! B* Q9 T3 |( t- W, ^6 N# | x0 C
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
/ b% J: ~4 p, c- d$ Q* M
. ~; m$ Y' j& ?9 v Q+ ?% L! Yif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
f& o" {* G# ~# ~{, S6 o: U- r" V: ~/ l, s2 i
//P以上级别才可以删除所有道具8 I8 p: A1 A% V8 P
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
: V" i0 p% ^' p/ R/ _}
0 s9 [7 [# e! F- N& R' im_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
, T* x8 i3 e) c* y k+ _m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
4 u4 O- u1 A8 T7 W0 J8 X) [; im_wndMenu.SetFocus();
+ ~4 c5 {# y7 s; z& z' g2 C t}
, L2 [% a2 _/ h6 |------------------------------------------------------------------------------------------------------------
7 x$ H9 a# k7 V* ~*************************
/ O/ }" o5 K4 O& H) Q& }$ MWndField.h文件; _. |' @2 @, y7 @8 K( C
*************************+ c& X" B9 v X6 A8 ~0 @( o8 J
搜索:BOOL m_bReport;
. ]+ v( l: q3 q1 u7 k6 T其后添加:
( q4 R2 E: B# S# rCWndMenu m_wndMenu;
, _( @( X6 L1 M8 P* t" I0 W搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);4 w: n9 H; H8 A% \8 ^' x
其后添加:& x# G, K1 Y! r Q9 |6 P
virtual void OnRButtonUp(UINT nFlags, CPoint point);4 P o- i, b9 ^
' w, a' P4 E" L; I* l. r# ]
/ c4 H( U* W+ x6 O5 I2 h4 s |
|