|
|
源文件中_Interface文件夹下WndField.cpp文件! L8 Q% x2 }4 g, e4 U
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )& ~1 v- O3 z1 t) T" C
0 ]4 I6 q/ o' K+ `3 A; I7 z
struct sItem
6 P2 \. |) d, |9 F( ~{) V; E5 I6 l9 P. r6 P
DWORD dwId; x1 v( y6 {4 z- V P: I
DWORD dwKind2;
- C: V" D; r: A1 K, lDWORD dwItemId;; Q6 a* A8 P% j
BYTE nIndex;" e, N( t" p; R; ?; _+ ?) Q
sItem(){
0 _( e4 q7 v2 j% l+ Y2 L dwId = dwKind2 = dwItemId = nIndex = 0;
5 g ?* G0 F* U O}3 G, z. V: Y: ], |. F9 R; r
bool operator < (const sItem p2)8 R* p0 ^4 @# P* B
{
9 ?% a% I: a" d3 }: |( P& e0 j+ w if (dwKind2 == p2.dwKind2)7 a3 s) C, U8 [, [9 h/ |, d
{
. y5 V, v/ l( o- F8 h2 f" u( E return dwItemId < p2.dwItemId;
- R) F0 M+ S* Z6 v }else{" F( v" U9 e1 F ?" v' \0 }
return dwKind2 < p2.dwKind2;
$ L. q; _& c3 ^& ^ }/ l9 y! o( |, ] B/ h" j7 e$ M
}0 l) g& A6 F' k5 j) V! y. M
};" H5 r/ a* E( @& x
class CInventorySort1 B6 D- ]3 ~- B. N
{3 o- o" Z _/ F$ S# G: Q
public:
* D2 p; i* c- YCInventorySort()6 |6 Z2 B# v: B: l% X
{
7 N! C; ~% j* u4 Y/ w4 m8 \# R3 h m_dwPos = 0;2 f2 v+ h$ H! j/ T" J3 j8 B% j
}
, Y) V% D$ L# D7 C B~CInventorySort(){}
% r5 I6 e. s* x$ p# n- T# eprivate:' Q6 f _/ i/ }0 l4 } v! |
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
( w& o+ z2 E( G F, G8 a; rDWORD m_dwPos;
1 H h" \$ ^- m; T7 t! B# g! P" bpublic:1 T* m! a; H& H( P
void Add(BYTE nIndex). S, p6 f* ^* Q+ C8 q k
{
$ P* R% v2 f" J; ?. h, c if (m_dwPos >= MAX_INVENTORY)6 I7 k+ S! [ W1 I) _' E
{- k; Z; D# r* C9 G# x) K+ i
return;2 p+ O. @5 w1 G* x- [7 J
}
$ x- F9 \. f8 _. X1 q. I Q m_Item[m_dwPos].nIndex = nIndex;
. ^2 |& ]$ |* G! |: x' X: m m_Item[m_dwPos].dwId = m_dwPos;+ o7 g% o8 a( A
m_dwPos++;
) ?4 s$ h: }5 ]. ?, z& U& d}
( I' ]2 l4 @2 u& u' uBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列1 a1 m/ a7 D# s' B
{$ ]* \- B, @8 g9 r$ d
for (int i=0;i<MAX_INVENTORY;i++)
. j, W% f9 h6 ~, U, ]0 P; ` {
, v+ E0 x! ]" t if (m_Item.dwId == dwId)
9 e( E- V6 k( H" q& w. } {
~/ L7 [1 S' W7 X: v return m_Item.nIndex;
3 A$ C4 b5 d: Z4 c V }
4 @% j C [) ]! G# Q; i0 |1 h& h }. k% e+ l+ z# z% q, t
return 255;$ w3 n8 D0 \+ k# F
}1 R( Q4 \6 x. H8 L6 K* t
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置2 y( P2 Q: ~: V0 @
{
. ^# p# d* l4 K5 f+ `$ c* N( ]2 g BYTE nTmp = 0;
( c2 ?2 [6 s. u; `5 x6 R- |/ R. H! I bool bDest = false,bSrc = false;; R. Z2 E3 q# ]/ W1 T6 d
for (int i=0;i<MAX_INVENTORY;i++)$ t$ o4 E& S2 @& j- D, e9 p
{' E3 a% \# l- k+ m! c2 k9 y
if (dwSrcId == m_Item.dwId) N6 P- } ~1 i0 w, G9 c
{
5 l' M2 P# c, a+ _4 A //id相等 则 改变对应的dest和src; ?+ d0 q. P! p, L/ w) L
nTmp = m_Item.nIndex;
6 V/ T0 s$ g3 p9 p m_Item.nIndex = dest;# U4 D7 @1 J3 e! {
}( \5 H% c& r! \
}. g: H. Z. G( M ?4 E
//临时数据保存完毕,交换开始2 |/ U+ a0 y' L4 p L% w
for (int i=0;i<MAX_INVENTORY;i++)
# g. @5 g/ Y- Z) ^ {
& g6 Q4 o$ K( @$ K if (dest == m_Item.nIndex)8 o$ g) x6 L8 Y, X2 P6 m
{
1 R [$ X% h# U8 j8 S2 Q; X7 n //id相等 则 改变对应的dest和src
4 G. [6 V5 O1 H4 t m_Item.nIndex = nTmp;
# h) o+ ^) b1 F }
& w; {$ t3 a1 t b& q }
4 \. ~" g$ |: l}
. g1 |: {. S: ^8 O2 D8 E& W- I2 z};
# w! S& {3 k! k& x-------------------------------------------------------------------------
- t1 p, n0 O0 _) n6 \依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
1 m" _$ ]+ c) R$ U" o6 N- k5 F& }+ F/ }搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase); `( {6 Q( k' \1 | O8 i$ N
紧靠其上添加:
/ ?$ p* b7 m- b8 }9 M& Hif( pWndBase == &m_wndMenu )$ D& ~( h8 t+ O6 [. l2 h
{
/ _0 @( }/ p& [. w @ switch( nID )
0 S+ r) y. I7 H' C/ y, l% c6 X {2 i( Z. }3 N" n1 z
case 2:4 x' ], W4 ^1 o. ~$ I& j9 I
{- J1 ~0 n/ z( I0 z# ?
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);7 ` M, S3 @' \ o
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
" c: ?7 Q- M& S+ v$ U7 \/ L {
2 A, i! ?" {4 C- O5 p4 y break;
+ l/ Y7 c" Y M- a } q9 v# C, M8 B3 m
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
% c# Z& l! n( Q8 M {$ @* g6 l- L) s+ H3 `
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
) i& j" C/ r# Z: G9 T6 Z if( !pItemElem )9 L3 _) r, f0 b$ I4 Y0 `, }1 h
continue;
3 [1 j# G! l1 G2 A8 X. b* g6 a if(pItemElem->GetExtra() > 0)0 M/ Y/ k ^. o1 P7 W
continue;
# z1 P! b/ r' S; c if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ( U) ?9 J( g; u5 H: b- x6 [
continue;9 u& L; c3 C! z
if( g_pPlayer->IsUsing( pItemElem ) )# ~' h* }3 T" e. E3 G& R
continue;$ @9 D% s8 k7 D1 e3 k" D, H( Q
if( pItemElem->IsUndestructable() == TRUE )
3 |( o2 D2 o5 N: J" c1 E4 X4 [" Y {
1 B4 Z" b, j6 G g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
3 N! v2 \2 D; A) s" k/ F* O6 ]1 z continue;) @: r/ a0 o; D
}( O7 P; P; l2 S; Y9 W
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);; z4 P$ Z8 M, D) Y0 s* M
}3 g# W( _/ @* [# X9 l3 e
break;$ f) i7 A0 V/ p' _! E! @$ t" @$ i
}/ k* ^( }& H+ N* H, i
case 1:
" u I$ M. J( ` {
/ H( B+ w% O5 u! ?2 X; z //整理背包
9 T- a! A5 f+ p! V5 @! @ //////////////////////////////////////////////////////////////////////////7 G2 y8 I# \9 i/ H, A
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );3 N: f" Q7 p. I0 n
//////////////////////////////////////////////////////////////////////////
: a% A' C( j* m( k2 ^/ ^ //////////////////////////////////////////////////////////////////////////
: x6 A8 y. l$ Y; X! ] CInventorySort* pInvSort = new CInventorySort;. o& u3 a% m' F$ c, I" E* {
vector <sItem> vItem;
; A* ^* t+ \* ?" V vItem.resize(MAX_INVENTORY);//初始化大小
2 |( f9 u8 L5 j% p1 d$ C p //////////////////////////////////////////////////////////////////////////
6 X* B6 W, R# p1 @8 A4 X( t //填充数据
: }: c2 w9 U9 p9 _8 M: a: W5 {+ q for (int i=0;i<MAX_INVENTORY;i++)9 s* q5 c& T/ l" @. K
{0 r4 ^. ?/ B" J6 L8 i2 Q. l9 U6 b$ l+ y
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);1 u& f$ b" \% d. v' @& L
if (!pItemElem)
6 ^0 N% ?9 i- [* C* A {, ^4 R$ ]: w) v3 J; ^! a F
vItem.dwKind2 = 0xffffffff;
7 B/ V3 |% I7 d# i vItem.dwItemId = 0xffffffff;
% O5 }" ~% J8 f. B vItem.nIndex = i;
# x4 g* s9 m s' L4 X! P }else {
- Y2 l( S2 a. Z, L ItemProp* pProp = pItemElem->GetProp();
* O2 d2 ^) C" ?. ?9 v vItem.dwKind2 = pProp->dwItemKind2;
3 {: E/ ?( t+ A- ]1 f vItem.dwItemId = pItemElem->m_dwItemId;+ u! Q$ f' f9 B3 L3 [: s
vItem.nIndex = i;
# `/ v2 D6 ^7 R) `" y: J) d2 t6 W }
9 B T0 x. {& R% r( \3 Z //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);7 x0 o2 m3 t; n+ l2 s9 e
}
- J" M- v. b9 V A" x1 K //////////////////////////////////////////////////////////////////////////8 g y' W8 i& W" l5 j7 L$ U6 _
sort(vItem.begin(),vItem.end());//排序$ G- i% _# b- ~+ P
//////////////////////////////////////////////////////////////////////////' J5 u+ q8 f$ I& P" U
//交换. z* U9 O* I2 w$ K) I4 |. T
for (size_t i=0;i<vItem.size();i++)) b# E, j& r7 r
{* s+ H4 T" Z/ d8 J
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);2 y7 g& b. K( c& v# w- e
pInvSort->Add(vItem.nIndex);
. d/ p3 O4 v3 j4 e }7 v) e1 D* h [3 l
BYTE nDestPos = 0;) F/ y/ P. G: b
for (int i=0;i<MAX_INVENTORY;i++)
5 r: w' M% V/ t6 U {
9 x* G% h9 m7 p2 s% N( E' f CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);; ?) T0 e+ Q5 R
if (pItemElem)" l' ^5 T( f5 @& Y- w( _2 f5 a
{
$ ?* G9 s0 f6 W- I# ~$ t* X if (IsUsingItem(pItemElem))
) D0 V9 G9 J- B4 L3 r {
) n- `! \4 f* |4 {* L+ O, ?4 [- O //这个位置无法放. ^: L% |6 @9 z6 Y1 C. |
nDestPos++;7 v6 n0 M3 J1 k* f/ E3 k
}# g, Z i7 R+ t# u
}
+ R: u" Z1 H' A' @# W+ K' Y BYTE nSrc = pInvSort->GetItemSrc(i);
( S, z9 Q6 x: O pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
& e6 h6 _ H' L( g- }# j1 u) o if (pItemElem)
1 f/ a+ ?1 i6 l- v& U6 T) h {- U' x8 b) `/ r
if (IsUsingItem(pItemElem))
& G" q( O0 u6 @8 t$ E% _5 s {
+ \) g& V; W5 X, B& e. I //这个道具无法移动,跳过6 B" V* I4 b+ {! S
continue;
8 R, Y5 D/ ~- X } d W7 \- B& M: O; ~* l! l8 W
}else{
* b( K x( q; s; B4 m7 k" X //空位置 不用动3 G- {8 [0 O: k
continue;
9 Q4 R4 C O* C) m& A }. | j5 x# p8 B' p4 S0 U
//////////////////////////////////////////////////////////////////////////
" O+ B) B1 t3 t: C# Q6 B //开始移动
" b; s& t' d8 R if (nSrc == nDestPos)+ N* I' F+ K; f3 h. e+ i+ i
{" t- V# [: A( R r
//原地不动
( H9 Q2 I1 V ?) v( ~# a2 W } nDestPos++;4 X( Z$ g7 J0 b6 N2 D$ q# C$ T
continue;1 P. Z/ y3 f" c
}0 z' M" Q7 u V5 n! F1 q1 e9 v
pInvSort->MoveItem(i,nDestPos);
; b7 G2 Z$ Q2 }% b F1 }) l; g g_DPlay.SendMoveItem(0,nSrc,nDestPos);
7 U' q1 o! L' ]7 G9 r3 y Sleep(5);
7 P, D: z! ?7 d4 q; j //Error("移动 - %d->%d",nSrc,nDestPos);( `8 M* L' [4 x$ v8 _' e' F
nDestPos++;
& R5 Z+ V) N* C- [, }; { u2 B }
3 Q. }/ S, ?% v5 J //取第一个元素的信息& [5 R6 {3 @; w6 Y3 S1 O
/*
' D8 ?! G! P1 p3 N8 ^' d+ w if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
# J) I. F( T& n0 _" E8 q {
: l2 ], N2 k& P9 d( R, a9 q! y Error("Move - From:%d,To:%d",vItem[0].nIndex,x);' ?0 n7 C9 P+ Z) D& w
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
+ { W$ }0 q, z( T8 ]! b0 E1 l5 x }# R' i' K/ n& k/ |* x5 q2 K# t9 w
*/" k6 |* @, A( b$ ^- z& O/ y! d; ^6 F
//////////////////////////////////////////////////////////////////////////" w, Z8 e @+ v( W$ b
break;) r5 l8 r3 ?) ]2 T
}
- Y% e/ \8 l# ` }
% O1 Y; h# E% o1 Y9 G" R}2 g* G: k. e; L$ D# ~. H4 l( S
m_wndMenu.SetVisible(FALSE);
# H+ N$ x2 [% x8 _- d3 R# U1 y. a0 }+ v) y
--------------------------------------------------------------------------------------------------------
; W" z: p i7 }搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)! s3 ]1 j, @% \& z; d6 |
{
0 o4 Q: t$ S+ GBaseMouseCursor();
3 @. _/ j: v) S, v! L}
/ ~" y+ ~$ \0 y. A5 u' V在其下添加:6 O, \4 ~, x+ r( i1 Z# O- a( n
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)! j* ?3 N u- W' n" J
{3 u; c1 z K. c$ t; k2 ?$ M2 ~
m_wndMenu.DeleteAllMenu();; v* T) T, P& r; k4 U' ^
m_wndMenu.CreateMenu(this);) d6 ^" P5 @# Q; l$ ^! A, U
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
! G- _6 R- |* Z2 ]
$ ?$ m" e: ]. L/ H& j) kif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))5 I7 Z3 l# ?5 ~% k
{; d. a7 q* ?/ Z( {4 l
//P以上级别才可以删除所有道具+ y* X" Q% G! v! o
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");9 B: F6 c3 A) |1 A& T! j
}
9 [, I$ L& h. w) w8 q; ]m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );; x1 \% k7 O5 n
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );* R- X5 A' w5 m
m_wndMenu.SetFocus();. A, q& F2 ~( d* Y+ f1 F `, L
}
5 A! _) H# l9 F6 y------------------------------------------------------------------------------------------------------------6 J. |" E( u" a* U* \7 Q" G1 I
*************************' x5 _6 a" I, U4 \
WndField.h文件. o; k' S/ y( h0 h1 b
*************************8 a! B; {5 O- [1 A6 _
搜索:BOOL m_bReport;
3 {: ~8 H+ i# {# b其后添加:/ o( y1 w2 d6 L' U
CWndMenu m_wndMenu;
, D$ `3 X5 ^; m2 r$ b+ @8 l搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);. M; @$ g9 k5 S; G
其后添加:
1 Q3 Z) s& v$ Vvirtual void OnRButtonUp(UINT nFlags, CPoint point);
6 L0 b' G% j' U- R. X0 x4 `- }' w6 A# E: n
8 X8 {3 i" k( L. G" x4 P; @ |
|