|
|
源文件中_Interface文件夹下WndField.cpp文件
& x3 Z, ^9 j& `" [* M$ j搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )1 I& a9 @" B7 R1 L
3 D% D- \$ n4 ^8 d8 Y. y
struct sItem
2 K, F0 B% u" Y8 a7 K- k- D{
5 w) W) @+ m: J% w. P2 G. _5 jDWORD dwId;
3 O' K& f- j: h7 t2 d9 ]8 pDWORD dwKind2;/ o2 Q) P3 {# F7 g( |2 C5 `$ [, `/ l1 Z
DWORD dwItemId;- m8 e1 `5 Y6 |% z! N6 S& y
BYTE nIndex;4 s% P& B; e% P* R, y8 z. N; M+ W
sItem(){8 Y& F; L( u) M& _
dwId = dwKind2 = dwItemId = nIndex = 0;
* d% J1 G2 ]! o* W}8 A. y" a( S$ T5 j' B
bool operator < (const sItem p2)
2 _) g2 r- e* i( m{1 b \6 f3 G7 `5 }5 h
if (dwKind2 == p2.dwKind2)2 t8 W0 e: L4 A; E6 b/ X" i" h
{
+ v( W) f, X# y% q" K return dwItemId < p2.dwItemId;
7 [4 h& P+ L1 i7 s }else{
+ t/ M7 w2 w# { return dwKind2 < p2.dwKind2;* E' K; [2 b; F% X/ r
}" r+ O$ t. I. T& r, c S) }5 x
}! n' L$ l6 q4 Z# f: x. B
};
' J! X! J6 T' B, V) tclass CInventorySort/ W/ B! @5 Q6 `
{- j1 `9 m. E0 s/ m7 ]( {) K
public:% X) h" X0 r4 T' M. N+ H
CInventorySort()
. ]& l. D4 b* p8 z( S/ V{
# J2 @' G; S6 {! Q9 a m_dwPos = 0;
2 l* H. R6 `8 G6 l2 ?}/ R% l' f) }( L6 ^' N
~CInventorySort(){}
! L; n* Q3 h9 W/ C8 l# g3 M3 Hprivate:
1 f, _' L0 e; R& esItem m_Item[MAX_INVENTORY];//存放排序好的道具信息% b: R' b( r: A6 Q$ @3 W
DWORD m_dwPos;
3 ^& `4 O* D5 t9 I* @) f gpublic:. M: N$ C5 B; i7 y
void Add(BYTE nIndex)
" f X& K c0 u. ?{3 x; B: J. K B) k8 j; E- Z( P, x
if (m_dwPos >= MAX_INVENTORY)
( y: N( u" \- Y3 |) g {
% j0 l! m0 j$ o" H' r2 f% p return;
9 s. P, R- s+ G4 a }+ o1 U0 [1 }" Q* M* j
m_Item[m_dwPos].nIndex = nIndex;$ Z' D" Z+ p$ f+ ^! }0 _
m_Item[m_dwPos].dwId = m_dwPos;4 Y& o3 t1 j# U0 z0 Q3 C
m_dwPos++;
. S0 u' T. Y2 [( @}
/ b$ ]1 G$ Y5 O) FBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
( m5 {" |6 x2 ]9 F6 {3 L{( G- f4 A( o$ b$ J) k8 U, e
for (int i=0;i<MAX_INVENTORY;i++)9 |8 n! ^: J8 [5 S$ g7 \
{( w2 u1 }1 U" U' B: w
if (m_Item.dwId == dwId)
: b# ^% v- I; l& O {
3 y6 }! j8 K: a8 D8 s% V$ G1 H return m_Item.nIndex;
' f3 w8 g) X2 E- u$ o' ]% [ }
9 a+ S: J. {* G9 h/ x: g }
8 O2 T( [% b' [4 i return 255;
$ f2 S4 w6 `2 }+ n4 C, g}* C) u, X+ I$ b/ i7 J! j
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置& z) K8 p; T+ d9 ] L' l
{
! U7 N: H1 }! _' H BYTE nTmp = 0;
! G0 N0 O. j) a6 c3 Y bool bDest = false,bSrc = false;% D9 \% [3 l$ s( g
for (int i=0;i<MAX_INVENTORY;i++)+ m3 h; @( n! v) ?
{) o: W# |" w# g: F/ ?5 z' P, f9 Y
if (dwSrcId == m_Item.dwId)
& C2 L' W# q7 o, l- | {
7 X) {9 z: U% H' a; W/ R, ~ //id相等 则 改变对应的dest和src
* |2 c0 \" A5 b9 E" v0 Y# o. A nTmp = m_Item.nIndex;' e: O2 x- e4 R' I; z- G" z
m_Item.nIndex = dest;# A' A/ Q) F) l4 p2 X' w' N
}8 Z) d$ F1 i7 ^: Y
}
7 b A* N0 R" T, n //临时数据保存完毕,交换开始
1 A8 V, f6 {. |4 `$ h( R+ H for (int i=0;i<MAX_INVENTORY;i++)) C( _* V/ c2 u+ C9 u
{2 {' n7 d; V* m: _8 h
if (dest == m_Item.nIndex)! ^4 E- H5 O# ^" j
{
4 R; H* D& p7 g5 ? //id相等 则 改变对应的dest和src
; l8 N: _9 b) m4 P5 n3 x+ {, M6 [& Q4 S m_Item.nIndex = nTmp;2 s- X# M# H' _! R5 n% `
}
* {" Y9 Q4 V: J8 S+ s( M% c }
. o9 Y( x8 ^) m( Q}0 y- s, R( b- w6 w3 ?# R
};
2 w3 s: c1 @8 T" `# r+ L+ s-------------------------------------------------------------------------3 w Q! k" q& Z: q i1 S. y0 s
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
" E3 t" [! g& R% u8 V1 z' _# {6 v搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase); Q& X3 S; }3 `3 B
紧靠其上添加:" d% P- f' p2 c; n K. T
if( pWndBase == &m_wndMenu )
% h# t5 _3 |" r' k( y7 I* k{
: C1 a5 r6 ^( n7 U switch( nID )$ }/ I& |' n+ q" }! e1 N
{# @. Y5 ]7 b3 E" {: R# x
case 2:+ s! q( H4 D6 s, L
{! K/ S* C6 s7 r7 F8 i$ }( R' U- n
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);; X, e4 {" D, o
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 i& ]/ u# L0 _6 X {
+ \, @. |9 J+ A$ C$ c7 ~ break;! [" C8 Y5 ^3 h7 b: o! ]
}
& F1 Y q5 |) a% v$ J for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
: J/ F% W$ I3 |1 e% ~ {4 l8 M( J. J) i+ U. v4 _. A; B
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i); ~( f/ V r% \7 J2 o6 C
if( !pItemElem )+ ` m& b' x) }0 ?/ s$ u
continue;$ v- U. _: H" l- p( {* L; P
if(pItemElem->GetExtra() > 0)
: G' _% q% W \2 A continue;
& X; {. V. M9 K* B( u& j if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 7 F s: ^3 d% R7 K+ V, ]+ o' ?
continue;
i; `# G5 U6 a$ [/ i: Q' E: ~ if( g_pPlayer->IsUsing( pItemElem ) )0 `. {8 T+ E8 m8 m$ R% P
continue;
. Y$ T' s; ?9 z0 J if( pItemElem->IsUndestructable() == TRUE )
6 x- x9 y. Q* V4 V/ T {# r: G6 e4 a) f0 Q8 B
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );! x# U( D* V0 }9 W- K
continue;
C8 E: X4 g# W' V W- J. ~8 [ }% }4 `: h0 C; w! r5 @
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
" Y1 a. S, K0 h8 S# w M2 I }
$ L* Z7 K& g+ K9 x% t7 r* T0 U break;
- ]& v1 V8 D4 H+ q( ^& @- j } d q, y7 }0 a( c
case 1:
1 U# @, V( N$ T$ b& h# n! Q {
' n7 g/ i# ~- g. P9 } //整理背包$ W2 `. Q# k( ?' r) o
//////////////////////////////////////////////////////////////////////////! I* }* g- q7 F2 u# M) u) m
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
: p' N3 D& f- a0 Z8 }1 t" E //////////////////////////////////////////////////////////////////////////
1 g! u. ~/ M. s; s8 ? ////////////////////////////////////////////////////////////////////////// u3 `6 a" O% I6 }9 g
CInventorySort* pInvSort = new CInventorySort;
$ z2 v) c5 `/ l( c4 [5 D3 ~; x vector <sItem> vItem;
- i1 ~ g% Z" q' l vItem.resize(MAX_INVENTORY);//初始化大小7 |6 O {3 |/ H0 S6 l3 T
//////////////////////////////////////////////////////////////////////////
3 z/ }; I: R7 i: w \2 k //填充数据
, k: v5 P* |. G% |, T7 D: |- G8 P+ ^* c3 f for (int i=0;i<MAX_INVENTORY;i++)
0 T# L3 \/ n$ ?+ s {! W2 r5 S L: z
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
6 w: c' A, H/ |' t% T0 g if (!pItemElem)
/ O* ]2 _$ Z$ r1 K {- O1 w3 d% p) W. ^7 s5 J6 O5 W+ Y- u1 f8 @
vItem.dwKind2 = 0xffffffff;; O. p0 }/ a0 W- G8 F. ?, ?
vItem.dwItemId = 0xffffffff;
& b! [/ l A5 s8 O vItem.nIndex = i;8 o3 N+ G5 h3 {( |
}else {! A8 W$ i9 s& N8 I+ B
ItemProp* pProp = pItemElem->GetProp();# z* g. v+ \* N) b1 e
vItem.dwKind2 = pProp->dwItemKind2;3 p C) ^0 E: R7 z- `4 x
vItem.dwItemId = pItemElem->m_dwItemId;2 U f# n/ t k( e: B* _
vItem.nIndex = i;
( y2 m( K4 ^0 D. M! \, H$ ]/ F }8 e7 N8 k7 Q' h D W
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);# ^% J- o2 o) n t: I J; c/ |
}
0 s! H$ R, a: f$ _* X ////////////////////////////////////////////////////////////////////////// X" t8 d' {& ?- M0 M5 W
sort(vItem.begin(),vItem.end());//排序* |$ o) c' r% x( U" T
//////////////////////////////////////////////////////////////////////////
6 `; D+ s1 I: X //交换
, I- x# \* E, k! j3 A: c- c for (size_t i=0;i<vItem.size();i++)! {5 w& h: U2 j
{7 U+ b# N. ^! t3 k5 Z' ^0 [
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);" |* M8 @; b# R: n5 h0 Z9 T& E
pInvSort->Add(vItem.nIndex);
% L. o& J- }3 J% r" N }0 b( c% u3 O. n' ~ E; B6 o* G9 f
BYTE nDestPos = 0;- ?, Q5 `0 ]" i) | T5 ~7 m5 \
for (int i=0;i<MAX_INVENTORY;i++)
: K; m5 A( h N+ u. z4 K# } {
: I7 R- i* v k6 P9 v# x: I CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
- K3 h3 Z! ]3 | if (pItemElem)
8 U0 A7 g' R! U6 F. }/ G {
, s Q' g8 t; U1 M% P if (IsUsingItem(pItemElem))3 a/ G+ w# f) @" {
{
: P. |- I) i4 `. u* t //这个位置无法放
9 P+ I( w/ B% s: Q& ~7 N0 J( u# C nDestPos++;0 K* a: |" D7 l, S& o! P0 E+ {2 |9 d
}# G+ J. X5 m+ \8 V/ F2 @
}
1 {2 a# ?# o! B% l- h$ V3 R' t BYTE nSrc = pInvSort->GetItemSrc(i);
& S6 o6 ~) I# g5 |6 F. g' O pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);0 [! I0 ^# z' z& j
if (pItemElem)7 }$ k" O& @+ C1 T% c5 a y- J* U4 \
{# b0 v* F7 {2 t1 p$ v
if (IsUsingItem(pItemElem))0 X& V' s2 T- T' X
{7 U1 ^* `. S* H
//这个道具无法移动,跳过
& H5 v8 Q2 U( _2 y7 n continue;
4 p) Z I8 d- ~" V7 ^7 n }+ q- \. x/ u2 J; Z- n; p v
}else{
) y$ Y; i2 n4 J# i //空位置 不用动4 k* _6 C1 d7 ]% ?* S/ \) e
continue;9 }' z7 c2 `1 y2 L
}
; U% J0 S H; u( p7 i- [& J2 i //////////////////////////////////////////////////////////////////////////( v4 w7 m/ U$ o8 u
//开始移动
) Y2 ?; j+ I( B5 i& p if (nSrc == nDestPos)
) Z$ {" p# P1 M" _, b" J1 n2 T* r7 Q! \ {: E. D4 Q% N# h6 k# \% D1 j
//原地不动* C4 l) e! o0 t% ]; }
nDestPos++;
, T( K! f7 x0 M+ Z6 V" g continue;
3 ^. I% \2 M q a }' x4 L: L Z5 \8 s2 i
pInvSort->MoveItem(i,nDestPos);) v" O' |2 n2 H* @
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
: Q z9 B2 N" s( o$ m- B1 g r8 u Sleep(5);
. m& b2 g7 N+ J. q/ z0 C2 B //Error("移动 - %d->%d",nSrc,nDestPos);: F0 Q' U S8 i2 s. v2 u9 M7 w
nDestPos++;
( |6 Y# g) c' b' u. |/ g' l }
0 ~. F, [0 x, f/ r //取第一个元素的信息/ ^/ N( K- E. E/ d L9 J
/*$ J+ @9 V* Q9 _* u; q7 g
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
8 b! E9 l) `- V9 k9 ]! X7 i, T {
9 y* g% l0 M, f: Y Error("Move - From:%d,To:%d",vItem[0].nIndex,x);" d6 k/ j8 \3 R7 k/ `! ?
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);1 l# h$ |. Y4 f: n, }7 H
}8 [( z( ~5 i' P# w2 u( X* \/ c
*/5 V1 W2 O& H" f% W @
//////////////////////////////////////////////////////////////////////////+ l# J% A0 K3 F3 g* k
break;
9 ?4 l3 l' \' ~ }0 k- j5 W$ k q/ S1 j+ d
} 1 E; v/ b& @: x/ S: {8 M5 r T' P& v
}+ T. `/ W. G: b
m_wndMenu.SetVisible(FALSE);
% ~9 m& J3 S7 S5 J# u
. o. Q, l) I6 o--------------------------------------------------------------------------------------------------------# I5 a% ^0 k6 _" m6 w0 `7 l6 [. H
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)4 J5 |( F A) D* m! j E j* v$ b
{
- R6 Y" q; C& E0 u# y/ zBaseMouseCursor();
Y# f+ P8 x: i% I5 K v! `0 n}
( _5 Q" E8 `$ P o1 {在其下添加:
# l: d& x2 O4 Nvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
6 A& p1 X, `& m) E; m/ `{
. u& ]! s4 I; ~9 X! D# n. I$ Bm_wndMenu.DeleteAllMenu();' G5 q4 U, q8 R' W$ a- ]. O
m_wndMenu.CreateMenu(this);; ~8 _! k9 B8 ?
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
0 J5 ~0 {* r/ D1 J: f! u3 b5 ~ s9 i2 v( K0 u6 K( x, C$ G: \
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))/ ?- p7 ^& M$ d) R3 C/ ^0 b
{3 s0 w, K- f8 O9 V7 T# A6 r
//P以上级别才可以删除所有道具
/ g0 n2 a G; V$ ^ }, i! w( h m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
# t6 V4 y6 J+ r$ d2 j4 ~}' ]/ j5 J0 Z x6 f- Q$ I6 O* S0 L
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
, i7 a$ b2 ^( h; A+ i, X2 n4 Vm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
0 ^7 D$ P2 i8 j! }6 B1 v Xm_wndMenu.SetFocus();
* F1 R2 x- \# e* x0 j$ ]}) {% L$ @9 z& C. J
------------------------------------------------------------------------------------------------------------
6 b2 z" F; O8 Y" B8 u% z7 D o*************************
. Z0 E0 ?" K7 D; PWndField.h文件
5 `7 v. L0 k) m* n. N1 n- m*************************1 K* l. h4 S; S5 _
搜索:BOOL m_bReport;" H: S4 Z: K! K! ?
其后添加:
1 D( w+ z. L- }- V3 C1 G+ ?CWndMenu m_wndMenu;
8 g5 z, @8 J8 a% b搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
: Y3 J2 X9 Y+ L) g其后添加:
, I2 L b7 W) S0 y# m- |/ xvirtual void OnRButtonUp(UINT nFlags, CPoint point);
, E, C- e* H% r/ q2 R* D- y4 V* g% D; q* ^- o1 d& M" k
' C8 w' S/ N3 ]1 S/ L; U
|
|