|
|
源文件中_Interface文件夹下WndField.cpp文件: X: _! G0 s9 a5 B6 p
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
4 n& `% a- {4 S5 T: {
# F) V2 b9 J d ^/ `struct sItem
3 U) R' U9 `# c( T* c{
2 Z6 C# o: z: k1 M2 M# `; M7 aDWORD dwId;
4 k6 H+ S7 d5 P$ o3 aDWORD dwKind2;
$ v' L3 _. y- p* Z6 GDWORD dwItemId;! s1 K! N8 b8 {/ U* D3 w
BYTE nIndex;
3 j+ K8 d0 N1 n% i# IsItem(){, L: K/ G8 ~6 g0 R9 q+ ]
dwId = dwKind2 = dwItemId = nIndex = 0;
9 _) F8 {0 j- W5 U4 w3 g}) r# R* Q, Z7 A& Q! ]' b' e
bool operator < (const sItem p2)
, u8 N0 C( j j4 c{7 h" _8 | B& z, Z, Z. u
if (dwKind2 == p2.dwKind2), m( c3 M& d: {+ N, U0 D
{
$ Y2 |7 a7 N$ y% h return dwItemId < p2.dwItemId;0 C* R! E2 l0 e, t- Y
}else{
2 ?5 B0 K/ n1 k7 ]" W+ C) n* _ return dwKind2 < p2.dwKind2;
- F9 N" d* B7 Y }. D7 u( A! n) ?4 z
}0 }/ h7 t$ ] ^. _
};
% `+ u7 t+ T ~. j* \4 C% hclass CInventorySort
8 e8 a2 o* Z* `{ i ?4 W9 @# {' S
public:3 U( t) P& k0 C3 y% Z
CInventorySort()
, y' m% d; F1 a) \4 }{, I2 ^4 a$ [# E/ C
m_dwPos = 0;) w6 k+ {7 f' R- y2 c/ d
}8 Y; X+ v# l8 L5 u5 y D4 f0 H' U
~CInventorySort(){}( f8 n1 D% U/ ~7 Y- E/ i$ C
private:
: O0 v P4 a2 V7 Y8 ssItem m_Item[MAX_INVENTORY];//存放排序好的道具信息: M/ {3 x+ ^! V6 ~+ a3 Q
DWORD m_dwPos;
! L; F, D5 Z9 Y( e( r; o- O* }public:
! k/ H& H" d/ C+ a" ovoid Add(BYTE nIndex)4 z0 K6 g+ p/ r6 V6 J) f1 ?
{' @6 L2 P W' p1 J" w: v
if (m_dwPos >= MAX_INVENTORY)
* g% E9 [6 s* ^, ]' E6 H {
: z7 \$ v) R8 l K, v- u% x1 L return;
& F) l5 u8 D$ L5 f3 V }
/ Q1 l" ^$ G( R8 U0 K- x m_Item[m_dwPos].nIndex = nIndex;9 Y5 t$ K) ^ J4 p
m_Item[m_dwPos].dwId = m_dwPos;- o8 r+ D; Z* ?' I/ H3 |9 W
m_dwPos++;
C9 f4 I- Z; `. `+ p}) g1 _- T0 g9 j- | K8 e+ L# ?
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列' l1 f9 M3 ^: I s' f8 ^
{
5 r1 }" S3 o$ o$ N% k/ S for (int i=0;i<MAX_INVENTORY;i++)
# e8 Z6 x: w& h% C9 j# T {
& x0 }1 a! J0 s% o6 |+ E% u if (m_Item.dwId == dwId)6 l* d" L, h# v4 [3 O
{
4 h$ k* T" M1 z% a return m_Item.nIndex;/ M, g. L) _$ s' S7 B* N
}
: C1 f* P' a- `9 Y }" `4 W6 S/ r2 u$ H
return 255;. @' R* E' ~8 ?% p* E& `; W
}) @! }; K7 w% h
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
, K9 [3 N) W' c* N. i/ y$ S7 P" Z{! d) W0 Y5 ?! H2 b R' e; l* w
BYTE nTmp = 0;
7 s! b! c/ S+ m4 Y3 ~: F, l bool bDest = false,bSrc = false;
5 Q: ~2 }7 o9 l3 u; V: I$ ? for (int i=0;i<MAX_INVENTORY;i++)
: t- X+ }) j1 }1 K. a8 M2 B2 C: j {
. @: I/ C& z1 F7 `9 q* S' \) `; S. W9 M if (dwSrcId == m_Item.dwId)
0 { t+ j3 F- n7 S: w {
7 E0 s/ {( G4 i( L: X2 m0 y z //id相等 则 改变对应的dest和src/ X N, L! k, ~* b
nTmp = m_Item.nIndex;4 r' f$ ~+ I# f( z9 H& a; t# C
m_Item.nIndex = dest;+ ]0 x1 T( R3 i* y4 p
}5 s, D; Z7 F, U/ z4 p' T: U" Y
}% J$ o9 q; K9 l* b. t( w9 |
//临时数据保存完毕,交换开始
4 [: |4 J4 a* p; E# h5 _4 x/ P5 m9 T for (int i=0;i<MAX_INVENTORY;i++)7 x. P0 m2 R$ [
{) Q: | |) U. _% u
if (dest == m_Item.nIndex)
7 M3 e* y( a+ Z7 |; ^- ^ {1 S: j; h8 N+ w% m
//id相等 则 改变对应的dest和src8 |7 U9 R' _' K6 _$ o
m_Item.nIndex = nTmp;' @0 t# H- w3 P6 `/ D9 G
}1 ^* {6 X$ L8 x! i6 c6 _
}
* E! u1 {3 K5 d: i; L/ {. D" m}
% ]+ D' O. S4 w$ d2 L};5 s* U" J9 | E' L& W5 C
-------------------------------------------------------------------------
4 }7 }; b4 U" d" b7 B依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
1 J& |- y3 Q' y% W6 R9 J搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
) B2 e/ z- i& j, G( X$ K, W紧靠其上添加:5 s" F1 M; V/ _. J ]* i7 Z
if( pWndBase == &m_wndMenu )( f0 A! W9 Z) [# L- Z
{
7 `: Y/ B( ^# @9 u. W switch( nID ), P$ v( f7 I; X! L/ G
{, d4 f+ |# Q: w$ _
case 2:) A* z4 F% H) f& K
{ _( G. Y- ^4 @, t/ U8 p2 Y
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
6 [* |* _& o. r; Q if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
$ \) p* G+ K& K' Y3 x4 { {
0 E0 b1 v& G3 U1 ]) p6 ~# E) | break;% c# B! Y! n5 [0 ~# A
}
' l c' a2 X/ s+ L9 S3 H, ~ for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)9 i9 T. P3 R) V1 g7 s
{
s+ c+ ^7 q7 O. X0 ?% G6 E CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);4 M6 e- }- z& l$ z' h
if( !pItemElem )5 a# ~( F. m3 O3 v$ W& P/ B
continue;( ?2 }( ^1 z2 L3 _3 p# _- B
if(pItemElem->GetExtra() > 0)0 ]+ B5 R' [" D1 ~2 r8 o8 V
continue;; `3 i, O6 `! a9 _& P" A: M) Y* C
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) # A0 V' ^0 n1 y. i/ u! ]+ l5 A
continue;
* J9 d8 ?0 g: r if( g_pPlayer->IsUsing( pItemElem ) )5 D; J: H: y. U, @6 |, P
continue;
) y$ | U2 B; v7 D+ ~3 m if( pItemElem->IsUndestructable() == TRUE )
) \0 k- B" C1 [3 W9 c2 w8 R {) |. x- u1 U+ G% I
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );2 s# a2 @$ Q% z+ r! D( m3 _
continue;( u+ M/ T4 N5 H
}: Y7 F( U1 {: P0 L# Z
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);) ~% V7 I2 M { _
}. I) U1 v T" d# N. a2 A; i5 W1 R
break;5 s% G& ~, s( R+ n' i! `/ Z
}# a6 W( u6 d; Q% l+ }0 n
case 1:& M% M4 h( R5 ]; W
{
6 q. Q- x6 e' y- n) q //整理背包
4 g, L6 a6 S# @" V: C6 z$ E //////////////////////////////////////////////////////////////////////////" D! ]/ i9 f; t
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
- x) N! d, ^3 _# l# r //////////////////////////////////////////////////////////////////////////8 l* F t ?; L+ {3 k3 n9 O
//////////////////////////////////////////////////////////////////////////% k$ L5 `. O: w, m" ^$ P" F( z
CInventorySort* pInvSort = new CInventorySort;. d+ j2 H6 m$ d1 C) |. P
vector <sItem> vItem;8 [4 H% ]8 U# p5 p& I6 t; H2 y
vItem.resize(MAX_INVENTORY);//初始化大小* L r0 e. i& h
//////////////////////////////////////////////////////////////////////////
$ [7 @) o6 f4 _) W J8 r //填充数据
! _2 p5 y! Z6 q, r) u for (int i=0;i<MAX_INVENTORY;i++)
5 G) B: E" l( p9 y9 g l {9 \5 a4 _, L1 I1 w6 X+ r
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
$ Z x3 k9 R' w0 y" Y if (!pItemElem)
1 ?; e- m( B2 U% m; R {
0 d6 T, Z/ J' e& v) j" V vItem.dwKind2 = 0xffffffff;6 t% C0 G/ {- n
vItem.dwItemId = 0xffffffff;
$ d: f& q1 D, H# Y. l* R0 b vItem.nIndex = i;- `' e; T h/ z/ J. f) ?
}else {
% v0 C3 T: ^# ]* c ItemProp* pProp = pItemElem->GetProp();" }6 ?* K$ l2 V7 h, f- T9 p1 q
vItem.dwKind2 = pProp->dwItemKind2;
' m7 E+ U$ U$ s! M9 U! H3 Z vItem.dwItemId = pItemElem->m_dwItemId;
: |! y" Y" p: B2 N; Z vItem.nIndex = i;0 l; J8 O& a. o
}. ?4 B' ~9 z, E( s C
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
% i2 m/ R2 ?/ j6 @' r5 Q2 g1 t }
% m3 f% x: V4 w, g( f9 o8 } //////////////////////////////////////////////////////////////////////////& U; l: G2 y& i% Z# M& x; }
sort(vItem.begin(),vItem.end());//排序$ t' M* A9 T1 _8 e0 X) l# F
//////////////////////////////////////////////////////////////////////////8 F' D' F6 L. X9 F1 I( ~- N
//交换
- S; s g' c. O for (size_t i=0;i<vItem.size();i++)
J0 @% z7 }9 h8 F {
- j9 U+ u$ ]4 L. ]# ^ //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
4 K% \: ]0 y. h4 c r% F* } pInvSort->Add(vItem.nIndex);5 T% P2 I% q4 m# V8 [# X
}( p: o% T: B* z6 m: U5 u& i
BYTE nDestPos = 0;% }/ I: D: U! e1 h- F' L2 f/ A/ O3 C+ w
for (int i=0;i<MAX_INVENTORY;i++)- O- T$ ~, a3 l7 o% ^
{& u5 Q# U& s6 q( \6 p s
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);7 {- M; _7 q5 n& f. N/ D
if (pItemElem)' T* R5 O( q* d- |' T- T/ r: U
{6 e8 O& f! ]2 k; q1 M) Z( d" G
if (IsUsingItem(pItemElem))$ d( M k0 p& q# `5 z6 {6 M
{
1 i+ {* w1 w, ^$ [2 M0 O1 [ //这个位置无法放, p9 C% j+ r3 D5 Q, v+ p# y
nDestPos++;% h* {# r: @6 `( M
}
* N( i+ z. D0 N9 Q/ {1 ?# X }
" d8 @0 S; `1 X; A BYTE nSrc = pInvSort->GetItemSrc(i);
( L" |5 Q& t7 V. A4 W" n3 k pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);0 H! V/ [% F2 Y8 [) e
if (pItemElem)- U7 B, O# D6 C7 t
{2 P4 M# @/ Q9 a
if (IsUsingItem(pItemElem))
6 O) f* u' I9 n# g/ q {
6 I, X) a0 _; r: ?/ [ //这个道具无法移动,跳过
: {2 J8 O$ o X* y7 l continue;) b& N; ?! a8 G/ A! N8 `
}
7 P4 c5 W) o& [ }else{
4 O, ^$ d7 G) B7 n- ~; Q$ s //空位置 不用动$ _1 j" I! n1 a" a: a4 X
continue;
# p; b) _2 Y. h- F1 c }
/ I0 h- n i9 X N; [ //////////////////////////////////////////////////////////////////////////
' P5 D1 w4 w7 E! o //开始移动; }: k" N" \! z* D
if (nSrc == nDestPos)# m5 K# w& ]5 u6 K7 B- R. f: R" p
{
4 u% {7 U0 ?9 Q& c //原地不动8 X. h% z; ~% |! |
nDestPos++;% l" n9 k1 g# X6 K2 k0 f
continue;. f+ A* G5 J' H/ u1 m
}1 }/ n2 ^' O1 o3 Z6 L/ b, F: W* T
pInvSort->MoveItem(i,nDestPos);
( V2 K" \, ^3 t' h$ A g_DPlay.SendMoveItem(0,nSrc,nDestPos);3 P3 P4 W+ q7 G# V
Sleep(5);/ t. A( E" E3 _$ t& X
//Error("移动 - %d->%d",nSrc,nDestPos);
# g* p( l2 {2 s2 ^ nDestPos++;* }( M9 I% X$ q9 e `) {7 ]
}/ A6 ]8 T8 A+ ?3 f* k6 x
//取第一个元素的信息8 `+ e8 [- c5 b; k) p' u* p
/*
1 i+ V/ m, w! D$ @+ C5 ~ if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
" u I! G" k( W; P) {( p# \ {
1 c: q' G4 _1 @ Error("Move - From:%d,To:%d",vItem[0].nIndex,x);& N/ H& K$ p' ]2 Z4 _5 @& s
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);, I) Z' \! e. q) W) l0 N5 ~
}
+ x$ a2 H: z! r2 x) e */ Q- |* r( c, g& P+ d
//////////////////////////////////////////////////////////////////////////, n4 Y: D ~% _( X" {, C
break;% H, X) v9 H) b) a9 i" D) e% R6 h. S* d
}
- r0 c' O, n2 J }
) H( y" o. I9 A; H, C* G}
- B- l8 A/ m8 Y# B% Q- im_wndMenu.SetVisible(FALSE);2 G3 l# g: i I% @9 n& Z7 k
6 h; t' d8 E' q! R: w7 C: q
--------------------------------------------------------------------------------------------------------
, U/ X/ o1 G5 e9 `5 e! p6 T搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
- U% i2 O( ^! Y; w6 i! ~4 @/ z{
+ t$ R% N1 A" k' X2 f* ]BaseMouseCursor();
7 t+ g0 j( R& @" G' h}* c1 b/ L( I& C! h! o6 s
在其下添加:% i$ b/ e: s* T7 O H& _; }
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
9 S+ Z) K" q" E{+ G) y) t# D" \4 e
m_wndMenu.DeleteAllMenu();
/ ^. Y9 L; J1 Rm_wndMenu.CreateMenu(this);
3 V' S% X; A' t/ Cm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");0 {* E2 P% N- Z4 t
# Q3 f6 N9 v s5 A9 s0 sif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)). y7 J) }+ q. a4 [
{
0 Q# Z) a5 I8 O: D6 { //P以上级别才可以删除所有道具! w4 T, X7 G$ ~2 t; V `' H& p6 A7 N
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
! q2 `: T$ |9 ^: D# u/ u}
5 W, s" m3 s- ?. [6 r1 K: Jm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
1 X4 ?9 V$ ^0 G6 E& o) v8 xm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );3 Z; F' T" D, B6 I/ k
m_wndMenu.SetFocus();: N: l6 b4 B3 M4 D
}+ G; z: [) N5 g8 o5 v( u% [
------------------------------------------------------------------------------------------------------------
. x: @8 C$ m+ e) e*************************
" o& O0 p1 ~' }# `9 ~/ VWndField.h文件
2 a6 b! n2 e' h- P0 z& h*************************- h# _0 t B9 @' s. o1 T
搜索:BOOL m_bReport;: t q: m3 }9 m* d
其后添加: c4 h2 _4 A" P' v) Y
CWndMenu m_wndMenu;
* K( l- x1 G! [8 Y" t) e搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
6 O" e' e T& ]- P8 c) _' m其后添加:9 F9 M% D+ T" w6 A" F+ G
virtual void OnRButtonUp(UINT nFlags, CPoint point);
1 f3 X, x5 t4 T' _9 L8 x+ i! C2 n0 e5 c( k1 v3 G8 X
6 h- F1 ?" z% P6 d: ~0 a- j. P |
|