|
|
源文件中_Interface文件夹下WndField.cpp文件1 z% _2 a: |4 ]1 x% V) A$ j* N
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
9 R( ^7 ~' u4 h1 w% B
7 z+ v; F: N' ~6 J% E( [: Ustruct sItem1 O( j: I/ ~- g; }' n
{( Y. U3 d; Z6 K9 V
DWORD dwId;& R6 Q) `! a5 @! z5 ~3 Y$ Y2 E3 v
DWORD dwKind2;
, w" d% {: b$ M. B SDWORD dwItemId;
) T( M, \8 T6 p& D) nBYTE nIndex;, j* Z6 ]: }0 P* A8 J
sItem(){, k0 @" G) `6 O1 ^# b) T# E/ v
dwId = dwKind2 = dwItemId = nIndex = 0;
' \, P7 a0 D2 g. z7 Q5 d2 [( r: p}
7 Y* X8 j+ _& S$ T- abool operator < (const sItem p2)6 K8 p o, C7 {# h( I
{
' ~3 F5 E$ Z" V! l" V if (dwKind2 == p2.dwKind2), v3 _+ ^2 ^! m4 D6 @+ q% d
{ k+ `8 V8 B$ |2 D# c
return dwItemId < p2.dwItemId;
, W" K( I& ~* u) ~1 K. F }else{/ ~7 U4 h% v4 e$ X: [* F2 Q
return dwKind2 < p2.dwKind2;
R& K |0 B8 s/ C; t0 \ }# D, d; t/ v9 G( d( n
}9 t6 M5 T/ A1 p# i
};
$ p' J) h! ~ c2 g# @1 Y9 rclass CInventorySort3 L. ]& W; H s: V0 G+ I7 ]1 E
{
9 N: n- ]' \8 lpublic:4 H5 a9 U7 @3 ]0 k$ z; i8 ]
CInventorySort()& i5 a6 n4 C6 M& y; F
{
$ ]1 m& X# K# c B5 T' S8 G m_dwPos = 0;2 y2 [; i( q6 D2 M3 R8 l
}
4 G8 r3 [% s! ?( g a~CInventorySort(){}2 _: G% W/ t, }
private:
# K$ }" `2 W8 a& lsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息# B1 `1 L9 F% b" C+ M; @8 N
DWORD m_dwPos;3 g" a2 x, p4 V) }7 W/ r- G1 x$ w/ m
public:
" M; r* c* \8 [( q1 v* [2 b# Yvoid Add(BYTE nIndex)* g# H) I8 l# S9 M4 z/ l
{6 f! U& J& r- ~# U) W( `% z
if (m_dwPos >= MAX_INVENTORY)
. i7 K; u6 s0 Z& Z% v, U, {3 R8 L" J {
! Q9 f+ ~, Z) l0 P, D& q& W$ ^ return;
# B2 D, Z* o2 q9 h% y( m }9 W$ E# g% v1 N2 [+ I# E: [ Q6 b& E
m_Item[m_dwPos].nIndex = nIndex;3 ]: x/ v/ E" i! y7 |& h; K
m_Item[m_dwPos].dwId = m_dwPos;
7 n; g* r. X& i m_dwPos++;$ w t/ E, t2 t! Z; [: l w. V+ D
}& `1 S5 k! J6 r8 K. f- T5 x
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列! j6 T& _. e7 u! o6 W2 B
{8 M1 L% \% A% C7 ]' K0 C F
for (int i=0;i<MAX_INVENTORY;i++)% x8 t# x5 Y; f9 F
{
7 m/ z4 r4 l4 S1 I if (m_Item.dwId == dwId)% T/ R1 ~7 b. G7 {4 V' V4 P' T
{
. @& s' ?! n/ d8 x: ]9 ` return m_Item.nIndex;" L: `( P# q% K/ v, p9 q
}
9 e( G3 b- |8 t8 v1 C }
4 @' V( ?! c5 t. z; E! c& E return 255;! f$ ~* g- L, w0 Y9 n: u
}
* \/ u9 g4 b9 h+ w8 `# wvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
: H& K8 w4 C, j. z0 e# B1 D{
4 N( T# m/ \( j; {/ k9 d BYTE nTmp = 0;. B; z. A+ n) r* m/ {- t
bool bDest = false,bSrc = false;' ]3 Q8 K; b5 {7 h7 ~
for (int i=0;i<MAX_INVENTORY;i++)( P. m8 c3 n3 g* m& }
{
: O% W! G5 i' ]3 d if (dwSrcId == m_Item.dwId)
* s! p% p2 S9 | {
7 e3 j4 W( |- v$ s/ [ //id相等 则 改变对应的dest和src
0 ^1 {' p, _ ^+ u* G, m nTmp = m_Item.nIndex;
2 E6 P( K" s; P: F m_Item.nIndex = dest;1 v% [6 f/ K" l4 i
}% }- }( N( D$ h9 {; K2 D1 `* ~1 S
}
4 n' A; s. B" S+ e. R3 P, I //临时数据保存完毕,交换开始
1 l K: Y% Z7 H2 N: p for (int i=0;i<MAX_INVENTORY;i++)/ J% C+ U2 }/ U4 {! ^: v6 U
{
3 Y. d5 M7 R5 V if (dest == m_Item.nIndex)
4 e2 \( ^, t- a$ g5 N; D {
; X k: D% a9 S9 k- d! t$ B7 } //id相等 则 改变对应的dest和src
, \! y M7 f) B4 ]4 u u m_Item.nIndex = nTmp;5 J: F% Z, P5 K" a g# ~! ~/ c# }
}" ]1 r+ ~/ K3 }* t# n
}
' _$ t# t2 g: m e+ A}
3 m. P8 I" B, f0 g0 H* m};# ^& |" D( u5 K% X, H
-------------------------------------------------------------------------
+ C8 i' {# o j+ R- s依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
6 A! o& h* H2 M8 F5 |, g搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);; ?6 ]! x7 t7 k: F; u
紧靠其上添加:* f+ ?# x9 A; o: ^* c
if( pWndBase == &m_wndMenu )
/ c. N: y0 z6 v( y- ~! I* f{
9 d! r5 {8 F( }& L y: g( r. m switch( nID )' A- P! B+ L% ~1 J% X7 @
{1 c9 S; }/ u) M8 _
case 2:
) f" f( g, g1 o1 l. C! a {
0 Y6 ?& o) |8 P2 M% T K, F //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);8 [1 H7 Q) Q2 d Z: d4 ^
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
9 V* S' s o' f* N" }* f, k {
6 w: j+ a( U O* h. ` break;
, D5 @& r( V, Y% y5 n5 ~* D } d) l" L2 y" [4 r7 O
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
4 O3 x! I* K$ Z0 {' o: P {
8 [" G1 w7 J$ w! w+ S# B CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);& m& ]) K* r( e/ A" ?2 ^
if( !pItemElem )# ]8 q9 T3 `' |* i7 g
continue;
8 w3 x- t) T' p# Q if(pItemElem->GetExtra() > 0)
: C4 ^2 ]/ ]1 k) r* m# G* t; z+ b continue;
( g( r0 m" D0 ^' w9 N+ m if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) + W- F8 m: ]' a9 ~9 y- ]% l
continue;
6 h0 o& Z9 W$ k! U' U if( g_pPlayer->IsUsing( pItemElem ) )1 j$ Z4 Y3 K, R* I3 L0 g0 R" e) f
continue;. o3 j; r: O+ a) d
if( pItemElem->IsUndestructable() == TRUE )5 ]/ Z: H F4 g" K' ]2 R1 Q, u2 l, l
{
9 p9 g- z% s5 q0 m. B6 r g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );# r& }3 a* y" J" B" i0 v: ^
continue; h* a* f ~& W. `' g
}
# w8 T' N$ p" ?' I" i; i( M g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
5 ]9 m. Z* @/ d4 A }& M3 e) N( G+ n7 x
break;1 q. u6 a' ~9 C# ]! q
}
. s. G) J: |! P, o1 R% F J case 1:
. e, o, J4 h+ i6 } {* z" h p7 `! }( |$ W2 g
//整理背包9 P* w$ O8 W' O: r! @ t6 r7 G
//////////////////////////////////////////////////////////////////////////
6 m2 ]4 a c/ ]$ }4 ~- G" Z z8 z //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
K, ?' {8 x7 p7 P0 H' M, q' ` //////////////////////////////////////////////////////////////////////////
; z! D) D: S" w0 O2 Z* T //////////////////////////////////////////////////////////////////////////
8 E& e* S2 N7 L9 T* B0 R0 Y CInventorySort* pInvSort = new CInventorySort;4 P9 l# S5 O1 l8 m. U
vector <sItem> vItem;
. x7 ~- o! q Y. d" g# x0 l vItem.resize(MAX_INVENTORY);//初始化大小& |* x2 F5 G5 f! V& m0 [+ I* [
//////////////////////////////////////////////////////////////////////////
' ~, w( n. F5 P //填充数据6 @8 W) K r9 N6 A# b
for (int i=0;i<MAX_INVENTORY;i++)
- y3 h+ [: q: b& D* u { F) }7 A& Q) E) l7 k& i6 Z
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
0 j' d: o: O4 M. C9 ^% S. K Z" @$ q if (!pItemElem)
0 d9 c$ \2 R# |# t { r3 U6 D; H& U
vItem.dwKind2 = 0xffffffff;
" g; y/ j2 ?. L, @1 t0 ~, `# Z& z vItem.dwItemId = 0xffffffff;
+ n+ p, y! W/ v1 V1 ] vItem.nIndex = i;
8 _, p$ }7 W- t7 Y' ?9 `: g5 h9 } }else {* f5 w8 ^: \2 C2 ]& L% u+ S
ItemProp* pProp = pItemElem->GetProp();; B [4 u" M/ p1 m1 V/ M- ]6 r
vItem.dwKind2 = pProp->dwItemKind2;1 c: h z2 ^) B2 c' A
vItem.dwItemId = pItemElem->m_dwItemId;
* h8 w7 u. l8 L3 {" e- S+ v% V- } vItem.nIndex = i;
5 r6 D9 k% Q! B' p& a t6 w; w }
- c" g" U1 ^7 u' b //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
) |/ ?" Q, L8 T# A, @( y% _ }
3 }3 u( v) k1 J) T //////////////////////////////////////////////////////////////////////////8 d2 x, M7 Y d j# d% e: A/ @7 V2 |% b
sort(vItem.begin(),vItem.end());//排序6 n4 r4 w) K$ T: V5 x; D
//////////////////////////////////////////////////////////////////////////
' h g5 a( U6 U0 J //交换
& J( x& B/ e# s5 t& R for (size_t i=0;i<vItem.size();i++)
2 M/ b& K7 d q {
- C2 U x) m3 B4 X6 V //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
! }$ X- b B- |6 i, f |: F1 h! V" j pInvSort->Add(vItem.nIndex);. y' F0 a# Z" g% |8 T) B
}
8 }& p5 n5 u, c BYTE nDestPos = 0;7 }" `2 E1 y {. X$ h; Q
for (int i=0;i<MAX_INVENTORY;i++)
8 x7 }# v' H9 p% l {- u6 e9 V r! m" A: X4 v+ ~
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
2 M3 U. ?8 d6 F" Z w7 r* b if (pItemElem)
! }7 t `" l- H! u {( ?2 K% y5 [) Q ?0 Z3 l
if (IsUsingItem(pItemElem))
& j: v- I- P4 y: C- s' {* v {
1 X& w1 j7 q& a& a3 p# N //这个位置无法放
+ W0 j+ Q/ G) X$ G* ` {* y" B1 ~8 F nDestPos++;
# y6 U! b+ }" [ J }
2 O A3 w& J( G! b1 x5 }+ Z }; y8 G) B$ b) R7 ]3 R
BYTE nSrc = pInvSort->GetItemSrc(i);
# ?# O) a- H1 U% l5 b pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);+ H b u5 n2 q8 A, v5 m6 X
if (pItemElem), ]: h! U; h4 z. V9 ]1 o
{
$ }3 L' N( g0 ^3 K* v* g) W if (IsUsingItem(pItemElem))1 L) _5 e5 f O; v; ^
{# W9 W# K' q2 q Z, C: E/ s& f# ^2 I
//这个道具无法移动,跳过; s6 H( L2 {; J2 d
continue;
0 A- I. r3 D$ A0 [8 ]! @4 V }& {$ U8 b* m) V& @; h( W+ e
}else{
9 p$ g/ w9 `& ^; p$ i4 r$ j# p //空位置 不用动
: ?* Z# a7 I! d# v- Q continue;
& u6 i0 C4 Y: j% d5 l; S }6 M- R0 ]1 `0 L" [5 s
//////////////////////////////////////////////////////////////////////////
" L$ m* w2 }: m. D/ t+ i& x4 T //开始移动: Z4 D. e: U6 H6 W1 p
if (nSrc == nDestPos)
" n4 z* O1 N' m1 C p6 m {) ]% O. d7 d4 U, c% s
//原地不动
) n2 m0 W' ?2 W+ t nDestPos++;9 z1 l/ c0 `9 o- D; C! ~& ^5 v
continue;
+ I0 Y: S) k w2 n' |- t* v }
$ K4 c) T- M$ Y+ M' T* p# U g pInvSort->MoveItem(i,nDestPos);
3 y2 r" A7 ^/ j3 n g_DPlay.SendMoveItem(0,nSrc,nDestPos);
8 w B" j+ P) u4 u% V Sleep(5);
8 q% ^+ o* U2 {9 P //Error("移动 - %d->%d",nSrc,nDestPos);: e% {# f1 K% i9 e* n% z/ R( M
nDestPos++;
4 e( p) a0 M' Y% ]1 h1 S M }
: n4 N9 r" y$ v5 A- ?$ n% a4 U //取第一个元素的信息) U/ N6 ^; m" J W, A1 r- U. M: ^
/*- V+ a8 t) `( z5 {+ H4 U$ S
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff) v0 g' q9 S" X9 d
{6 D7 `1 P! _1 T8 R* z. \
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);, U0 c8 [0 M+ K- f5 Q; ^
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);* {8 h4 Y7 E' ~1 T' H4 A
}$ I; v! d* E3 C& f7 M- f' q
*// l+ H: l4 c/ e4 m
//////////////////////////////////////////////////////////////////////////
) i( I5 V) I/ }, M K break;; u/ `( M/ Y2 i% H3 J3 ~
}
: s' h7 Z) C2 L+ Q% i) U% |9 n }
. g8 b( a. I& x; q) {- V: ^+ ^" u: D}3 W4 p; ]2 k' B J$ g
m_wndMenu.SetVisible(FALSE); ~7 c2 P- @* [" [4 V; S1 w$ {3 f& W
% v9 v' o. _- I+ i8 D--------------------------------------------------------------------------------------------------------
# @- f" u( Y! Y7 S( }' l搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point), p6 e% ^- s/ q5 s
{7 F P7 ?9 @, `. R3 G9 J* e
BaseMouseCursor();+ g' X' C( E+ I6 W3 t& t/ W4 S
}
/ h) F5 k, W V, |* r4 e在其下添加:5 o& m, s5 h$ y m% p! a
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)0 t2 n- ?0 T+ o/ A8 a( b( ~
{
" ? K& A3 Q+ e/ d$ |: ?m_wndMenu.DeleteAllMenu();$ Q: v% g# D& G
m_wndMenu.CreateMenu(this);- ?" I/ M1 ], m- `, b
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
! T, J) T! u2 i0 E* R$ H( d8 e
0 }% Z4 n9 s, r$ P4 E- eif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))3 c3 M( Z" w% }1 X/ c6 m5 _
{
+ W# H' p: a7 o3 s: ~8 Q6 m( x' L: p //P以上级别才可以删除所有道具
1 y! A/ [1 ?' j' X7 _ m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
5 F4 o( M* q0 M) n8 _}
% X5 {" N: y, `8 a" Q) ym_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );. W! b/ J7 V3 T1 j( Q
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );* s6 B( h! E2 K9 G4 m2 A4 ]
m_wndMenu.SetFocus();
" K$ h2 ^8 U; O5 m. E0 q" @}2 P( l! n0 S1 E0 f* H6 j
------------------------------------------------------------------------------------------------------------
3 t+ d: }0 s6 j2 J. I8 P*************************4 o; f/ E0 X% J8 y1 Z, B
WndField.h文件
1 _" b9 g6 g7 h- }0 x+ G*************************' ]" I6 j) ~; k6 U
搜索:BOOL m_bReport;
8 R1 D" \' X V. E/ J! ?8 `其后添加:
3 {0 X& e6 |& g3 O+ dCWndMenu m_wndMenu;
! E( T7 N, T2 L! A2 ?" @+ s搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
$ X# d( Q5 v, s( u+ J$ C4 h4 V% g4 l. r: u其后添加:
8 X" U4 E+ F& p/ h: G$ gvirtual void OnRButtonUp(UINT nFlags, CPoint point);* y5 T! C2 R2 P/ _/ L
. r; p7 ~$ L! o0 i! t
* `! ~" M" {4 Y# y# m6 U5 f |
|