|
|
源文件中_Interface文件夹下WndField.cpp文件
3 Z. I/ r" ^2 X: q A搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
5 v+ ]% o- e; j3 U! m6 u! Z u# o( C2 U7 l( ^
struct sItem" f3 ]% D$ C# x5 b, ?
{
; T+ H7 H$ G' o" P5 M$ r6 wDWORD dwId;
2 a9 i, E+ \0 N9 p0 LDWORD dwKind2;* s( B! \% {4 z1 c
DWORD dwItemId;6 V. r' c5 b, I v5 V
BYTE nIndex;
# R' ]% d; [: e+ _6 BsItem(){& I$ {7 [/ u% n. R* r9 ~- J+ h
dwId = dwKind2 = dwItemId = nIndex = 0;
4 c$ y& A- g7 L* G}; D }/ J# C! ?. ?! T! g
bool operator < (const sItem p2)7 }, R. J. S5 t
{# \( L2 g5 |! W) ^5 i
if (dwKind2 == p2.dwKind2)
0 Q* q, G4 Z9 @+ X! _! ~* h {
$ }. F# Q9 z/ s3 X! N, I" g return dwItemId < p2.dwItemId;
r; ]" j- \7 o3 `* S: c$ }# ? }else{
0 k) B% W* z2 B7 v4 U. P: n' O return dwKind2 < p2.dwKind2;: U+ \* S% ? y f
}
% { Y, t- ~# ~6 k}
2 M2 v5 `7 p( @* r4 r: I$ R};
. ?% v/ _7 H w u# Nclass CInventorySort
5 f2 v* U8 M$ `' Q4 x$ Q{
; y8 m* Y/ `2 _; x% Vpublic:7 M3 j& K e! ?# M9 `
CInventorySort()
5 i% s# i, U# T- Z8 r4 P9 [{) }2 X) B0 M( c
m_dwPos = 0;/ S4 Z) O/ i0 r5 n3 o5 Q
}
J m/ c; v' |) P~CInventorySort(){}4 H8 B. m7 o/ r2 n0 E
private:
$ @/ s( _* o. B% m. l4 O/ ?2 Y' M: QsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息$ e$ x( m9 C5 M
DWORD m_dwPos;# L0 ]% t/ {! k S3 z
public:" ^: n1 X# E! v% o
void Add(BYTE nIndex); u0 O" R k& c1 `7 G" N
{
) w* y3 C+ o" S1 i" b& K9 X& G if (m_dwPos >= MAX_INVENTORY)% u+ H( q6 g% c# \# y8 C1 i4 y; p
{
+ w& f2 V' p& Z5 r5 F* q return;: P$ m9 b% z' J, x: s& T( S
}
~4 Z( ^' M0 g; w m_Item[m_dwPos].nIndex = nIndex;! u' _$ o* x' H$ l) f
m_Item[m_dwPos].dwId = m_dwPos;+ @# F" v. E0 {" ~/ T
m_dwPos++;
0 @/ K ]: K' S2 R3 l: H}
/ u' B1 R) Y8 S9 _4 x4 gBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列* D$ ` v! G+ B' Q
{
! u$ Z& e6 N" `) d' z for (int i=0;i<MAX_INVENTORY;i++)
+ k% A8 n- l/ _7 W2 C( J {9 \! b7 P7 Y* E- h$ C @8 y8 n
if (m_Item.dwId == dwId)7 u `: ~) ?. E2 o9 c. c8 O4 B4 `
{& K/ `8 r/ H. z6 r
return m_Item.nIndex;' p. g: ]( F- I3 m7 l9 K* e2 P
}' [' P; U/ M- L( d) l2 y% }7 ~
}
4 F$ T1 a L7 u/ I% q' l return 255;
# {3 @1 N* ^) x9 Q' H}
; S. ]6 c p* svoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
8 X6 b! [9 o5 A9 p; _{& E3 m- A$ \3 v' B
BYTE nTmp = 0;
" z i; l: n4 X5 I7 _! i2 W$ r1 g bool bDest = false,bSrc = false;- T. B1 E- M, h2 w7 e2 |; l$ C
for (int i=0;i<MAX_INVENTORY;i++)
; R \/ T- \& X {3 [& _7 e2 e0 s) _7 B f- A! `
if (dwSrcId == m_Item.dwId)9 \; X" u6 a& q& s; s
{9 x! u/ g! ]% j/ F! r( F
//id相等 则 改变对应的dest和src
. [! f# ~5 d0 }& R; ]! } nTmp = m_Item.nIndex;
7 Y- k: w I4 C m_Item.nIndex = dest;* ]/ M5 u4 t" E1 ~
}
9 Z5 D7 m5 O+ v% O0 J }
; i0 }& ^+ n7 b9 @ //临时数据保存完毕,交换开始
% e+ \$ m0 j; s1 ]2 D0 i9 { for (int i=0;i<MAX_INVENTORY;i++)7 y; D% s6 v$ I0 w7 Q
{
7 R2 |5 J' O! ]- `6 I o5 c5 W if (dest == m_Item.nIndex)9 y7 Z0 \0 C; t+ R; ~
{
& L7 Y( a" ]3 E8 E' p3 g //id相等 则 改变对应的dest和src# Z2 ]3 N( T6 F! r% {( W4 Z s9 v
m_Item.nIndex = nTmp;$ I& ~, E! h8 B7 x/ ]8 w2 @; G
}
9 ]5 H' r* U4 q+ s( z9 R* m& V }
" @, q7 o; c Q- D) i8 e} [* j2 L# v9 G( ^- G
};
2 A b- \. s3 t1 d3 I-------------------------------------------------------------------------
# x$ G7 _% y+ [. w7 F依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ). _! t$ V- a+ y4 _
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
- V6 @# ?1 H& y l) {) I紧靠其上添加:* d. ?+ u7 ]8 S; f# M
if( pWndBase == &m_wndMenu )
. Y9 b5 o& ~+ F- B; w{
5 G3 u# `+ a1 c: @+ E7 } switch( nID )
* h, U! ~5 Y a4 S6 { {
1 F$ W* s* q# q v5 ]# H case 2:/ i5 L2 r- w1 M% n* Q; `4 D4 N+ f
{
. g( K. @- ?( J% B9 K; x //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);3 k6 t" Q1 Q. h" |8 P' S f
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))9 d$ K! f5 e& m( i
{" m `* A2 o0 b
break;
1 Y. K- |( N' c }
- r' M, X0 Q6 W. n for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)% }5 m. l( _: {1 r
{" b: h: I+ P' d% m
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
3 [; G* b4 O! O9 L% J; K' b if( !pItemElem )7 E* z' @5 w; t% k8 W; d$ U! U* o
continue;
* L6 }7 o% N. V; C6 d/ e6 Y2 w if(pItemElem->GetExtra() > 0)+ A! p: x( S3 S' q, G' ~
continue;2 u8 b& y2 w. c! K/ X
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) & c) V. A6 O3 A6 ]
continue;
% i: j9 @3 K D4 D if( g_pPlayer->IsUsing( pItemElem ) )
( S( g5 Z" a9 \7 V, e8 {* X$ g continue;
! a$ l1 T2 b' M/ f if( pItemElem->IsUndestructable() == TRUE )
% }; p) B9 X9 P# b {( f% r( D) M; d% Z0 \- C4 z
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
1 A& d5 u" }4 S N continue;
* G3 e1 T3 A3 h# E) |: v }
& F# n% N2 H* _7 c# z" a2 i& ] g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
! O1 R6 K ~0 g) V8 ] }
% x. s5 ~% u1 l break;
* }" C6 S2 A' P4 O4 k' { }
; }& f5 x" z. Q$ U; ]# _ case 1:
! N4 E( U' S8 K5 u; t: d {0 f* B0 K( o' ]* R3 n: j& w2 c R( N
//整理背包
% w/ @! J# q7 V6 d3 _" t9 @. s //////////////////////////////////////////////////////////////////////////
2 ? I# K* t' z: Y //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );5 F# R, e2 I( O, }
//////////////////////////////////////////////////////////////////////////( T7 S% T3 u! K2 r8 i6 f2 o
//////////////////////////////////////////////////////////////////////////5 D6 M8 H# W% F5 S
CInventorySort* pInvSort = new CInventorySort;
8 T# ?' D) ]- L; O2 P vector <sItem> vItem;
( I" {7 E& y1 m3 H, R vItem.resize(MAX_INVENTORY);//初始化大小
3 { f* c7 ^& P; r0 S6 m% H# k //////////////////////////////////////////////////////////////////////////. {' q9 m( {* J! L/ @; V) E
//填充数据; i0 k4 T: T0 c, k8 b: I8 n
for (int i=0;i<MAX_INVENTORY;i++)
, [2 _' j! _2 k6 `" l8 N {
: \0 d; D: |) L; b! |$ c; U CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);& N1 \' C) n1 b$ H* F( D
if (!pItemElem)! Y4 U- N0 S4 D
{
' [; j4 ] p8 \+ F% ?4 L8 F: ^ vItem.dwKind2 = 0xffffffff;# A3 I, ?# X0 F3 x9 r
vItem.dwItemId = 0xffffffff;: h( F: M, B P4 _8 ~
vItem.nIndex = i;
- g8 z) h6 }$ \. ? }else {5 w6 M$ b8 Z6 Z" L0 g" l3 y' o4 K
ItemProp* pProp = pItemElem->GetProp();* B. N A7 V" r1 E
vItem.dwKind2 = pProp->dwItemKind2;
# A: d: y* @ t& F- f vItem.dwItemId = pItemElem->m_dwItemId;
% S8 x! _! N6 ^1 w& A vItem.nIndex = i;* g/ T% L K0 D, g
}5 { b& v, e) C7 Q3 d' ]$ h
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);' X1 j0 n- Z6 U, [7 w6 e! ^5 f9 m
}3 J. f" B. q t3 _* Q$ @
//////////////////////////////////////////////////////////////////////////
, B( t. k: C5 K: L v sort(vItem.begin(),vItem.end());//排序
* b" \5 N' Q. F% ?3 D# f+ @ //////////////////////////////////////////////////////////////////////////
! Y0 n0 J1 M Z0 I //交换3 Q `9 w5 W3 f4 _2 A" I
for (size_t i=0;i<vItem.size();i++)+ |/ ~, p6 w e( {
{
7 n, B( c0 @( b& i //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);2 t5 v$ y2 R; y5 O. K
pInvSort->Add(vItem.nIndex);4 E$ M, c& F- Z' B: [ c
}
1 s& T5 A& m2 i6 U; K: Y BYTE nDestPos = 0;
& _& l+ H1 e o, s$ I for (int i=0;i<MAX_INVENTORY;i++)
; h8 W; ]# u( }1 } {4 k: E0 I7 T3 K3 c. S1 I1 U2 u
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
( O7 S% z5 N/ u3 C- U if (pItemElem)
. ?6 d5 m0 B+ g5 J& a% D3 u1 j {! q M9 Z% u0 M
if (IsUsingItem(pItemElem))
/ w$ F" D$ h: H" H/ i {" f2 V( Y. y* V, B( k K
//这个位置无法放
; U3 G8 [& r9 v5 Z* E* W& e nDestPos++;
' T {8 ?8 W! m( g" B }( s$ U; Y% w! q- d4 _; J
}
9 d% Y' i3 |+ X/ w. P BYTE nSrc = pInvSort->GetItemSrc(i);
, h1 `# j! O9 V1 L9 t' Q pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);9 g4 p$ i9 E1 b& w8 P
if (pItemElem)
+ @8 [) A: i. v# w {
/ S' I! j$ ^6 j/ |) B% ] if (IsUsingItem(pItemElem))
g% K6 \0 U9 u {
. i+ G% G% [# W- S* v //这个道具无法移动,跳过
8 ]5 C" U0 v4 n5 z# r continue;
; p. C6 C+ w2 C2 S* d; a# [. O7 M a }
$ q% w- q% V7 L( _0 r0 Q }else{/ |6 \; v, Y t7 g
//空位置 不用动
" P2 ~! b! W$ s2 L. e' O continue;2 b* l1 ?" v" N6 k
}: k3 t, X5 B' k5 I9 V% s8 Q9 p
//////////////////////////////////////////////////////////////////////////* F- v; C) C }6 U2 h
//开始移动- r: d) q+ e$ R5 P8 g2 E5 @1 u
if (nSrc == nDestPos)
m/ _3 I9 U/ U {8 o% q; O, I8 x8 L
//原地不动* a! Q: p" ]. Z( t' Z
nDestPos++;3 B* ?( H& \/ x2 k& ~0 ]' E: e6 @
continue;
4 n" c3 V' D$ }: n+ |: V( E }1 [4 @; @8 G. W0 e5 r
pInvSort->MoveItem(i,nDestPos);
6 G3 j( C! i* p g_DPlay.SendMoveItem(0,nSrc,nDestPos);
, i; X% Y# B! }6 P Sleep(5);: Z E9 {# P4 |9 b6 G* O$ J
//Error("移动 - %d->%d",nSrc,nDestPos);
- E& |0 u6 D: t7 Q5 ? nDestPos++;
& @# X8 h. M b8 O: L }
7 R: H; d5 f7 F% S //取第一个元素的信息 W3 L% f9 S. h2 |2 C/ N) K: T
/*3 f5 H h" M2 t% Q% a9 W. }
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
9 `3 s- B: A: d& |3 h* M {
$ \- _% e- b; D/ i. M8 s' E/ t Error("Move - From:%d,To:%d",vItem[0].nIndex,x);& O" Q; o* h) C4 |/ @3 L
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
& N+ q& C" J! D0 k8 M( k9 e/ {! N }
: w9 z9 d/ @4 u* H+ F/ C) A */
0 O, b) ]3 I6 I- p9 K //////////////////////////////////////////////////////////////////////////5 @ d" t7 f6 u8 H" u+ `" k
break;6 x: d9 ] h# |
}
; D) n+ {& `! l+ I4 M }
' F* g' n3 b: n. p% E}
" t7 [% l S5 R8 _2 c- `4 O' \m_wndMenu.SetVisible(FALSE);
! U1 u6 s( M# j, l" Q, n8 o! C* ?$ ?/ c0 Y/ F# Z: D8 C. I% m
--------------------------------------------------------------------------------------------------------
1 |* V4 p4 m" X- F搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)7 @9 a# X3 A0 k* `; j
{
3 D! `' G" E, P3 M4 rBaseMouseCursor();
" t _/ D" M8 @. ~. P} K$ i3 F3 z9 A5 k; [/ N
在其下添加:0 W1 t/ g1 U3 {# p6 Z3 Z: [8 z7 w
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)" F3 M9 L1 q! J' C5 j, W5 F
{6 \( y2 y1 U+ x
m_wndMenu.DeleteAllMenu();7 }7 V" o* g/ q3 C6 C! t! l
m_wndMenu.CreateMenu(this);; d8 j) ]: U" [1 @+ D) Y" p
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
4 Y8 c$ [& X0 p* J7 M! Z9 _7 W. ?. E! ~4 ~6 K" s- n" X1 u- B( A
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))1 x* _1 h3 l N; }0 r
{6 ~% z+ s* |" G2 h! ]2 V
//P以上级别才可以删除所有道具
" W4 s6 P" S5 z* t. X8 K+ D- G+ b m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
4 e) e4 g9 H& s. b- G! T p6 x}
' E7 v7 F2 L# I$ X" k; u9 ?, um_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
$ b3 a! W6 |7 b6 c2 r' z4 T. e; wm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
: t$ q4 \3 A6 g( j j( Gm_wndMenu.SetFocus();
$ Z4 t9 e. |3 O; Q( M8 A}% X0 ~$ X/ k+ j% _" ^
------------------------------------------------------------------------------------------------------------
# i# [# q" Y0 ~# N) B* d* N, v' _2 l*************************
& `# \8 b% f% b0 z( p+ V+ O& E' qWndField.h文件
! _* e& Q+ \, c: H& @*************************! o, {! ~$ h8 r4 r) Z' U
搜索:BOOL m_bReport;/ D) y4 S _8 i4 O# }
其后添加:! t3 j$ x& b& j
CWndMenu m_wndMenu;- f" A" X+ |& M, C' Z/ ^3 }* q5 r7 ]
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);( X9 Q9 k8 r8 B1 b8 R0 o
其后添加:- u: }0 _- F8 i7 p1 M% o0 K
virtual void OnRButtonUp(UINT nFlags, CPoint point);
) o9 j. y. B* I4 v. [4 |: @/ ^9 {" D; m
- g- y! ~& U- Y, p; ~) e |
|