|
|
源文件中_Interface文件夹下WndField.cpp文件4 _: |: Y8 z0 E
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
) l+ d, R* m t4 t5 E6 m+ q# L Y! `9 L: u" C; W9 F0 o
struct sItem
6 m' v+ t$ p2 R$ T5 T6 x{$ @ V x; t+ ]. k$ v. a
DWORD dwId;
/ _; C* |$ z+ K* X% W: P2 W( qDWORD dwKind2;5 _; o7 J8 R/ p0 K( ~% Z \
DWORD dwItemId;
5 [5 @$ C" y0 {( E' p# o3 yBYTE nIndex;# C: c! e; R- g& A. x
sItem(){
$ |! B+ m {" @- R dwId = dwKind2 = dwItemId = nIndex = 0;
! _- T n* }! P) k}3 f1 Q. y8 f/ r. K
bool operator < (const sItem p2)
4 c& x( r8 E; p/ S{
5 Z h$ z' v# @$ f0 c/ g6 ~ if (dwKind2 == p2.dwKind2), q# `3 }# f& l0 j1 ^
{; D6 C3 r$ u4 m
return dwItemId < p2.dwItemId;1 d0 k. y/ l5 U! a8 |
}else{8 W: J! x% `. L% ]2 m) J
return dwKind2 < p2.dwKind2;
# {7 u- v, m! [' V0 o4 [ }
* P. C, j8 z p* X; ]8 j9 K3 X4 Q}
2 T4 c$ E& m, }* W};
' Z9 J1 U! {) y9 f- U; j' eclass CInventorySort
`$ d* z: v! l+ W _- B{
& S+ ~! o1 }5 M- t' Rpublic:; ]5 |) Z& n- F% c3 A7 g/ D4 N
CInventorySort()
9 z6 B6 K# `6 S; P{
* q! r% R# u* Z( s# Z m_dwPos = 0;
4 @ {% H8 K! c4 _* {5 v" q5 C) h}- j3 N: m: `# q# W
~CInventorySort(){}6 [. e+ z6 k5 O& z7 ^; p# ~
private:; Y" t& N: W E$ Y- w
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息9 M/ l7 p$ o3 Z2 p4 g$ I3 e/ y9 C
DWORD m_dwPos;
1 X# K7 x# S/ {; o: Q/ zpublic:' a2 X: e# E) v0 o
void Add(BYTE nIndex)
* f! W, z" V4 R, ^3 z2 R, o{
7 f5 Y1 B. U; Q( K9 \- o: w5 h if (m_dwPos >= MAX_INVENTORY), a4 ^9 y0 ?% E0 u6 F- K# e
{
/ w$ A0 {! b1 n- J: A return;
* n: l: E- l* K4 w" d; b }/ c: G9 F9 ]3 @# r6 K) Z- X
m_Item[m_dwPos].nIndex = nIndex;4 ?1 z) R6 r7 Z9 s5 x4 p
m_Item[m_dwPos].dwId = m_dwPos;: x5 r1 }9 I+ m) i
m_dwPos++;
4 E6 V9 I7 ?6 n s$ \! g}
# U! C- n/ n ]2 D& ?% g- t" KBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列 V& x, o0 U S4 }* G
{
% p( x3 R8 n5 {5 b: ]( A for (int i=0;i<MAX_INVENTORY;i++)
! z* D {# r9 @: w. n {1 v! U' R- `1 [ v+ M
if (m_Item.dwId == dwId)1 v& r' \: \3 d4 U6 b
{
. G8 t8 ?$ ^1 O( ]/ R- ] return m_Item.nIndex;
: P! w! t3 e( P8 q# F, a# t }
. k- K9 }, w3 _% s/ J4 f: r }% q' D! D+ e; t/ D. L$ v
return 255;: {9 ~) ^: R0 c5 q X
}
9 y; p: Z! d' {' t* U9 C- nvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
2 r1 e ~- U, o$ }{
% p( B1 `! w5 \" c BYTE nTmp = 0;; L# S; H/ i3 c3 Z/ |
bool bDest = false,bSrc = false;
4 |. P! _4 W5 t. Z for (int i=0;i<MAX_INVENTORY;i++)
; S; y, {+ P# u' S3 X, } {
! i* M3 ^; I* L" j% K7 V5 x if (dwSrcId == m_Item.dwId)$ N# A) f, ~- _# ]1 a
{
7 w" l/ h* i; y/ u% W& A //id相等 则 改变对应的dest和src; n1 Y3 r) g' T; f# o
nTmp = m_Item.nIndex;
; {7 y+ _* \) o m_Item.nIndex = dest;
# i& C! {) K* c. b. j1 L V }
4 d( }* C/ Q6 d) q9 q5 K' o }
' ]' ], f9 P* |1 m! {) ^& w //临时数据保存完毕,交换开始
( k& u! E# T& d8 r ~ for (int i=0;i<MAX_INVENTORY;i++)
, h3 L% S, [* s- T* } {
/ Q% M5 f1 F- N' u; N if (dest == m_Item.nIndex)
z0 R: \0 L4 N6 {: f) T! b, W {& V, M3 _* P* E- o; l
//id相等 则 改变对应的dest和src
$ f- W7 e$ C0 O6 e$ ] m_Item.nIndex = nTmp;/ X, G, z) R! I' h; w
}8 a2 \/ b+ Q5 g @; B2 Y
}) l3 W: y. E9 g) V3 `
}
" Z9 S" M+ T- k};9 v* P+ A! J, Z$ F2 B
-------------------------------------------------------------------------
. |4 ^- k: P2 V ?/ |依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
$ s2 n/ l) s& D$ x) Q搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);5 Z, \: Q7 L: O9 T+ Q
紧靠其上添加:) T7 {* C, }: ~% u! a1 O2 m
if( pWndBase == &m_wndMenu )
; r( r& C5 {* G; H2 J$ X{
* c- o( ~- Q M switch( nID )
2 i5 l' H& j4 F2 H3 V4 @" T, d7 @ {5 p$ I- ~' w4 L: D9 b
case 2:- Z. R! \% x5 [( M7 G/ Z) Z
{" Z$ M2 H. j/ J3 V/ H
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);- y5 J2 p% l. f" }
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)), ~. X5 {' ^6 ~
{
$ P% W& n- }! `8 Z0 Y6 j$ X% i9 H break;8 [9 [/ J2 u `
}
- p. w& P9 g L# n# M0 A7 O for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
8 y2 _7 }3 e+ W' G: I; E; b5 O! p5 t {
$ X2 W/ ^ j4 ]' ?) u8 _" a CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);2 x4 @3 F3 [5 y. g
if( !pItemElem )! y5 ~3 ]8 p+ F) y- m* |$ ]
continue;
/ X. f( V- P8 l if(pItemElem->GetExtra() > 0)
|) N! A M# I8 \ continue;, i: D3 o$ ~) R+ p5 v3 g, G
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 0 D, ^. S" Q! p/ N3 I( d+ A/ b* A
continue;! j; y) x+ R- Y. ~+ B
if( g_pPlayer->IsUsing( pItemElem ) )
7 V0 Y$ M/ j4 g* U0 j continue;/ } ~" g4 g; y; y
if( pItemElem->IsUndestructable() == TRUE ) ~2 `- Z' M+ q, x' f
{8 [) ?/ `# |+ M: Z
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );3 r1 I' Q6 ^0 N7 B6 [* X6 u! q
continue;
1 }" O0 R# @' o7 U0 b/ {- O, L, M7 r }1 `+ b( n f. ^ [
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);. u3 r" c- C9 h3 c1 F
}
/ U. l0 d- U: H* x6 j6 |, F+ g& y break;3 T9 j! Y) z! E. o" o
}+ n' S4 U( H. G: a" P4 f7 A& y
case 1:
, ^# M. }5 A1 V1 K6 q. R {
( _) W$ a6 X# s t0 g" [) F/ ^ //整理背包9 \$ _! l6 ~5 Z- f" Q
//////////////////////////////////////////////////////////////////////////- H$ {! u' Z! L- y4 J* @
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
: Y; G" P' L8 g; h //////////////////////////////////////////////////////////////////////////
) c; |& h8 i5 L4 M) F# P' T //////////////////////////////////////////////////////////////////////////
* U$ U4 m0 \9 s CInventorySort* pInvSort = new CInventorySort;
: A1 B& I" R% q3 E vector <sItem> vItem;
5 E; `$ C; B7 s+ s vItem.resize(MAX_INVENTORY);//初始化大小
* W. B( K* m5 u& o1 W% @ //////////////////////////////////////////////////////////////////////////* n& B( @9 u+ I. ^8 n6 R% `1 S" X3 S
//填充数据8 S3 ^5 P$ x3 ^; g0 |- t
for (int i=0;i<MAX_INVENTORY;i++)6 {3 }- Z" h; ?
{; @ z& b4 h. {& c$ V6 l% `' `" E
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
" f) u, Z p1 i+ e# r2 Y if (!pItemElem)
% n4 K5 e4 e: s& i {6 {# W0 H% y- [& `$ F! R) [
vItem.dwKind2 = 0xffffffff;
/ h5 t6 e# J; D# y" I2 i vItem.dwItemId = 0xffffffff;
* Q8 c8 [$ f" C8 F, ` vItem.nIndex = i;% B s, m* @3 X9 p% s
}else {4 O. Q7 S& f/ S
ItemProp* pProp = pItemElem->GetProp();
3 D. X6 o+ Q" G; m3 ` vItem.dwKind2 = pProp->dwItemKind2;, A: K$ D7 R r/ g' m" A
vItem.dwItemId = pItemElem->m_dwItemId;# ^5 J3 r: W4 v/ h" W. X5 K
vItem.nIndex = i;' t4 D0 k/ W/ y, {. f
}
4 q2 Q% m; b F# i5 B5 o8 f! y/ Y //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
) c% B( {6 G" O3 ~. C }
7 p- [# Y7 e$ z, K- B* | //////////////////////////////////////////////////////////////////////////3 V* l( x# Q7 R' ?2 x$ B) P
sort(vItem.begin(),vItem.end());//排序
1 `' H7 d8 c" G, g$ h2 S. ` //////////////////////////////////////////////////////////////////////////6 `! s5 U2 V7 x
//交换
X0 k, l% C) b for (size_t i=0;i<vItem.size();i++)
9 o' g8 q& E4 c1 D4 j {8 @: E' \7 p7 d3 L
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
8 v" s8 ~& U1 u [ pInvSort->Add(vItem.nIndex);
7 u1 H' s; e/ `' W6 T/ W% T5 T p }
& k* U% r, g9 x BYTE nDestPos = 0;
2 |$ b+ F7 n* B( v' Z F for (int i=0;i<MAX_INVENTORY;i++), V5 W. W; _1 a+ Q
{
9 x8 j- K; K$ r2 e CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
6 i, C7 i- P2 _) q' n! V if (pItemElem)
, Z& Y$ D& d& D( Q' L6 @! G {
: ]- Q1 k' W1 q1 z; G, q+ X5 V if (IsUsingItem(pItemElem))
) U2 v. o6 P9 n* D7 C+ l# r6 X; m {
! f8 j. E/ Y, j$ ^. ^% F, s //这个位置无法放$ ? Z' N0 s; W9 f- F
nDestPos++;/ {) V0 ^# i1 t+ Q% v: x
}
6 D9 W& {' h% N( ^- A }) Q, k1 b" W0 l, y7 t3 W
BYTE nSrc = pInvSort->GetItemSrc(i);0 O3 y! Z/ F( {0 U( ?6 o% K2 ~
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
% [; ]7 B- f! A4 z if (pItemElem)
) x# q9 ^1 g9 o* q {
. z/ g& Z$ P$ L2 K" _/ v- r+ K if (IsUsingItem(pItemElem))4 s( o& B3 t/ n
{
. b% J4 i; k# E) S; b( h //这个道具无法移动,跳过
- b" i+ q: x; Y* h' C/ m8 E( r continue;
. w2 F3 u+ K1 a }0 X9 q) y, x9 u# G9 b- v) ?# r
}else{
* o4 E$ P' i3 L/ b //空位置 不用动3 U7 p5 U9 x6 F4 W' t7 R7 N% `4 q- u
continue;- f e5 Y4 L0 q' [+ V( b
}9 f N l: N! j! a) ?
//////////////////////////////////////////////////////////////////////////
2 Q, t9 Q8 w' y4 \. x //开始移动 F; ]: V: q8 A$ [- Q
if (nSrc == nDestPos)
$ w4 m4 x4 K4 J4 X8 { {
1 x% l# X! _0 |. ?2 p( Q: ?% c //原地不动1 B5 d6 T) x/ S
nDestPos++;
% H" o5 R7 }) ?! ^$ ^0 Q continue;5 A, c& [" N7 E8 ]* g$ |0 @
}$ J! f+ q% Y; `+ c
pInvSort->MoveItem(i,nDestPos);) D# n! C: e. t* j
g_DPlay.SendMoveItem(0,nSrc,nDestPos);2 P- X, A. n/ w
Sleep(5);
( s" I- p3 l) U9 e4 ^8 S- I2 g //Error("移动 - %d->%d",nSrc,nDestPos);4 g; _; R+ t0 R6 q3 Z
nDestPos++;
4 E. l2 c/ S) w) E! T& y7 W6 B }
$ S& r8 @" g- d4 o- b9 @ //取第一个元素的信息9 |% I1 x9 H# W6 @9 J9 ]
/*
( W o( m" K3 ^# i* S* r if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
( ]( a) @: s4 w/ \ {3 t$ x. m$ L/ e4 W
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
& T! G& c9 @6 a( D t7 l! m: j4 G g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
6 B2 f2 T. H4 T [* s+ y- Q }6 B/ h- D, @5 C* |: m. c
*/
3 n. W$ h" Q) z# O9 T //////////////////////////////////////////////////////////////////////////$ H6 S7 X- o3 e$ G4 X
break;5 ?$ Z. i4 S9 I
}
* m: U. w+ ^$ ~! V4 T } - T$ r+ J2 _; x9 j5 x- ?
}" a' {0 o- n/ e0 T6 y. q/ p4 L
m_wndMenu.SetVisible(FALSE);
7 d z- {9 |& d! Z2 R0 I( R" h( I$ B6 c0 c
--------------------------------------------------------------------------------------------------------
+ f0 m2 E# T) J% F搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)5 A8 E" O& P2 @
{
# s" C! F. e' D+ R5 YBaseMouseCursor();4 M6 t- d- j! T2 x5 a6 f% f* @
}- [; _/ K2 y% ~- S! e
在其下添加:4 f N+ S" q+ o$ q+ a
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)7 f Y1 H5 T1 O! b8 J+ L
{' j& @5 ^. ~6 }% }. X0 }0 ?
m_wndMenu.DeleteAllMenu();; G0 L+ H% P8 J3 u
m_wndMenu.CreateMenu(this);
{9 n, P& k! mm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
' Q: r7 q5 C2 @0 q3 j) e4 Y
; I+ \" I) M9 C$ q: ^0 lif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)), s, J. R6 Q: O+ o. O& k' |( j
{
% F$ n( l+ N i* k( l; H //P以上级别才可以删除所有道具0 U' ~4 ?5 y* l2 K5 a
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
( n S$ B. W" S; Q0 [( u l}
% S& \* o$ \. B+ Sm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
7 u& z+ _0 y" R0 X, Wm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
; A: Q) ?2 `/ U! _9 W6 [5 cm_wndMenu.SetFocus();3 z% h9 V0 @% R' u2 d+ J, o0 y, v
}& x. V+ ~& j$ b' j, {! J
------------------------------------------------------------------------------------------------------------
9 P8 c2 d( I! h* H3 ?1 H0 n8 N& U: N*************************8 s& p U, R/ j9 |$ Q: _
WndField.h文件
+ U# ~8 M' _! J4 c1 }( \; V$ u, D# c*************************% ~5 L' S {) F
搜索:BOOL m_bReport;
; P! Z1 [' d& F% L0 M3 Y" v其后添加:
6 Y7 M. K& A) Z" t5 eCWndMenu m_wndMenu;! G/ ^8 t5 T8 B J+ {4 }+ ?6 V' C
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);# c2 U5 y% n! y+ ^
其后添加:
1 x4 j! d+ x) m. n2 z& j9 ^virtual void OnRButtonUp(UINT nFlags, CPoint point);% w- `1 Z: P: B- I
( d. m% K/ U) q2 ^
, J7 y: D' [7 N/ }( ]8 i
|
|