|
|
源文件中_Interface文件夹下WndField.cpp文件$ |" I- _8 J. ]
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )0 \; A# ] m- b9 h% w! }# N
2 Y3 X, H9 w$ m' X* O+ X) b* T& c( Xstruct sItem) Y: H% n6 D# Q4 Y
{6 s! ]3 |+ q1 P- N0 S
DWORD dwId;- q6 Q/ B: K5 o! }" b+ S
DWORD dwKind2;
; B) V' d+ u& i8 b, DDWORD dwItemId;
2 M% g: ?: L# g* HBYTE nIndex;6 T g; v0 F" B
sItem(){4 b2 ~ K/ t' Z
dwId = dwKind2 = dwItemId = nIndex = 0;
# W% H( M& X7 `# w5 Z6 \}& c' { w$ B+ n7 k5 A) y
bool operator < (const sItem p2)5 _; \1 e% Z8 y5 b+ ?0 X; B
{
* v/ t8 x* m; w2 l D# p5 I3 E if (dwKind2 == p2.dwKind2)
' w: U3 S+ W0 h1 H6 }% Q {
2 G3 q' ` H, E# k2 K( b+ E return dwItemId < p2.dwItemId;
& r4 E% N# q0 U% z/ `2 m }else{7 T' l0 H) M/ T. [& r
return dwKind2 < p2.dwKind2;
$ |2 _5 \/ x" u% ?( r; O& b }( p. s) K- \0 Q' F. [
}; }& R5 I( R2 n# f' @
};
9 w: O) Y7 e1 bclass CInventorySort) K8 B+ W" X9 Z0 y
{
. C1 Z* f; Z9 tpublic:
8 u0 E/ ~# K* L" D. u" zCInventorySort()
$ ~: w$ Z* E4 V; T' X: I{
! i0 r5 ]2 [; j: _ m_dwPos = 0;1 b, ^0 [# ]) r, ?% G
}& x, @ L0 }' X' {4 V! _
~CInventorySort(){}9 O1 t1 R* p2 z% I r( o2 o
private:
! P' ?( N. {. nsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
$ ^7 V9 z5 P2 f, QDWORD m_dwPos;
0 J" D: G" |. C. b7 j" Y4 rpublic:# T$ `9 ]% f4 b/ Q" D) U9 i
void Add(BYTE nIndex)3 s1 Q& l/ ^( z; I3 N
{
4 u" D5 k' ?1 F% }5 F( C6 {8 c if (m_dwPos >= MAX_INVENTORY)
6 y, i# `1 E0 o3 D, G$ {7 E y5 F {
J1 O; P$ C i' d return;
: O) \/ @; `) N }
, B# |# k) ] c1 e- O m_Item[m_dwPos].nIndex = nIndex;
5 I5 c3 Z: x( R5 I, K7 T m_Item[m_dwPos].dwId = m_dwPos;! ~( c3 ~ x# _) d. S) k1 Q$ }* N
m_dwPos++;5 ?' d2 _ W. K) C% W) m1 A
}* W6 G! f, u) F1 P/ Z
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
) j2 }2 N3 {; Y, \2 V{- r- j8 f5 O5 I0 t7 l* |4 i
for (int i=0;i<MAX_INVENTORY;i++)
6 ]4 L6 u. @2 } {: M! O7 M- j+ e) e7 I: E
if (m_Item.dwId == dwId)
& W' \% \( e# I% ^1 X# ~( Z1 ~ {
9 k8 u, ~7 I) ?8 ~ return m_Item.nIndex;$ w, b0 K+ {& E% Y* l
}1 `( Q O% |) A4 p7 b) r
}
% Z0 B7 {. O" I return 255;1 b8 K3 H; Q& Y/ g. P: a& ?
}
9 @7 l+ ~% K0 N# ?1 p+ { Dvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置5 B/ k9 m$ \: v5 d7 D b8 `
{( m/ r- i! H( F$ M+ n
BYTE nTmp = 0;9 Z3 P, V' E& c i# v) S+ s
bool bDest = false,bSrc = false;' Y+ s! Q$ V+ w# U$ g
for (int i=0;i<MAX_INVENTORY;i++)
8 j* P3 O$ [9 f; w {
7 I- z; ^" L4 F2 F0 [ if (dwSrcId == m_Item.dwId)* J( `0 X1 b2 o& w- [+ Z4 h
{
& Q5 l' E8 e) ?% h0 y4 ? //id相等 则 改变对应的dest和src
( P# W4 F. Z: {$ z3 L! w nTmp = m_Item.nIndex;
' S2 h4 o. T$ b$ s& r. x m_Item.nIndex = dest;5 g( N- ~7 n6 ?! ]/ j/ K" j" {( G
}: R: S& h+ k+ g& @* U
}
' a6 [7 ~' e! M! h7 M5 g# a, x* \/ V9 R //临时数据保存完毕,交换开始) @$ @4 ^6 l! d7 q+ d
for (int i=0;i<MAX_INVENTORY;i++)! r* B# E- b0 X# X- G- i0 b
{* w3 M) M9 Q5 n+ }
if (dest == m_Item.nIndex)! d7 u. Y; o8 @" a# R0 c
{
5 T1 @9 d4 o1 v- p$ r+ n/ l2 k //id相等 则 改变对应的dest和src. {4 p+ o- M$ \; L6 |2 f, j
m_Item.nIndex = nTmp;
6 C# W5 f8 | N# n1 B6 n+ E0 N }
1 X1 N4 j* W' m' a" D8 K }* A% A% L8 d5 V0 Q
}
# Y+ k- T1 J9 s3 c1 O* U; ?};
8 l5 \2 c c1 I2 K/ Y, ~7 S, t$ Y-------------------------------------------------------------------------7 D o) I3 r( b9 l7 C) m& [
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
7 C3 x1 }0 U9 }3 `+ C" A3 S搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);/ a; p4 y* L) K
紧靠其上添加:
6 F* o; |- B" Nif( pWndBase == &m_wndMenu )5 K! [; O+ I# h- }) Z' f8 e+ E
{+ p! A# q. l4 }9 ~
switch( nID )+ O& o4 X+ x2 a3 r |
{5 f) S# F4 Y+ S- M$ R8 j5 W3 C; L
case 2:
2 `: y9 o# x y+ f A" |, R0 } {
4 u$ U |+ I& o; R& y //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
9 F# j; E: s, A, F3 J if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 q) Q' \4 Y3 V9 E. [, @$ Q" h {
' m% r7 ]; F% { break;
0 Y5 D, m; V0 O z9 o9 u8 B }
* x8 o3 A4 u% ?! L1 w for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
. G6 m% q4 Q, [& \ ~ {
/ |4 M* h2 u: B6 B) k CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);- B# Q5 J2 A# S7 K" Z
if( !pItemElem )
& d7 b" |/ T3 _4 ] continue;
. ^ g/ P) P3 |1 j: I/ q: b J if(pItemElem->GetExtra() > 0), w! a8 u6 X5 l
continue;* b$ z: u# F7 R9 K6 `' O0 G3 k
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) / j. O9 k0 m5 h$ g$ P$ z
continue;' L5 |1 v! ~6 P2 J% T) G4 b# J# F6 L
if( g_pPlayer->IsUsing( pItemElem ) ): v$ R2 x% [2 C+ {( @3 Q0 e
continue;
6 b+ H y% Z& D' W' h8 ^5 j# b if( pItemElem->IsUndestructable() == TRUE )
- ^) u% a& X: g2 ^* _+ `* D$ Z {! y0 c% A6 j0 U! `
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
: O7 Q0 y; F1 }( d9 T G8 z continue;
$ P' L% F2 ^9 j! a/ B }) H6 I4 j( G8 v
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
* `. G, f) r5 D, C$ w/ q9 k }( i9 r5 z% o1 B6 n4 p
break;
2 F" |5 L+ u8 J F }
2 P$ `7 n1 G" ` case 1:) M4 B5 ~& c1 |$ B. s
{
+ h5 ~% E5 Q7 `! i, M2 u1 S //整理背包
% O* ^/ [5 h" Q7 I& O9 E. x8 a3 s //////////////////////////////////////////////////////////////////////////
9 ^7 J6 U2 R, `0 B( a% s //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );6 x* _5 p7 L3 v; W( w
//////////////////////////////////////////////////////////////////////////* m1 f u: C* d8 O* N
//////////////////////////////////////////////////////////////////////////
+ Y% ^3 E+ h/ i( D: \4 R CInventorySort* pInvSort = new CInventorySort;
: M. _8 T+ f3 T+ ]% E' F vector <sItem> vItem;- o6 Q% C6 s/ G9 J9 I
vItem.resize(MAX_INVENTORY);//初始化大小2 o4 \ S5 L l: R1 c2 T: [6 s
//////////////////////////////////////////////////////////////////////////
: Z% b' g9 H# D. p" H6 H3 I: m ] //填充数据
" H; G9 z/ R+ \- _6 I) s& e: h# G7 `# J for (int i=0;i<MAX_INVENTORY;i++)
* P9 z5 [' q0 _5 S3 W {1 S- I5 d5 C0 Q
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);2 L* \9 K/ S+ `; C! Y% u3 L; T4 A1 s
if (!pItemElem)
# V) X: g- o6 C! Q {
. U) m9 b+ H7 V9 [& A" K; I) ?6 l vItem.dwKind2 = 0xffffffff;
0 U$ F7 O& Y% z$ f vItem.dwItemId = 0xffffffff;
0 c- G; l% @5 q) x vItem.nIndex = i;
; s- }" S$ K' K* q' O" y- z& g u }else {
$ u$ I- f7 T) {6 M, U ItemProp* pProp = pItemElem->GetProp();
9 F- p: Q( \( D& q$ D; q# D vItem.dwKind2 = pProp->dwItemKind2;2 ?1 N3 M- |3 l
vItem.dwItemId = pItemElem->m_dwItemId;
$ K* }; h5 ^( n7 Y& H. F vItem.nIndex = i;
& m T( h/ a5 S- D0 w8 y/ z( {' n }( k3 r6 M& D. u" B& Y
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
. o/ _8 y( X$ I% l" [$ b( i8 w }7 E; q: K& m/ T! l5 g. ~
//////////////////////////////////////////////////////////////////////////
! s% f0 A: _0 R. S sort(vItem.begin(),vItem.end());//排序
. } D# ?# h5 u6 ?+ c) B: B //////////////////////////////////////////////////////////////////////////
/ u6 p# l/ w. H! a2 c; z3 s4 z //交换* C0 \& j5 u! t l! t9 A
for (size_t i=0;i<vItem.size();i++)
1 y6 s- C. ?3 h; S+ D) f5 N; ` {
! T+ s4 u9 X, d# U/ c. [5 B //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);+ ?9 H2 {( q# n* g8 y1 E
pInvSort->Add(vItem.nIndex);
l1 p$ H. Z7 R2 |6 g; o2 o; s }/ }0 D- y. n6 u! l1 R# a- @# Y
BYTE nDestPos = 0;. u: z0 d6 b: p
for (int i=0;i<MAX_INVENTORY;i++)
2 F3 {5 ^' e+ `1 g# X5 J3 f {# a* B* ?% W( P" }/ k5 I% b
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);) l; d7 R1 j2 W( Y/ ^, { E- V" M" u
if (pItemElem)
* k5 P$ T) B' k) k0 _/ m/ E {, c3 X+ K/ I/ M& P) V" n) X
if (IsUsingItem(pItemElem)). {) R4 t4 n$ [% L
{) z+ s. X! p/ I9 _6 a
//这个位置无法放
( G, R4 k7 S. _( }% J! z$ C4 x nDestPos++;9 f, d$ B$ N" @ f- d+ W
}
/ l( @' h- B1 c3 z }
y. J4 s3 v$ d& s& Q BYTE nSrc = pInvSort->GetItemSrc(i);
* r% H9 x7 c: W7 V pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);! {9 n! t$ q+ |" O
if (pItemElem)4 H j, r1 I, a- D
{/ }7 g6 k7 P2 T2 M6 ^; J5 A
if (IsUsingItem(pItemElem))1 R2 m3 R9 Y7 W# [7 N$ |: A% C; w
{
- F. H D& H7 q# a7 f2 Q% _ //这个道具无法移动,跳过0 I, E; S0 {+ \5 u/ T! t7 r
continue;
! S9 r9 t* |+ u! ]/ U9 N }
b) A! b' t- F8 l }else{
5 @7 g( F% C1 k* v1 p0 B //空位置 不用动% c2 f" m0 h P0 C7 G6 R
continue;; \6 |9 I$ W4 {2 J
}8 \0 ]3 J0 [" S
//////////////////////////////////////////////////////////////////////////$ q8 d9 b& {. I, \
//开始移动
$ a( g" G, A% c# Q( W' ]! I if (nSrc == nDestPos)
% q; e+ X5 g' ?- X {
; m- }( y/ S( O //原地不动! z5 `; K6 C. \& u( n) z$ i
nDestPos++;6 N3 Y/ m' @ u% G$ i) K
continue;! F5 I1 a- Z: @ I+ J
}4 J) }& ?7 b' E# a9 f) U- }8 U" S
pInvSort->MoveItem(i,nDestPos);
1 B) j8 c' \' Z, I) ?& X g_DPlay.SendMoveItem(0,nSrc,nDestPos);
) o, T4 C# x$ Y, f* h& ^+ e! C2 | Sleep(5);
6 W7 z* Z! J l! N2 B //Error("移动 - %d->%d",nSrc,nDestPos);7 s7 C4 V7 w. R& s$ _* H* {5 ~/ A/ K
nDestPos++;
, x7 N' R% A) f3 F* e, H; T }9 |% f, Y; w3 u. z; W
//取第一个元素的信息 L$ ~1 |5 Q5 W) D( n
/*6 N2 B: b0 g9 x9 C0 g4 @% N
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff): f$ i8 s( k5 V0 |
{) U8 {; w; H7 X5 d% |
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);' F! [) ^6 d3 V1 F0 O5 p7 @
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
8 ~2 n) P* k$ e9 a( l8 c8 @) p }
. i4 h% L% x. N- }: _ */, T7 ~# t( [5 A) Q, v7 G1 V- u& T
//////////////////////////////////////////////////////////////////////////- n& C& J3 q5 k0 l4 ?& s; y( V
break;
$ B1 X' B1 S) ^7 a$ Z+ K }
/ y9 y1 w/ ?/ D6 {/ k; | }
+ a. Y, c4 C$ ?, I; o$ ` D, k8 \6 l}4 \1 I! H6 u! O, Q5 P7 w
m_wndMenu.SetVisible(FALSE);
8 X. m- E7 P1 \' x( i1 U
L6 X- e6 m% E, [--------------------------------------------------------------------------------------------------------
& u' z6 v0 ?7 w) d搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)# R2 p( c' G- P5 ]9 {
{# e1 o' n! x. f5 Z
BaseMouseCursor();' }! k: E% S3 n2 I5 O( ?+ t0 l
}9 S4 J1 F0 g0 S. y* g @
在其下添加:& x; m: }& P+ y7 v
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)! ]" G2 X1 S* y6 d9 W7 j; C
{
W# q- J S) zm_wndMenu.DeleteAllMenu();
" m& h7 l( H* s1 i' nm_wndMenu.CreateMenu(this);
6 i; K2 X( L) j. @m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");0 i- d1 \! K2 n! O" s4 B% a' w
O7 ^4 M- C! |1 i0 B' [) I; Q% a; E
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))7 j) f# a& L9 p
{
% f0 ]' n4 _9 Q6 ~" {, A, ^9 v& v //P以上级别才可以删除所有道具$ s% E0 _' F/ m @7 R- U0 V; d$ V( ^
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
$ p/ [; X. l* }: i: O}$ w8 k& c, g2 a# G j
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
3 G3 X# A& F: C. Jm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
4 R/ v( Y% n" Fm_wndMenu.SetFocus();# y* f! _8 r! ~: g- Q/ u8 T. v
}
% b. a5 @! y+ U* J7 ~; S- z* v& D------------------------------------------------------------------------------------------------------------
$ ]" t. _1 X. A9 z' Q! B% l1 c8 d9 B*************************
2 a1 V% L/ a5 WWndField.h文件2 j: c4 ^, i# ]4 \
*************************6 B- ?( l1 X' ~3 F$ n' x
搜索:BOOL m_bReport;/ U9 t6 k* L6 e6 N# g+ e
其后添加:8 n3 j% u5 L8 M% M+ n6 u7 X
CWndMenu m_wndMenu;3 b1 \5 {6 V- @2 u& K8 m8 H
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
4 d: e% r' U; k" ~7 Y% v其后添加:, D4 P" ] M- W' ^: q& C
virtual void OnRButtonUp(UINT nFlags, CPoint point);
+ P9 C5 w0 [+ ~7 |1 @* ?
6 B: G* q" p7 @5 Y) }- V- V8 z, _( m( B
|
|