|
|
源文件中_Interface文件夹下WndField.cpp文件* F. a9 u% ]6 e3 _4 B# U& n, ~ e
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
e2 h: H' C# W& ^4 R! ?' K2 A: t& c1 P: N
struct sItem
# _5 D6 N$ g6 p{
3 R1 W$ g+ D7 YDWORD dwId;
# y) o0 H" v0 f6 z. `DWORD dwKind2;( e1 Q7 c* j7 V' @- Y
DWORD dwItemId;) w1 a! W& u) a
BYTE nIndex;1 L( i1 |8 X& c) u5 k2 V
sItem(){
3 K# C/ V7 E+ H$ k% q- u dwId = dwKind2 = dwItemId = nIndex = 0;, a( ?( K* U& y3 X& k6 ~, d# y
}
: ?: h- S% L! }9 R2 t; q8 Kbool operator < (const sItem p2)
7 a& ?) H5 x: M8 P a# V" l- h" Q{' Q: [8 W; R! `# F |
if (dwKind2 == p2.dwKind2)" M; o2 i+ \ M. ?
{
* X& K- n& p( O7 n return dwItemId < p2.dwItemId;
8 @; h) a0 [6 y/ X }else{
) ^! {# g4 c9 k+ O return dwKind2 < p2.dwKind2;
; E' i& s; `9 F: u, w* V: n, @ }
+ ^% E$ u! V5 ~# |0 U* t}4 s; V& p5 }: l/ y5 [, @ u
};
& |1 s8 r: L# t( \7 \- sclass CInventorySort
. p0 w( r: w& W: L- _5 S( ]( T: o{5 B8 ]* h$ T0 ~
public:
5 [0 h% f1 v+ Z# s( P) W+ oCInventorySort()! s6 X: I1 A& @; h* b/ w9 q
{6 ^7 X' x, w9 w* r. k( W* O; o
m_dwPos = 0;0 D, p2 W- j" ~, h2 K& h
}
6 k8 b. }/ q: o' `" I2 o! W~CInventorySort(){}4 P, n$ L! l3 W0 y6 p% Z0 c+ @
private:
! w' G2 t/ O+ h" HsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
i" m3 U) f! u' G6 cDWORD m_dwPos;# ]7 h; e! p. [; [
public:
: D! Y3 C- ?2 g$ ?. g3 V8 p6 {void Add(BYTE nIndex)
1 @! C- ~) \; n# L{
0 ~/ a3 r) ^3 u5 K if (m_dwPos >= MAX_INVENTORY)% @7 _! h* g. V. Z) u
{4 i* ~, O% U7 u0 H
return;3 e3 d5 x9 P8 {* n* r! h
}- F, o2 B7 M% \9 }) M9 \
m_Item[m_dwPos].nIndex = nIndex;
/ F O, |- [' L8 j% v m_Item[m_dwPos].dwId = m_dwPos;% T i, Y8 h) m( X' d
m_dwPos++;
3 u2 h" q7 o( X}
( ^! S( k6 e" W, c( L7 ]2 C/ dBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列% B8 ^1 c E* q0 r0 `
{4 U* J/ J& J1 R) \
for (int i=0;i<MAX_INVENTORY;i++)3 |6 J U l* Q* J* o% c. L
{
0 v8 A; W9 ~7 G' `" o5 O! u if (m_Item.dwId == dwId), N: v5 T' x4 t
{
0 `# Z+ h: I0 J6 z9 q+ O return m_Item.nIndex;
8 x2 G: g5 r% @( j' c2 g }" @: _9 `7 v% M3 P+ l
}
: \$ S6 N7 k6 x. q& s; {+ b8 q0 ? return 255;
) ?* J7 k5 p) W+ l K( E. a}: z/ X5 d' r6 p4 S; ?- v
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
$ v7 l" ]3 D9 a9 H: `! ^) W& I) P6 z{
) f3 k$ X% @; |6 W, a0 p BYTE nTmp = 0;
1 w+ N% A8 V# f9 P bool bDest = false,bSrc = false;/ R2 D8 ?6 d9 j( r7 q" q, H
for (int i=0;i<MAX_INVENTORY;i++), y# C3 l U% c: x, I* Q5 I
{4 b/ W+ I' Q, T( d! {8 y& g
if (dwSrcId == m_Item.dwId)
S- P# M: r' j1 V$ x2 Y6 l/ ?# _' G {- E/ }3 Z, O5 u
//id相等 则 改变对应的dest和src
% m: T9 Y" o) Q* w& y nTmp = m_Item.nIndex;" a9 ]# g5 ~. M& L
m_Item.nIndex = dest;6 w) g. C( i1 m$ {
}
2 y& p. `- F q! A3 T }; o; F6 m( [4 s! f
//临时数据保存完毕,交换开始( E: H* D# l! z$ Q0 [& C2 B6 e
for (int i=0;i<MAX_INVENTORY;i++)
4 c/ x, k$ c7 C0 V9 n3 [ {7 r, T# e( O1 A/ K6 S P
if (dest == m_Item.nIndex)
7 R* s! w' R7 h& h- g# l {
- J" j) i) O# i1 ^( ^% }& i. @2 e //id相等 则 改变对应的dest和src
# j) q o q: } S# r m_Item.nIndex = nTmp;, X+ `6 p3 A* f8 A" }+ x& ?, b
}, @# W- u: K& A. Q6 p/ @- d7 w
}
, H! R/ Y/ C5 G}
/ X, H2 n6 }( Q5 B7 g$ L};
' r9 O' p }8 h& d/ ]-------------------------------------------------------------------------
, U9 m: W( R2 E2 \% }3 Z3 ?( e3 m依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
# ?2 i6 m; T6 ?4 B2 s" G8 H& H# C搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);. n0 i# v d0 O% O
紧靠其上添加:
1 E2 e: B& t' g( P1 z: Jif( pWndBase == &m_wndMenu )
7 K- X g; e6 Z$ @& b$ Y2 ]{: `7 G( }4 m% {% F9 f& K- z
switch( nID )5 l, R! g4 ?7 m p6 @
{2 {5 x1 g6 Z; w: N2 ~$ d$ P; W
case 2: s) `" @ t1 l2 ?0 \
{- F# X9 R3 r$ P- I* {; B) s
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);5 P; D2 i# @, x0 F3 Q+ D
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
, j; l# k- }2 b7 o3 @. t {% _7 p3 H! E$ B1 m1 X* ^9 x
break;
' o/ I9 _0 L0 }7 ^/ y }
4 _' N: I) f- E0 } Q0 v: @ for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)# m5 V* [- P k6 U: i8 v Y
{8 U/ O! ~ x& v( Z6 \
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
# \3 z+ ~8 B/ u9 o5 X if( !pItemElem )
f; l$ \$ u8 o0 V. }, {4 L+ l continue;
) V% P5 N4 M0 Y g if(pItemElem->GetExtra() > 0). [' h! Q$ O, Y% z' R) r5 I
continue;( z% I" _" _ }: K0 O1 E8 b1 ]
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
) C; f# H7 O% {& h8 ` continue;
^5 r/ y7 P4 o/ J& b \1 }6 W1 P' { if( g_pPlayer->IsUsing( pItemElem ) )
" B& E# ?$ J: F0 t" [) b/ `8 O continue;4 b# {& e3 i! E& q
if( pItemElem->IsUndestructable() == TRUE )! G2 g' J3 M8 f& k' _- Y8 n
{
* O4 D4 m0 f$ Z g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );5 S2 o! s# p* w1 |- ^
continue;
9 ? E9 b) x4 q+ R }5 S1 c8 N% T1 ^( {, T* n% u* c! E8 H- d- ?
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);& [* U+ W# e% y
}* A# \9 l# o& G7 G$ i6 h9 c4 ]7 z
break;3 L& C0 o9 l7 J, M' R, v H
}
9 v, S' [$ R! M5 X% J case 1:
% ]0 Z, \# I' {$ W* U {
0 M, ?1 i! C. {7 m- z //整理背包
7 t% V+ j1 c2 ^) }; n1 Z) a //////////////////////////////////////////////////////////////////////////
6 N; y/ u% d( E# b/ _ //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );+ k" ]) ~* P; \( u, l; r3 { w
//////////////////////////////////////////////////////////////////////////
+ Y$ c9 w- H2 S //////////////////////////////////////////////////////////////////////////
; Q6 N- G. S$ f. [' t CInventorySort* pInvSort = new CInventorySort;1 L9 z e) l0 U- x5 j, M
vector <sItem> vItem;
4 h% Z+ n1 b6 z U vItem.resize(MAX_INVENTORY);//初始化大小
j9 |+ `4 |/ n! z% n2 U( d: c" } //////////////////////////////////////////////////////////////////////////
6 A8 d3 f0 [. H0 l! b/ K& { //填充数据' C2 l% I' U& {, A9 u1 i( |: k
for (int i=0;i<MAX_INVENTORY;i++)
! `. T. h- J1 z, U {" ?; Q% q' B2 p4 o+ C9 L. b
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
9 D* i3 d& P' X& S# A$ X1 X, c if (!pItemElem)
. r/ _8 E( G* ^8 d: @7 y" t: J {
7 D' \' o4 x# C" h. X$ \ vItem.dwKind2 = 0xffffffff;( ]( X$ Q! p2 Z- ~% L7 f
vItem.dwItemId = 0xffffffff;0 N1 d; G4 l- |. `* x/ i: g
vItem.nIndex = i;
) [8 M4 X5 S& r5 b& { }else {
+ Q2 Q( m u2 v& U9 f) b: v5 W& z# t ItemProp* pProp = pItemElem->GetProp();) O" C# q; \; j& y0 n) t
vItem.dwKind2 = pProp->dwItemKind2;% L$ x8 F' e8 B" e/ @% N
vItem.dwItemId = pItemElem->m_dwItemId;
5 y; @9 f0 Z; c# U1 c2 c% i vItem.nIndex = i;
0 c; G3 d3 b3 b# M" }6 S- s }
' ]$ l' C# S1 Q' q* ~0 d% |& l& F //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
$ a/ e' Q$ R) p7 `* n }9 i7 V( c" Y! x( v5 |
//////////////////////////////////////////////////////////////////////////" j( X T/ E3 _3 _
sort(vItem.begin(),vItem.end());//排序/ p1 o& l P0 x! ?# \2 A
//////////////////////////////////////////////////////////////////////////( C% s; n/ ^0 j
//交换( }8 x; k' `% o4 ^$ {
for (size_t i=0;i<vItem.size();i++)
- F! Q4 _5 P+ K' R3 B( P {0 u9 I: \# G7 L' Q" ~4 ]
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
5 _0 E. d* j! f5 y6 `0 U# c pInvSort->Add(vItem.nIndex);7 E5 y2 _" ?1 x. e5 n
}, H& ?0 _9 Z0 x, I
BYTE nDestPos = 0;
( C- W8 }; b0 k; Z" F9 H for (int i=0;i<MAX_INVENTORY;i++)
" s' c6 K6 F* O" [* ^6 Y) a {) x0 t& j7 u) B* B
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
0 B; ]3 [7 `3 J! c" W9 u if (pItemElem)
6 k" O! m" ~6 W9 E: q' { {. o# Y0 \# x# f; k! b
if (IsUsingItem(pItemElem))
* w) \3 q1 ~4 L {$ F9 W- Q/ ?7 x1 Z7 f! ~( a. s `* d
//这个位置无法放" F# p. f9 r8 }9 `" |: L
nDestPos++;# v4 _# W' I/ t" x, [7 m% ~
}3 f- Q' h* ?5 y2 O1 C' x
}
7 N4 n9 ?1 x. N9 V BYTE nSrc = pInvSort->GetItemSrc(i);% Y$ K) m# p- q
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
& {1 E% D; P" W1 y2 M if (pItemElem)* I. r9 O, z, u) Z
{
' b( [- q9 {9 D if (IsUsingItem(pItemElem))6 _9 A( _' o0 d. z
{% `* s6 l$ z1 h) L9 d4 ?
//这个道具无法移动,跳过
5 J8 Q* ~- F- ~8 L: l continue;5 g) {( l" G$ L2 L8 L/ Q. e
}
. t1 q8 Z2 C6 d l( Y }else{* t7 O# M% x' ]9 M! ^9 j8 a
//空位置 不用动
" d$ \6 C) y) W* d4 P5 h" _ continue;% a. ~( s& w _1 y" |! m+ ^& l
}; ^! g8 C8 u/ a% g+ l
//////////////////////////////////////////////////////////////////////////
2 U J0 d: |& b( v //开始移动& @, a, T0 K; H& P: U2 p
if (nSrc == nDestPos)
5 Y4 h C+ p" e [! ?9 l {8 k( ^1 s( r+ H) n7 ?. @* K
//原地不动
6 K7 I' X" N5 ?* q! ?1 y( A nDestPos++;0 a0 l: A) q" ]( ]* g' u1 m
continue;
$ M! m7 ^9 L- l/ ?8 j6 {% V }
. J/ y. K( T) u( P: S pInvSort->MoveItem(i,nDestPos);
' g: @$ Z, a B0 A6 G2 y6 R g_DPlay.SendMoveItem(0,nSrc,nDestPos);( D- v% c: s1 {# @+ \
Sleep(5);! f' G& I2 M2 Q8 q& _
//Error("移动 - %d->%d",nSrc,nDestPos);
7 a, s6 p% @0 `0 e" T% j nDestPos++;+ v& o: ~6 H o
}; A/ e+ u w ~. Z' z
//取第一个元素的信息6 r5 x2 n B. V; S+ C7 k8 ^4 G
/*: i3 E( V d! \1 I a, a( R4 u1 w
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
8 r7 K+ @/ `7 Y* `$ i& L {
1 L; G1 V P; n% G: q7 S6 { Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
- n/ C8 C: s' C& G# \ g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);) \; j/ l, i( P! T9 H+ j8 w. {
}
; ?) l* E$ o% @& c( |2 ^ */$ l6 o& v4 E% n8 S2 A2 H D5 d- G
//////////////////////////////////////////////////////////////////////////
8 a7 a7 ~+ m! P p0 P break;- n" X! n- B1 @- ], {
}; o @" f, b# I" ~3 q& y
} 7 `- Z9 @: f1 z$ T
}
& Q! _ y- ^8 ?& k6 Pm_wndMenu.SetVisible(FALSE);4 f1 z- C( C' J
3 Q: h' Z* ], c: X8 B* P: w
--------------------------------------------------------------------------------------------------------3 Y5 G9 I$ N; L
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
( E, [8 P7 x7 J% n+ I4 g* \7 L4 c{- m4 _8 `0 ~ \+ ]
BaseMouseCursor();
" I* I2 a' D: g$ B1 g}3 ^- B2 {7 H6 m% R$ E& W4 e
在其下添加:* Z* V+ z- F3 y' W$ q; z
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)) I! M3 V, H8 T ?+ L
{" C8 r2 ~, _ W& |
m_wndMenu.DeleteAllMenu();# A7 i; L- S& H2 `/ L( j7 h4 V
m_wndMenu.CreateMenu(this);4 M3 H; \: s2 c$ T* D
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
! P: o! u" l% B! `/ P" C) q0 @
+ R3 e$ p& S1 f9 _1 Aif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))/ I" u3 A- r8 u7 E
{( n* O, m2 Q0 F `' t3 z- w
//P以上级别才可以删除所有道具
1 @0 w: C4 n/ O m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");+ p2 ?# H( x% I: [8 A
}
; `2 Z9 O7 ?1 c3 F U7 ]) Sm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
9 h/ d- E) K( ]6 ?/ Am_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );1 C4 z) r1 N0 S% ]8 ^9 f% F
m_wndMenu.SetFocus();
R8 y* h( Z4 o; G0 }9 [}
, H% K* J) A Z/ J, f* n' X------------------------------------------------------------------------------------------------------------
; E5 p: D! r3 C5 |. F*************************3 ?3 B& C' E0 |7 Y
WndField.h文件
' Y* _' q" ^4 R* G" j8 q2 G*************************& l8 q% u) F: X* B
搜索:BOOL m_bReport;4 v T4 \6 e" U/ x' y R
其后添加:
0 W, Q! s: h9 z& M0 q4 t) XCWndMenu m_wndMenu;
# A. c7 t* } O7 ]! Y. P搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);, R. D8 a0 \) W! F
其后添加:% a5 P) Q6 H# p
virtual void OnRButtonUp(UINT nFlags, CPoint point);
( P& ~" ~" R1 J3 X# Z& v4 j | } @' r/ a( f& F- B
4 j6 ^0 l4 c: v+ } X# l. X# T$ S
|
|