|
|
源文件中_Interface文件夹下WndField.cpp文件0 l; X8 Q3 N1 ^) _
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
. \' v2 u- T; m3 t& s D' i! W: D& u c+ O8 [. \2 K
struct sItem
; Y# h0 E% T4 u8 e6 z{% ~( T/ _3 R5 U- ]# U/ t+ }
DWORD dwId;
H2 o3 ]* `+ A$ k) C3 mDWORD dwKind2;
- c/ B- n6 |4 bDWORD dwItemId;
. S; D0 q) j+ j8 e- x8 Z9 Y) gBYTE nIndex;; ^$ u- r4 Y+ i. w+ l9 E
sItem(){. p) |# E* U3 Q1 ]8 T' L
dwId = dwKind2 = dwItemId = nIndex = 0;- n" P" N* e! J6 V* {
}
1 l! v" k/ d: s* d6 W2 ~. dbool operator < (const sItem p2)
1 h4 V& z, @: S{! O/ W6 T. {) m l/ G
if (dwKind2 == p2.dwKind2)
: ]" k$ |5 u, _' h* Q$ C {
4 q. r& h6 v- I2 a/ j& a8 x6 ? return dwItemId < p2.dwItemId;
0 M, l/ `/ ]' `! z. h8 H& E }else{
; b% S- d/ N3 v3 v return dwKind2 < p2.dwKind2;
1 U; r5 t5 s5 d" i }
" ]' w+ x, u4 k! l5 q& ~}
3 O% @6 n8 v( I I' n0 ?};
/ R& U$ k5 g; i3 q+ N- ^( P8 \# b9 rclass CInventorySort+ T+ N4 N/ Q8 @! h' E8 f
{
. @( j: k" H9 J% ?& W3 n: k/ rpublic:7 K- D v; v, @# k- @
CInventorySort()
3 `4 ]2 w, J, r, n! D4 K9 Z, ]{
! v! \- |" ?! N m_dwPos = 0;: P4 o' S8 G% E- j# H% I; |2 w8 S
}" g. q# n4 u" J
~CInventorySort(){} l& v( I- o) N/ Y( l! j
private:- M6 Q' h) X7 `
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
4 d: {( R J4 p: U* }( NDWORD m_dwPos;6 K0 ]5 h' q, [9 R* C5 j5 `' B
public:
+ F2 l- U: h$ Svoid Add(BYTE nIndex)0 s! [5 f6 X& B9 O& j. w5 k
{+ G5 V2 b% v# _; c3 X3 _- ]& Z
if (m_dwPos >= MAX_INVENTORY)
- N5 c) D, @) q' s& E- O: S {6 i" L+ y! p/ b0 f5 U
return;
0 h0 V% G+ ^7 ]8 g8 k0 c; g }4 H" F- H- _4 w+ g
m_Item[m_dwPos].nIndex = nIndex;
. ]( e3 ~" \: e' h7 c3 R2 J1 y m_Item[m_dwPos].dwId = m_dwPos;
2 P' O& U; d) c! ?: N6 h- ` m_dwPos++;
6 C/ X$ S! k( q% [& u}
9 Z, R& @0 L/ x, r& G4 LBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列$ `; U6 e8 F; }+ @2 }! b
{. E- ]# y! j$ X5 F! H. n( ]' }
for (int i=0;i<MAX_INVENTORY;i++), m+ d1 Y. q% \( e' n
{
. F$ r, w3 [2 o- V1 L! {% L+ ~' v8 G if (m_Item.dwId == dwId)
, s4 O8 s( }0 ?4 Z' Q/ X {! m5 K$ x9 b' s: \. {; y
return m_Item.nIndex;; N% Q+ y) \; [* {4 |) n) e4 X
}
f+ z, n; R: R* @! ^+ c) s% [: y }
* w( r. `, C1 d9 \. }$ I return 255;
. Q; Y5 j4 h" I: {" }# [}
: v! V/ v, G- M9 S9 m6 zvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
9 U# A) @4 D( C8 g{% Y' ]* Q& f4 a7 V
BYTE nTmp = 0;
& B! C: _& S( J! P5 t bool bDest = false,bSrc = false;
1 c6 [/ r/ {2 } for (int i=0;i<MAX_INVENTORY;i++); s+ z. _. I( F, ?
{
8 @1 _* Q' A6 Z D1 C if (dwSrcId == m_Item.dwId)
! e' A# f6 V; D9 V& @ W {
5 x6 Z; j1 `( ] //id相等 则 改变对应的dest和src
, {0 } t# X' C4 a6 H2 z W nTmp = m_Item.nIndex;
9 L: E, L* h' ^; H: p m_Item.nIndex = dest;
, X r+ p& t \0 r& e7 z }
+ a( m# h7 r; U6 X+ d, r, K }
+ r* y7 a3 i* e8 F% I- k& \ //临时数据保存完毕,交换开始0 d. w# J& e( U# `' V! e* @ R
for (int i=0;i<MAX_INVENTORY;i++)
- Y: S$ L+ B. G% F% l5 Z {* a5 v& K% {+ Z# w2 ?
if (dest == m_Item.nIndex)6 Z$ K! Y& n4 F# B- e$ ?
{
- U; f8 ?! s! z- u8 D //id相等 则 改变对应的dest和src* f$ k* y5 ?1 p) ]$ P: A
m_Item.nIndex = nTmp;
- y- X$ _0 f9 a9 {2 y' K. Z }. |) b( ~& W$ R2 z+ |) m0 L3 M
}
9 K$ ]6 Z; a9 T) h. F}
, P4 z7 p7 ^, ]9 L% O7 e};/ k' X7 w+ ?& t/ Q
-------------------------------------------------------------------------' q. u" d9 ?; W9 B
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
N* H8 Z. `% D, }搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);- a8 }3 m7 p8 | D O& w3 b, C
紧靠其上添加:% R& o# }/ V. B6 y* ^3 L- D
if( pWndBase == &m_wndMenu )
/ l& z2 o3 z( U% I' A( w: |+ q) j9 Y{* Z. [. D w7 ?
switch( nID )' c- ^7 I& a+ O, B
{
3 \$ o; W% J- v1 U case 2:
4 w/ Q' K" T3 T# L. ^/ m& t {
, o8 Y7 ~8 x; D% M //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
+ S7 [7 p+ F% q if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))& ]5 q& v$ i" q5 f
{8 A ?, \$ s2 V
break;
( a8 B* N7 K. x6 ^9 G/ h }
: B7 N1 Y$ G+ b2 I! t2 {7 S for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
2 z q' s; S0 d4 R+ z {
: E# ]7 s M y7 e& x, `/ T9 O CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
5 M2 k- C% ?: I* J9 g" ? if( !pItemElem )! D8 D% Y; ]2 j# Q* Y+ a! F
continue;
1 M' x; @/ N: h0 n& x+ W* y if(pItemElem->GetExtra() > 0)
- [. H& G0 ]5 e& `4 n& Z* Y continue;4 Z2 n8 w8 a3 W3 x+ I! w3 n P$ V
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 9 [5 e- g* N7 `5 j, f; A5 v
continue;% a% @1 S# k7 `% I7 A
if( g_pPlayer->IsUsing( pItemElem ) )5 L: G. q/ ^) ~8 K% `
continue;* X+ T) P) O6 X# I
if( pItemElem->IsUndestructable() == TRUE )
1 H- U) n5 x1 R2 Q, z {3 ~9 h" J2 H3 M) d9 x& X, F" @
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
+ J# f7 z. U2 Z# \ continue;
8 l R0 w2 K3 [4 S }& w; C1 i# S, A/ @# G0 Z: A9 n1 \
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
6 I5 i' F. P$ S' X: A) Z8 ` } W( ]* n( [& N3 x. Q j
break;
9 K* [; |/ j( c s. r3 ? }
) n# b1 q, S( i! d# ?; K4 e, A case 1:
/ Z8 ]! H% {4 A7 d {6 I" T% }# x: @% n6 {6 l) ]
//整理背包
* I0 s# _4 {1 w* f //////////////////////////////////////////////////////////////////////////
& s/ C' j+ j6 Y$ k //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
9 l; m. h1 l2 U6 D2 C1 B //////////////////////////////////////////////////////////////////////////
! |+ C7 |/ B; W0 C //////////////////////////////////////////////////////////////////////////, b1 c4 U( f. K. K V
CInventorySort* pInvSort = new CInventorySort;
. {7 H9 D1 \' ]0 d, b. Q6 i( d; K* L vector <sItem> vItem;
& q# V* v: L+ B F7 Y: { vItem.resize(MAX_INVENTORY);//初始化大小: ]% Y3 K( x. x
//////////////////////////////////////////////////////////////////////////# v7 K1 v+ i# J, [: W; L
//填充数据
3 r* l0 x# J( K A% q6 d2 o for (int i=0;i<MAX_INVENTORY;i++)- \0 l. P; V' E' l: H
{7 Y5 _" Q1 u0 T6 w* ^
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);4 J& P. T$ n" O2 Z5 A1 h, O
if (!pItemElem)
0 j3 d0 M' Y" [) _- H& l {0 N2 \8 E# z* {; b
vItem.dwKind2 = 0xffffffff;
8 H) k- Z8 h9 J% L2 p% w" t# f) k vItem.dwItemId = 0xffffffff;& ^$ Y7 [1 M3 \8 d* G- l; [* F
vItem.nIndex = i;
8 n& q" b# G6 r1 d }else {! C4 e# W, ?& [
ItemProp* pProp = pItemElem->GetProp();
1 u3 P$ X& e, n: i9 F5 I vItem.dwKind2 = pProp->dwItemKind2;5 v) B3 w7 }# Z# G1 G7 M' L0 p
vItem.dwItemId = pItemElem->m_dwItemId;, D& Y" e% y+ Y
vItem.nIndex = i;
2 J. ]( M; m8 x" y' o F }
. m% S* \/ K; u //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);( b: {5 X+ }5 C% M, \9 E/ X7 X
}
' v: h6 c* S' |2 i( L( c. u //////////////////////////////////////////////////////////////////////////
3 g# m$ W; [& \ sort(vItem.begin(),vItem.end());//排序
5 k4 F9 j+ i G* {3 Y q4 j //////////////////////////////////////////////////////////////////////////7 D; r5 b" f1 p" x3 y9 f! B* K- a/ U
//交换
3 s( ` X) `: W( L for (size_t i=0;i<vItem.size();i++)
3 b( p1 N- g% O; `1 [7 {4 {4 ` {- U1 v7 K/ Q! V' @- z8 O9 N- Y
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);& s4 u( ~0 j: C, z
pInvSort->Add(vItem.nIndex);: i% Q3 {0 L" t l8 p
}
# \& W9 h, |( `8 E( D BYTE nDestPos = 0;) m s: Q7 x) P- X1 b
for (int i=0;i<MAX_INVENTORY;i++)- y: C7 B& ?# J U! P
{, V; _% ]8 ?# F. H6 q) g4 V. o( Y
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
) z/ \5 y2 {9 P+ N* T/ Y& `- V9 e5 ` if (pItemElem)
' x+ E$ L/ F4 y! |' \7 b" [ {" H. c" M4 v% }
if (IsUsingItem(pItemElem))
9 j7 z' j; l& R {2 p/ |6 u/ d, w8 h, q y
//这个位置无法放
+ S$ I( b5 q8 k nDestPos++;& X8 F) d' r- c
}3 L6 u# z9 q# Q' x9 P
}' W& v" z9 j: }' s! Y6 j/ n
BYTE nSrc = pInvSort->GetItemSrc(i);
: w6 G- Q" ~: h7 S6 \ pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);1 k8 Z1 _2 {, V% H' n
if (pItemElem)
7 o- l( }* z3 R1 x! ] {
8 r3 s* q* ^$ R( {" S+ c) K if (IsUsingItem(pItemElem))
6 a0 X r' C4 }" C$ x5 q n; ]/ _* ^ {
- Z# W/ E" s! Q5 o5 A, t //这个道具无法移动,跳过
. C V! U2 W0 V( o continue;
2 B; @0 w! b) o# v; H9 g1 E( \ }
0 d# c, ]9 `/ L; X- k' d0 a }else{2 x. U0 }9 c- `% G$ ` o
//空位置 不用动
( t1 U0 }0 c/ b0 Y& z continue;
: A7 c1 `8 i/ T' y }
@2 ]6 D+ n: b* L. y- D6 U //////////////////////////////////////////////////////////////////////////$ S; Q& K( N3 {, r) L: L
//开始移动
: w, j" L8 }+ [1 q7 L' B if (nSrc == nDestPos)5 }0 ~1 S0 d2 P- V
{' N g9 b4 Z* n
//原地不动
& ^+ l# S& m$ @$ q nDestPos++;5 V. C; i! Z* p$ o) M; o2 ~
continue;
. c; W, E" x* L2 H }" c/ A, Q/ F( ~8 o& b* ^
pInvSort->MoveItem(i,nDestPos);2 t* p+ g( l2 u% a) Q- c# }4 s
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
9 l* [) Z0 _" c- t! A$ h% C Sleep(5);
, u! q8 f9 L; h1 @; R //Error("移动 - %d->%d",nSrc,nDestPos);0 f8 y/ m u1 v+ t# r3 ]
nDestPos++;) E6 F& N5 v P# _- r( U
}0 [% z p2 n& }/ r+ f; S* W
//取第一个元素的信息 v4 s, ^' I7 `( ~, e
/*0 a, Y* @/ @ v+ o y
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)4 O& A' x' b2 D1 v
{1 d5 w, N. v0 D! a
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);+ q# Z6 ?9 j' q* q1 f6 q
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
0 ]8 u; `3 e$ C3 z6 D3 Y' \3 U }
8 E3 S# A! @- \4 M: f& M */$ q! I3 P, F s: c( ^& y9 ] Y- x! m
//////////////////////////////////////////////////////////////////////////
* d/ I- J2 X- W) Z: R; h break;; z3 ^6 J7 H$ ?: g
}3 j0 d# C1 H K0 [" b; d1 @0 n
} 9 t& g4 w7 G5 J
}
7 m" G" K9 ]( R# g2 o8 pm_wndMenu.SetVisible(FALSE);
+ m) @, X% h8 ~" D/ `* K9 Y
) e. m4 d" ^" X+ f) V O--------------------------------------------------------------------------------------------------------
' a/ i+ {7 p7 Z1 U! z* g9 y2 i搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
7 f3 m4 Q/ y9 b8 j6 ^{$ E1 @: ^6 A% J# q1 [
BaseMouseCursor();
7 ~" \9 e! [# w3 ]2 a3 k% n- r4 D}
' E$ K8 `3 f3 M4 F* ^在其下添加:+ I+ _3 t/ B( |% C0 N
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)# l3 m0 z! C& j; H
{
3 C- ~- r3 E5 Xm_wndMenu.DeleteAllMenu();
2 ?' C+ Q% c: J' c; C" Gm_wndMenu.CreateMenu(this);- [* ^ j2 W) E2 u" @) T
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
) s7 S; s. v O; x3 M- ^; `; P" ~6 U
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))5 x0 h) b3 d( P: ?9 t
{4 a4 N9 f. M- p! {
//P以上级别才可以删除所有道具$ q5 ?& ]8 g# H
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
j2 ?1 u# A ^! m+ z8 O/ O}5 T' n: N! g+ c' S: W( z
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );% r4 _1 d5 z0 D7 B9 E- c
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
/ V5 T2 X/ x6 o1 t1 `m_wndMenu.SetFocus();3 a" O6 H2 ]# M6 @2 P. {! l
}
4 H1 F! c* q& V0 N- x, W# I$ w------------------------------------------------------------------------------------------------------------
2 k, d9 K, Q1 o2 O/ `( w9 s5 q" ^*************************
4 x. s2 Q& V& \) p* X' x4 O! }9 }WndField.h文件
; d% t5 c$ N2 C6 e9 G9 b*************************
0 \) o4 ?0 i4 y" e" z) Y* I$ ]+ \搜索:BOOL m_bReport;
4 ?( M2 U( U. Y! ^7 n3 D4 Q* z其后添加: X' o3 E1 d$ r1 n
CWndMenu m_wndMenu;
$ I6 {3 \, V1 p5 ?$ r+ n) j. U! t/ R搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
! ]: G2 F( O( h, s/ i其后添加:
' Q5 g8 A. Z! r9 g9 jvirtual void OnRButtonUp(UINT nFlags, CPoint point);
/ X J/ k1 {( ^& N3 E1 T
& z) K% U U, _
9 R! p6 P1 |; S( y3 `4 {/ R |
|