|
|
源文件中_Interface文件夹下WndField.cpp文件6 A) G( ?- I* |
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
$ `' R8 j0 L5 K! U, z0 Y8 ~7 {# ?, f" l4 b+ _. P% I5 M
struct sItem; C7 x! A! l. N- A
{
( s- `: H* Z- C2 }' I+ f6 gDWORD dwId;
' D) E3 H5 }, J9 ^- N8 u5 @7 ]2 IDWORD dwKind2;
4 i+ F" Y( \* |' A( ^. s' `DWORD dwItemId;: R: ]) `/ R0 C) A( I/ C
BYTE nIndex;
, S. @6 f* l0 d# ~1 }sItem(){: g1 J& H/ w: B2 U$ s
dwId = dwKind2 = dwItemId = nIndex = 0;
& M) n' `6 b$ H* V% ?1 X" p" ]* h}: ^' t& B3 j4 z8 {% Z5 [0 ?( }
bool operator < (const sItem p2)1 t% m" u& R9 h, U( v
{5 F2 p0 Q4 D: I( C
if (dwKind2 == p2.dwKind2)
1 L! v$ ?9 c- s# A& J {3 m, i5 J2 z; d' O9 `. t5 P
return dwItemId < p2.dwItemId;8 z7 e% F" f" n9 q4 N8 l. S
}else{
8 `9 \; @2 ~* t( u) X: t1 F return dwKind2 < p2.dwKind2;1 Y9 S* h! T/ P, m3 M, Z* A$ R
}
: T% n3 L A0 {% b0 b" o7 q}
+ r- y" N! a4 J- j};
( x9 U8 B% r0 Y! I- ^class CInventorySort
' r0 h2 h- O+ m, b0 C% O" Z{5 R- t$ `6 ]3 n) k0 J
public:/ L* t3 @ d, a5 D
CInventorySort()) U3 F0 W; i. l
{
6 D* Y& @( V- w5 y1 G. I m_dwPos = 0;9 b+ Y* o% `& P+ k' A0 C5 Y( j. k! V
} }* u1 r6 C& C# U1 m
~CInventorySort(){}
: @0 z" p( t/ Z0 }* Rprivate:1 N0 T/ X7 K$ z" F' m! m$ d
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
" ~: V& H4 v9 \/ w6 cDWORD m_dwPos;- V$ S/ m" n* d+ y: H9 y
public:
' M' U7 j# D% e3 Svoid Add(BYTE nIndex)7 G' }5 c: N: P/ g6 }. [( k
{
; Z$ O9 W/ o( n3 w3 Z8 l* t3 c* J if (m_dwPos >= MAX_INVENTORY)
! F* K. n/ c Q% m3 J5 T# l& O {, {5 g. p5 q" I/ \$ G5 j/ J, f
return;
/ k% Z9 H# Y9 q$ y9 x }2 A7 A7 [! I/ E0 g. u
m_Item[m_dwPos].nIndex = nIndex;
; S5 _' A y" R1 ]2 X! y* K& Q m_Item[m_dwPos].dwId = m_dwPos;
y s& r, P7 s+ `) W4 S m_dwPos++;5 g( F u! V: V& Y
}
7 v6 B' w/ @ G7 Q* JBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列! v# o& O; [3 ^- z5 w& S
{
% w5 ?( S o4 c$ m% ? for (int i=0;i<MAX_INVENTORY;i++)& p* z3 ~$ N. G- _3 R, ^
{
$ o. \4 t- D! F A$ C6 Q if (m_Item.dwId == dwId)& b; j: Y, s3 q! |: }! b
{
( u- K) T* ]( e3 J0 v. b1 ` return m_Item.nIndex;
7 l" Y9 f& g8 Q( ~; m9 y0 t3 [ }
) j$ D7 B1 A3 A! ~( |' a }
3 _. v5 A. [5 \ return 255;
0 T$ I; B& y5 B, Q: i8 q}
8 l1 m7 J5 X5 `% Q8 l! j* hvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
0 N' ]. y7 w4 A$ m% F9 F{
* _/ {6 q0 J% `' X) H. N BYTE nTmp = 0;! Z8 _) E1 Y# ]. v
bool bDest = false,bSrc = false;# b; o9 W: r: R; P# Z$ V) J
for (int i=0;i<MAX_INVENTORY;i++)& q, Z2 J5 b, P _ S
{
( Y7 |5 \ \' n \/ t g5 J: t( i if (dwSrcId == m_Item.dwId)
( Q+ N, r9 Z9 {' k% T. [0 Z! b {
& \6 V- y, V. V7 [4 y& J- G //id相等 则 改变对应的dest和src
$ Y* h( w& u: R" m, ^( z$ y+ I% T' N nTmp = m_Item.nIndex;
' T0 `. `! S) @9 h. u2 Z4 u" I; N m_Item.nIndex = dest;- O- B- `9 ]6 q! R) X
}
* a; R2 u, f' q }
; y; {! u% l$ l) E2 y //临时数据保存完毕,交换开始
# ~! E& ~! r# R& \8 m; N for (int i=0;i<MAX_INVENTORY;i++)
5 k8 f' t0 U; a0 H* T {- t# F6 o# b2 ]1 q& E" C
if (dest == m_Item.nIndex). E: k3 d. D# @- E+ j- X, V
{6 b* `& U* I% P3 k
//id相等 则 改变对应的dest和src
- h0 x$ {( V8 I7 d; ^( l/ j m m_Item.nIndex = nTmp;4 Q5 |" S! _ T# b6 E0 A$ l( e
}9 r# a. i/ H. ~2 A! r# R4 o
}5 Q7 A* Q" ]: B# T9 X3 N
} W( S( z8 f S
};
7 {. o$ I6 N0 D! b( J' G* m" I-------------------------------------------------------------------------7 \; q8 V( y+ h
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )9 y4 F% T3 g$ W& W& w
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
7 Q3 H g+ Z( P紧靠其上添加:
- p$ x) @5 o8 H6 s4 O1 L* ]if( pWndBase == &m_wndMenu ). q% r# p% t7 V7 F! F7 y) W p
{9 G( }7 G* v* [5 V( k2 I/ @
switch( nID )+ T8 Z/ \! m' j6 [, V/ t, s9 B; H4 N
{5 E# y. j6 S( s
case 2:
/ y4 O# x& E) n. J3 @! m$ s {
' O7 d- K- I4 e1 S0 w //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
" \2 X& R: m; K if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
3 f2 g; [; B2 t |3 t m) z {
4 ^8 a3 H; R, G6 F, d& x# Y0 Z: A break;
$ E5 T& f! O# V' m/ h; e }
/ u. q, }, h. P/ k5 D2 d* S! k for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
9 A' U+ ~/ j% m9 M- J5 s {1 G: P2 N0 }) d8 o. q2 G% V
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
8 u2 B0 @- I9 D7 H. I if( !pItemElem )) C5 ^+ ~ z" n% t
continue;% r, Y) O/ c. h2 d' {
if(pItemElem->GetExtra() > 0)
$ |2 `/ o' l7 \% q. ~9 B continue;, C9 d! x% V* f) k% g
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
, p4 j, F7 g/ ?- S% U/ g1 Y continue;$ c8 o" ]9 J8 m) F, r$ }# v
if( g_pPlayer->IsUsing( pItemElem ) )- J% D# k5 p: I( F5 N3 B3 }
continue;
* l- V5 W" I( P5 G6 H if( pItemElem->IsUndestructable() == TRUE )' o0 g0 W: [% ~! l( ~; y v
{
& F" U. G2 F0 }" V: i g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
: n9 n# Y! \8 ?) {8 v8 C continue;3 B' D# v0 Y7 f- N1 X( N1 P' G6 i
}
9 e. e& c/ b& }4 y1 B) G g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);! }1 G0 N: F1 o5 c, E. l1 p
}
3 G/ F$ Z5 N" j9 s+ {; u3 j break;# Y+ a& S0 H7 n2 l6 X* D
}" t' Y( h% `2 h6 \6 D8 X; A* v& c
case 1:
' V4 Y6 u" G g+ y% Q6 p {% Q Y+ }3 ^) i" T9 m4 v
//整理背包
+ D$ V# V% S l' R" _7 J3 ^7 x //////////////////////////////////////////////////////////////////////////
7 @- p$ o/ m' @$ k //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );5 P( k1 \& R, }( F
//////////////////////////////////////////////////////////////////////////9 x) d" L, e* P w
//////////////////////////////////////////////////////////////////////////0 n# M; k: T$ ]1 Z( a: a
CInventorySort* pInvSort = new CInventorySort;1 Q$ S! W0 B- J9 U, v' W4 o
vector <sItem> vItem;) ?1 d9 M$ e+ N
vItem.resize(MAX_INVENTORY);//初始化大小
. P6 V3 P( j/ o7 e; b$ s4 ^ //////////////////////////////////////////////////////////////////////////% o; a# G9 g0 s4 B6 k+ H% Y/ z
//填充数据1 V# U/ @0 ~! ? b: s3 |- O
for (int i=0;i<MAX_INVENTORY;i++)
# X% m' S9 [- _4 p c' V* x {7 I- D" f3 q' M
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
' I! Q# b7 R: m1 J- ^ if (!pItemElem)1 j2 N! C4 a3 q2 t
{1 g# e* {/ z- G
vItem.dwKind2 = 0xffffffff;
. H% Z! [! Y" e vItem.dwItemId = 0xffffffff;
) Y& o$ }* ?4 V. C0 A( t vItem.nIndex = i;# W) k! I. [$ b6 n3 V! M( k
}else {) o. T9 X! B: e) e
ItemProp* pProp = pItemElem->GetProp();
9 h3 T9 z. \# P8 ]; M3 @5 e/ h vItem.dwKind2 = pProp->dwItemKind2;
. p0 l) g: M- X9 Q9 M u2 R vItem.dwItemId = pItemElem->m_dwItemId;! h! F! O" N9 U/ ~5 j
vItem.nIndex = i;) {; k0 H+ F5 T# n% O9 H1 A6 j
}
5 d% L( P& P$ i; l //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
' W* d" `4 f! H. V9 x }3 Z C+ E% g# s5 P4 x1 q0 ?
//////////////////////////////////////////////////////////////////////////
1 _' V4 u4 R7 ?6 V7 i sort(vItem.begin(),vItem.end());//排序: Y/ @% V& ?# M5 g& [2 v# @; b
//////////////////////////////////////////////////////////////////////////! U7 g# a! Q9 O1 H6 |
//交换# J6 q2 P* f+ M9 \* {2 _% [
for (size_t i=0;i<vItem.size();i++)# o- [9 K9 y6 P
{' O: r3 R5 x2 O% M1 u1 i( C; K5 k V* u
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);" N. z# c3 ^ h4 m5 y4 j
pInvSort->Add(vItem.nIndex);
- L6 ~5 F: n0 m }
6 _" n0 ]$ A8 ?) @0 ~4 a0 R BYTE nDestPos = 0;
$ M- H+ Q* N9 [) ^. Q4 s for (int i=0;i<MAX_INVENTORY;i++)
* |0 i4 R9 q% Q. _, j$ }. C {$ V- U9 W! o7 f3 d6 D0 @9 ?7 h( N+ ]8 w
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
( g0 T5 V) H7 ~; q8 d if (pItemElem)
7 a; x+ a* O4 J( k$ ^4 Y {
! d7 ~* w' D- a2 Z) L( \; K5 | if (IsUsingItem(pItemElem))2 Z W9 t+ K. T. J& W
{+ z' u- w4 U4 N5 t* J
//这个位置无法放' ]" i3 T" B2 n3 X. c% d: a
nDestPos++;
6 m, V) D9 h1 R% @" j/ L5 g" { }; v1 S* V+ `) F( D
}# k i/ l3 M5 ?) l
BYTE nSrc = pInvSort->GetItemSrc(i);
% r% T3 E3 B& N7 ]. H pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);) U, O5 A2 ]" |! C( _
if (pItemElem)
5 [2 w) C# C, N6 I6 Q8 H {) w1 F* {0 L. e( R2 p
if (IsUsingItem(pItemElem))
% o e ?% ^7 V {; u! i- C6 h; K0 {; w
//这个道具无法移动,跳过* A* W1 \4 I; W) t; T) |/ c( d
continue;' x) v# q1 _2 c8 Y+ m0 F9 ?% n
}
, }7 `3 X" W* X) L6 A, i$ ]6 l }else{
4 V! t' W+ } Y }8 z# z //空位置 不用动& o8 u9 |9 ?, s9 W, c) ^ Z
continue;
% ]8 E- Q& ^: y4 @( y$ e. [ }
7 P% H" v; C W //////////////////////////////////////////////////////////////////////////+ o# i. e n7 {
//开始移动
4 F9 E$ C. V" Z2 J if (nSrc == nDestPos): H* e# }" _- C# v
{
* f" p! F4 z, h, m% ~1 ] //原地不动
" X8 k7 ^! {1 A# {0 x nDestPos++;
' U) b0 i: S0 ?" e, n! v continue;7 w" e# \0 b! w* l# l: ]4 _$ O2 w
}5 w. D" ? M( u; b
pInvSort->MoveItem(i,nDestPos);
( Y8 _/ _, C* r0 ]( K0 h b g_DPlay.SendMoveItem(0,nSrc,nDestPos);
4 m- C2 q. s5 R! ]2 V; y* e$ c2 I Sleep(5);
, f: N( P2 D7 E+ t" A, K //Error("移动 - %d->%d",nSrc,nDestPos);+ j y( y3 `7 A$ }9 \0 P
nDestPos++;1 Y4 ?! ~1 w* U0 g
}, y& Z0 m% L2 h g- |) o
//取第一个元素的信息
' ~4 k7 s+ Z; D5 o% o5 f9 i /*4 E7 i& K' |5 V( I* @, Q+ y
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
8 H P* d6 s0 O3 w {5 X {
# P/ }2 U# O8 o" d. P Error("Move - From:%d,To:%d",vItem[0].nIndex,x);" N/ b& d5 N2 y8 R0 j) z- z
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);& \' C- ^' A8 I6 ]& B, i
}4 {9 N( Y, A% p
*/
9 ] s$ j$ h2 W# _; i //////////////////////////////////////////////////////////////////////////
' J7 k' |- P9 x break;
2 s+ t! d- i8 N& j }
$ ^9 k. _6 v0 L4 y- d5 K% } }
& \8 I! h% p# {$ R}
! ^9 M# W/ U) s& I! A! Tm_wndMenu.SetVisible(FALSE);
7 ^) M& g3 H9 ~2 V1 a
: c) S w. r1 m$ }3 t4 _: W9 T--------------------------------------------------------------------------------------------------------$ M6 E3 x5 F# k7 h' b+ ?5 x
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)4 {# g9 E0 l- e5 M
{
; }4 N# Y- P1 f! r6 bBaseMouseCursor();
& q7 L, G C: R7 d6 @/ X9 w6 e}! u8 ~$ ~" h. s g! b k9 I+ E2 E
在其下添加:$ B4 u+ `% q* [- L `: |
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
" |8 _8 _6 g) m( ]) `; ]9 A8 F$ E{
c! W# T5 N3 q. J2 Km_wndMenu.DeleteAllMenu();7 o) \4 f$ Q7 c3 D6 [0 F, \2 U
m_wndMenu.CreateMenu(this);( S' b2 Z2 p; w) ?/ F- W& P
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");3 [- z7 {6 I8 f$ @- p# T# V. r
* f# V8 G) O$ r+ X" k2 G1 ]if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
; F, x. r8 n- U* S# ~) z{9 p3 r; k8 u. A" b" A) S- a
//P以上级别才可以删除所有道具
* E$ w6 `0 W" t5 D* N% T+ p' v% t m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");9 }4 r q2 }; k* V
}
% h* e7 m. g {1 m- X8 N. tm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
; k0 Y4 |! `1 @, O- o5 ^; Xm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
, F! y7 d$ T1 H' sm_wndMenu.SetFocus();% F: S! x2 J, z8 p
}
6 i8 S& C; N# c9 F8 C9 a! ]------------------------------------------------------------------------------------------------------------
0 E* a7 D+ i3 ^/ O* b! C/ R*************************
~8 h5 J) C! o$ m# ^WndField.h文件
2 Y9 m" c; R/ f( Q" _*************************
" D/ R P! e% T- v搜索:BOOL m_bReport;+ @7 [4 E$ R6 f' ^
其后添加:
* c# K! M& i( k0 F4 \CWndMenu m_wndMenu;
) U! E, m6 H: {% D; I! |# L. s8 n搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
( [& _! {4 R s" N其后添加:
; n5 @) b- `# u# W3 _: ~! k/ Dvirtual void OnRButtonUp(UINT nFlags, CPoint point);
8 R3 u. Q) X9 d% I6 B
0 {6 S" x |0 {4 z, V' F) [: A/ B2 Z1 `( H6 K/ i
|
|