|
|
源文件中_Interface文件夹下WndField.cpp文件# |- z8 z8 d8 H1 Y9 w( E
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )& w$ q% L! c3 N" ^/ L5 f
- L; J' |# @ ~
struct sItem2 a6 ^+ N& n3 C; Z1 a6 \2 J+ z
{
f3 v3 _" P! H v6 D% `* ZDWORD dwId;! }2 R9 e! H9 Y2 O# n6 S& ~- L
DWORD dwKind2;. ~" b3 @! h/ H8 D
DWORD dwItemId;5 K; W! [) X! t' L
BYTE nIndex;+ L/ [3 F# h) M7 [9 z6 `# T5 o7 l
sItem(){
, _$ ^ @0 \6 |0 g' D0 n/ k9 ] dwId = dwKind2 = dwItemId = nIndex = 0;
* {& V1 _1 Z* j, A}, a! d6 V0 D( k6 ~) ^& h
bool operator < (const sItem p2)1 v$ p" j) p6 F7 n
{
: E" e; w/ s0 p- j6 m8 X; T if (dwKind2 == p2.dwKind2)6 O# a% V, y: g2 k
{
, K B+ e- g: M1 @3 \( T) [- i return dwItemId < p2.dwItemId;
; a; ~- H) P) D# F) V }else{
; f. I4 ^) ^( g3 B. l! u/ F. T; |6 S* h9 r& G return dwKind2 < p2.dwKind2;2 t) F4 \$ Q& S# k3 e
}* l4 C: j i4 v8 W
}
. K! f* d7 @% N2 o+ [9 f7 b};: n* D( x, }+ ]
class CInventorySort6 |( F& Q% y6 k |: l# H- U
{! d7 ^ i1 _' M7 @
public:& G: z& k; h5 i+ u8 }
CInventorySort()
9 Q. V% y1 F- x' L3 E/ [9 J0 M{
$ D) B6 z2 u0 J5 P( h7 a m_dwPos = 0;
# C. j7 ?8 }& [- W$ u+ h}( v- N+ q: J V- Q$ i: M" b/ L) b
~CInventorySort(){}! T* U6 p. L! @9 j9 ]# A9 n
private:9 h5 d. R1 @7 f9 p, I9 `* e
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息* p! e9 U9 L% B) |
DWORD m_dwPos;, i/ b: Z# J9 y- K/ p
public:
7 r: t: U. c/ o7 jvoid Add(BYTE nIndex)
) H1 h" ?3 {' T{6 O( c6 `* D4 j
if (m_dwPos >= MAX_INVENTORY), Y" t' S+ g, ^% S8 M3 z; L7 @; L
{
. ]/ L7 E8 \/ ~+ [8 j return;
, o4 U, b7 u9 K+ H5 F8 K }2 @5 X3 D5 P ^
m_Item[m_dwPos].nIndex = nIndex;- }0 G! E% v- {3 n9 Z8 R. I
m_Item[m_dwPos].dwId = m_dwPos;
; ^+ q$ H* y, D+ K; ` m_dwPos++;
. a. ~" O4 t. E' s0 q; j}
* Z( n0 K& ^5 j( m0 E0 ABYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
. i: v, V1 U+ f% M( I( f8 |: z7 }! c{2 D) l& D4 o L
for (int i=0;i<MAX_INVENTORY;i++)5 }4 Q4 ?( O' h3 G7 f0 [, ?% C6 ]/ Z
{
- d" H& m8 o. h T& e if (m_Item.dwId == dwId)* a$ s {! p2 E! ]! ^ E
{
" s* p+ T) v7 j, s return m_Item.nIndex;8 C5 L0 x( \+ g9 v( |( j% m' I( C9 }( o
}! V9 R0 Y* M1 @
}6 @5 ]& [7 B0 ?
return 255;$ \& o; A ^5 E9 j) f" j Q
}! }4 K- h3 E' A2 V6 x9 F
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置4 G4 K% w3 c4 d S( u) r4 g. r
{
* [3 m, e" U: x( R" X7 w BYTE nTmp = 0;, o8 C0 L {4 s% d; z! z9 R6 n
bool bDest = false,bSrc = false;4 x0 M% S! X- |7 n* y5 l
for (int i=0;i<MAX_INVENTORY;i++)
: F4 C$ N9 |6 ~ s6 j! n3 m {8 X+ X: B8 \; ]; _8 ~# n7 y2 j
if (dwSrcId == m_Item.dwId); ~( }5 U& d& K9 ]& [% m( d
{
* ]% E# L2 T7 a+ R# N //id相等 则 改变对应的dest和src
( q, H3 x5 K& _) b nTmp = m_Item.nIndex;
; O2 K% J- \! H1 Z- [ m_Item.nIndex = dest;/ d8 j4 Y/ R1 U4 k& R) c2 M5 ^( D/ n
}
; N( c8 W' `3 i! K4 D2 }. { }7 d6 i% o( b! }7 j; b) Q* P; D
//临时数据保存完毕,交换开始( [/ |8 t+ |! O2 E
for (int i=0;i<MAX_INVENTORY;i++)
0 z; t+ M# `' Z- W9 t. e4 ?2 V {
4 _" k* f; K4 E. E S* k* L9 a if (dest == m_Item.nIndex)
9 v5 m0 t9 Y3 C7 i! q/ c! x {5 H3 d) E3 R. z. p4 ?2 C% u/ u
//id相等 则 改变对应的dest和src1 G! _2 }( V0 K
m_Item.nIndex = nTmp;3 w" E* d4 t1 z& ?; A/ j
}
% b, ?% _4 w- r& I G6 w% U }2 P; F# O# |$ _! x( n7 Y* D
}
i3 s R% Q. g; e w7 L};" A; u! e0 _* ~3 v1 O3 r
-------------------------------------------------------------------------
( L$ T$ h4 n( |/ W! ~依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
( k2 I% F$ h9 J9 y- T搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
# e7 D; Q3 S. Z; p" d0 l6 w1 e紧靠其上添加:
2 Q( S0 M5 x/ h7 U) F$ Iif( pWndBase == &m_wndMenu )
# D1 g4 m- a+ c) T{
$ x9 A) k0 S- d1 @* J B switch( nID )% Z g( R2 |% _8 [
{
6 }) T+ }6 s% J0 {! g case 2:; @; M: R- c. I) _4 {1 X
{
9 |2 r# d% ^) P) b //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);4 F2 ^. v) m9 B: x3 \9 ?* t
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)), H$ z( R( K! P0 Z t8 M
{. H& e$ b/ h% i6 O3 Z/ Z
break;5 T5 x5 G- k" _2 `& ^: g) i" l2 B
}6 J z9 k. n7 p7 p" H) W
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
; R3 U1 x. D. y z! a {
/ z' @/ F4 w$ w5 A; [ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
0 ?) l" v1 s# g, T$ F' Z5 I if( !pItemElem )
: Y$ @6 E+ H2 T; w/ w6 q continue;
3 n' ]' W0 w" a V1 F if(pItemElem->GetExtra() > 0)3 g- h! R1 f1 N: i! D" h/ b
continue;3 |' x2 J! y' i3 G4 L* H
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) . G o; n) T9 W0 A" ^
continue;
3 X, s2 s3 Q5 S1 I" b% ? if( g_pPlayer->IsUsing( pItemElem ) )9 X- T' W% d) ?! Q7 Z$ \+ N2 c
continue;8 m d( w$ z' Q. A
if( pItemElem->IsUndestructable() == TRUE )) A" b6 M* L7 Q$ J1 r
{
3 }# L7 h1 ]- g5 ^' N( J X g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
s/ M p/ B+ L; ^8 }! u* Q continue;& w. r6 x% J# S1 f
}+ N3 M( [4 O8 b1 G9 m" K! W
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);: k' A1 m. ^; \5 b* z
}
' Q0 {) Q; S6 T4 Z3 R& Q' y break;' h6 q( B5 T7 d# C3 ?- G
}# o3 Y+ a) |6 |0 [3 o5 s1 p
case 1:
) I( w& }0 b% F0 X( Y {
$ c# E$ a3 M6 @5 O) Z9 s, d //整理背包: H- L! j- v; O
//////////////////////////////////////////////////////////////////////////" t; V; L a: X. } F0 F1 C
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
& `: J" ~7 X$ f4 B6 j //////////////////////////////////////////////////////////////////////////
$ Q; d$ i; l8 j7 i, E( q7 d //////////////////////////////////////////////////////////////////////////0 f1 w7 l0 e# x
CInventorySort* pInvSort = new CInventorySort;2 s8 U+ V) ?( D4 C$ l9 E
vector <sItem> vItem;
. }$ H+ A8 o% `0 R% t vItem.resize(MAX_INVENTORY);//初始化大小+ z% c6 a) C2 |4 f/ ^" n
//////////////////////////////////////////////////////////////////////////
4 I& l. C6 i& w, S3 a. ~ //填充数据) x) S+ n3 e8 F# v- N6 a
for (int i=0;i<MAX_INVENTORY;i++)
* n; X5 V. j, q: ]" l" J; m3 J {
: @. z7 R2 Z* v H& I CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);9 M6 P; C7 ?& c8 ]+ J- S
if (!pItemElem)
( C0 p: H* h' P' W& E* ]7 F {
$ W- M0 L+ _( \3 O vItem.dwKind2 = 0xffffffff;
/ D/ {" [+ X/ S" e3 N vItem.dwItemId = 0xffffffff;
8 t4 _( \1 }% J/ o/ N6 |- I vItem.nIndex = i; \% [# d& z7 Q; v
}else {
) X% Y8 B: h" S( o# X: `6 N- W2 k" L ItemProp* pProp = pItemElem->GetProp();
2 y5 [; {" {. F; V/ S7 _ vItem.dwKind2 = pProp->dwItemKind2;
6 h9 q% ?8 N4 q* N1 Z vItem.dwItemId = pItemElem->m_dwItemId;
1 v5 B4 w9 z$ x3 @$ h vItem.nIndex = i;
% j) B, |& r; i2 D" |+ W& L }
* C0 W2 t. ] v, {2 ]3 ?0 Q% q //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);& H% r( M3 j5 T4 l3 A5 u7 }' u
} a: N( f" L3 v+ ^, I/ B0 `
//////////////////////////////////////////////////////////////////////////% [; s% V* J6 u+ |
sort(vItem.begin(),vItem.end());//排序
" S8 x2 N5 A9 M5 [$ U# e! i; S //////////////////////////////////////////////////////////////////////////
) _/ ]9 B* @( E9 j. a# M" |* S //交换9 h% r- }9 `" x" U1 O- v; K
for (size_t i=0;i<vItem.size();i++)$ A6 A6 r6 r+ F2 a- P
{
7 h6 J6 R1 `. r) M //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);& o0 K. U. w4 ?
pInvSort->Add(vItem.nIndex);( ] r" H0 W1 p$ k) N1 @" `
}: Q$ w3 O! H! W7 T
BYTE nDestPos = 0;
% e3 T: b2 F) y& ~+ E% |8 v for (int i=0;i<MAX_INVENTORY;i++)! \% E+ k. D0 X4 m( P
{
. `! B/ H' m4 Y- G) e! V CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);/ W# V/ R f3 U* E, ?
if (pItemElem)
# ~, P% h% E" K9 e, j {
5 Z: A! e) r: h0 g if (IsUsingItem(pItemElem))
9 S3 }$ D; ?. V5 k! {9 \- z( Y {
, t9 g0 _1 X. O- J. |% u' n1 D //这个位置无法放
; ~# `6 a4 }# @) {9 E$ t nDestPos++;! r' b# k1 J0 M
}* A: ?( I- [, M9 Y
}$ I% {" O4 o8 N- x
BYTE nSrc = pInvSort->GetItemSrc(i);, `( d& m8 ?0 e9 g7 K x
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
0 e% n( v; ^# q0 Q7 Z T3 U- H if (pItemElem)
3 \6 [2 t- g* C- D5 o; S' V {
% [+ U: l+ H* q0 x8 p7 c5 ?9 S if (IsUsingItem(pItemElem))
; Q5 s! [2 d2 l2 s {
& v$ o1 t9 ~% L' J/ X, { //这个道具无法移动,跳过
' t3 v8 Z( c! ~. c' [ continue;. I, Y; e) Y E: O3 j$ |9 v
}7 ]& c# {" k" k0 E/ O
}else{
7 A7 s4 T2 A9 U8 D+ z# {6 g$ [7 |) M //空位置 不用动
. Z% m+ j, E, _; v# } I# h continue;+ y( R$ }# y( o( M A
}
6 k" y+ J/ b% A3 \* m8 A( O/ B5 N //////////////////////////////////////////////////////////////////////////
, ]/ R& l6 T8 o% ` D //开始移动 N* X0 H' L* F9 ?6 U! F' i+ P
if (nSrc == nDestPos)
0 ]5 d4 Z; H' |' B# n' \% ] {
3 z$ E# d6 t- i# M# v //原地不动
) e; ?5 j! G' h0 V' w nDestPos++;" L' l7 D! ?' B3 Q
continue;
5 J4 g, Q; q# V }
) x( {/ x7 H( i. ]0 ?4 ~0 W pInvSort->MoveItem(i,nDestPos);
" O; `1 E' z& L3 ?. g* p* I g_DPlay.SendMoveItem(0,nSrc,nDestPos);. b7 n4 H4 E' } z
Sleep(5);! V' M3 b5 ?3 }: \! Q3 o% q
//Error("移动 - %d->%d",nSrc,nDestPos);
9 u2 b: F% c% p3 W Y nDestPos++;7 w" {) F# O# P" Q, {2 ` ~
}
* ^! f. S: @1 l2 x+ F //取第一个元素的信息4 Q! T" T* W1 e# p8 t* E- h
/*
9 a* g! Z$ _1 w3 T5 [ if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
* i2 b4 d7 R$ V8 G9 m {- ?- ?$ `" H& T8 Y
Error("Move - From:%d,To:%d",vItem[0].nIndex,x); A' {) m, y+ o1 l6 T
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);+ N7 U" {3 F" ?6 o4 W; ]; N: X9 H
}2 d, ^: F' a& A( h8 ^9 B5 j8 H+ Z8 K
*/
1 ]3 B5 T4 v2 A% t, U& H% F ////////////////////////////////////////////////////////////////////////// b) _! C1 C0 D' R
break;
8 @* H$ ]+ M K+ q0 K t }
6 \: } D4 ^: p2 C { } 6 U+ j( x. S7 s* W* E0 _6 _
}
3 A3 E4 G1 d' k7 r4 X* I- Cm_wndMenu.SetVisible(FALSE);1 T4 j/ |& W9 Q
4 B+ `- r/ y' \6 @3 `--------------------------------------------------------------------------------------------------------
3 Z: N6 n2 o. ~- w搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)$ x u& O4 @5 O' |3 k
{! _+ O+ t" q- b
BaseMouseCursor();7 v" e# `3 O6 N' S* {5 c
}5 T# E# C; W, Z A5 j3 O2 ~! L
在其下添加:) Z, T& k4 R- ~
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
# B* P$ `4 W9 M2 e$ H. ]{
$ H! |1 N/ z6 U N( Um_wndMenu.DeleteAllMenu();
1 D) ?5 f0 g( c4 B/ I0 j0 Tm_wndMenu.CreateMenu(this);
; i) m- U6 d4 um_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
7 p2 D: f( M5 y$ N1 y
" J0 X4 H0 r) ~9 P3 p o' H% ]: hif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
% a! \& D, q* L3 T; [6 C. T6 B9 M{' W! c3 a" m' u
//P以上级别才可以删除所有道具
8 f' |+ K9 H" P$ U# d3 J6 L m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");" i! z: M! R/ {' a x. t* p
}
% E2 b6 L* E6 Dm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
5 u* h* m- v U7 [m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );( X, \+ w# c2 `& m
m_wndMenu.SetFocus();
: M/ a! W, h% v+ p; K}
, Z) L6 M$ w$ x1 H3 q5 W2 {! d------------------------------------------------------------------------------------------------------------4 R e2 N" l# O4 g! z/ a% ? q. l: a0 Q
*************************6 \: |5 A" K1 z2 m2 ?4 |0 R
WndField.h文件! j6 [8 D! b; i1 u! x
*************************$ h( Z1 ?4 C% M( y. U
搜索:BOOL m_bReport;
+ \, {, \- _, A2 t' {: A其后添加:
; _( I: P; L- J# M5 u: V5 W: aCWndMenu m_wndMenu;
7 B; O C, ?; r" e% `6 M% e Z9 f搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
, C% h M: l; V! J- [8 ~& L: C; `其后添加:2 S3 z! P% D! R$ U
virtual void OnRButtonUp(UINT nFlags, CPoint point);) ~$ |- N8 Q& s# ~. Q5 a
h. A9 k+ q% U; ?6 E3 d& Q& d' _; e) ?) D4 B3 q9 ^
|
|