|
|
源文件中_Interface文件夹下WndField.cpp文件
' k/ o/ E, P2 Q: j搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ) Q) I2 b; B+ O3 ^0 r( x
! z# U: h y) E3 o9 e7 `
struct sItem
. e: U& n4 c. T5 O, u$ Z{
7 i: C6 _" w% vDWORD dwId;+ D* ?0 C( s' e
DWORD dwKind2;
0 |- U& F! m& r* ~* ]) b5 H4 K- xDWORD dwItemId;# R# {) Y' T5 u
BYTE nIndex;( T4 k% d8 d* |* t0 X& x0 G7 w
sItem(){6 z' Q1 }/ H+ J' ?& K
dwId = dwKind2 = dwItemId = nIndex = 0;5 T) r3 d+ a/ S3 U
}
/ G: {! I' u, B: Abool operator < (const sItem p2)
4 n H/ |) d& V/ C5 ~, Y$ H{8 ^6 I0 \) k- j) v' n
if (dwKind2 == p2.dwKind2) @" h. A: b' }7 f% q# F! s7 g
{
3 ^) A! y0 w% \& J$ h% _0 ? return dwItemId < p2.dwItemId; }; p0 o5 p) v9 R! S
}else{* @5 |: X# r! m6 K
return dwKind2 < p2.dwKind2;
: _# H: Z& E- n+ u2 [0 \2 }& } }9 R% U4 _6 @% a3 w
}& X9 T$ R9 @6 m4 f9 \- N/ D
};
1 e5 v% S3 Z0 {& C! T+ k" v9 Vclass CInventorySort7 y% Z" W/ [) x5 o# W
{
6 x( m1 F0 @: U( V2 j7 d+ C7 \8 h5 h/ npublic:$ \' h5 ^6 O; ]' b' A
CInventorySort()6 }) O5 [0 D* S- ^! }
{
6 S' X$ V* }& T$ k8 U6 M% H: A m_dwPos = 0;
. w$ z" ]' O2 [; H- N1 F}
0 f' g7 c, ?3 N& _1 } M( b' f$ ^~CInventorySort(){}& B4 ^6 T7 p8 z7 l1 p8 i( l) _
private:
' S- s; g/ n1 E: S+ g$ XsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息5 _/ K" }' A! W0 e# g9 ]6 U
DWORD m_dwPos;3 \& f: Y& i$ f; R$ R* \. b
public:
" w7 ?+ C! P T3 \+ v+ Pvoid Add(BYTE nIndex)
: E# K, M$ d- \( d( ?{$ `/ b8 N, x% Y4 U: N6 j& |' c
if (m_dwPos >= MAX_INVENTORY)
9 W/ n: f9 J* {, {3 F P4 z8 i {- P N9 p# `1 R1 }7 y* S9 W
return;
$ e! o9 O0 T+ |! z/ V }
* B5 D* z& @: D$ C m_Item[m_dwPos].nIndex = nIndex;2 a6 C2 t. l& q( U
m_Item[m_dwPos].dwId = m_dwPos;
$ ~' n+ B9 T0 U" s4 c8 u4 J m_dwPos++;
2 d( `9 L) K8 s}
7 q5 Q! [3 o2 E w" y9 s, u, v/ G x3 HBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列0 W: P" S' p {7 l! l' M
{" |; J4 Z' C$ Y$ q, h
for (int i=0;i<MAX_INVENTORY;i++)
: u& i. a, e& G$ S1 Q {. P/ @7 w# |* S0 R. E
if (m_Item.dwId == dwId)9 X4 y" s: I7 ` b2 Z& t( `1 e
{
M' R2 w; d0 R* R* o return m_Item.nIndex;4 M6 _5 C9 ?3 P; g
}
* i: ~2 C3 U3 c/ F }
* b! }; o( a; U& g7 v return 255;
5 ]2 h$ h& K( [6 c, Y4 r7 }}4 F) B1 i4 E1 [6 o- u
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置/ k: _4 @/ i9 u/ j0 g. D0 t
{' V) `$ t8 J! c7 q' @7 W" a
BYTE nTmp = 0;
9 x# z" [% Y2 M1 q bool bDest = false,bSrc = false;; y" {: [+ W! c* e j. F% a1 T
for (int i=0;i<MAX_INVENTORY;i++)8 z+ {( J; [9 B, ]% z( L% V
{
6 d- ~/ h1 _% V/ v" `2 t, q4 o if (dwSrcId == m_Item.dwId)$ O9 A: r% u- k f
{
' k$ r: I$ s+ ^0 x //id相等 则 改变对应的dest和src
; B/ Z5 U. e( T; |. r2 f nTmp = m_Item.nIndex;
1 Q9 V# w/ ~7 S2 z! b% C" { m_Item.nIndex = dest;
$ ?, E! ?3 H ? }
7 h2 `, z. ]# i }
% @% d7 y1 A% E. k5 V3 I8 i7 } //临时数据保存完毕,交换开始8 S; Z% U) r$ V% g- z1 y8 |
for (int i=0;i<MAX_INVENTORY;i++)' w3 H6 w# ]1 o* S1 {
{" B8 F" r k7 H2 q5 z) d% G, ]
if (dest == m_Item.nIndex)8 D. I8 x# r/ T0 D" |7 N1 p
{( d2 M; c9 ~4 a" Q
//id相等 则 改变对应的dest和src
$ G/ y l+ i/ `; o& _. N6 @ m_Item.nIndex = nTmp;
0 T3 d4 p! h/ I/ y. Z }! `5 h% x. e6 M! ~- U% [( T. L0 I7 y( o
}' R7 m; J2 E7 _1 S2 z6 C: x e( p* x
}8 Y: a5 ^+ l5 u! X4 |
}; Q; E. v9 v/ d$ }1 ^4 Y6 t- e
-------------------------------------------------------------------------
$ y6 O9 F: h, P2 S' B8 u依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
9 D8 {* c7 S5 |& A6 X$ f" @5 {搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
5 Q& e- R6 M) |% W2 @3 O: n1 t7 \紧靠其上添加:' y" k/ H: w1 y+ z! M+ J
if( pWndBase == &m_wndMenu )
3 T1 e' A7 k7 A& O3 u{
" K+ O; O8 N j# W" P. M( e switch( nID )
8 B- {" q; s2 k; Q9 G1 S; ?" r/ X {: x) z C' i( N
case 2:
5 \7 L" `* F: t/ k. A {
; t1 t' z( n1 ? //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
5 E1 i9 d7 ~! n' L" U% U if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))) n' b! c/ n$ E: A. e- \+ s2 }9 L
{) l& }0 z! h6 D% @1 `3 N
break;
. [5 k( X5 O0 O: p4 T( \2 } }# l9 m/ b5 T. X; \
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++), w1 Q& C5 e- e: u- m! G' v
{7 J2 F, H5 S% q9 ~
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
7 s( X! |! n0 F7 D/ a# w- {) J if( !pItemElem )
2 X1 F/ E, S# k continue;
/ F2 @# ~ ?4 v s if(pItemElem->GetExtra() > 0)
" ~ ^" \9 O4 O6 G$ ]; M9 h continue;, V5 i+ S Q9 G* A& ^4 b% x
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
9 }4 { w9 z2 `1 Z' x: N* x2 M continue;
/ I8 v6 O8 p$ x1 [0 N" w8 l% E; D; U if( g_pPlayer->IsUsing( pItemElem ) )
' Y4 \4 y) J" w; b: S5 a continue;
* g1 K" \ u- P" ~ if( pItemElem->IsUndestructable() == TRUE )
/ H+ {8 z0 L: S4 D* l; R {) r F. A- ^2 }; X
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
! b6 @* B4 h/ g6 y {1 k s continue;( O7 W- n" y) N9 P/ \$ @1 T
}- ~4 n, H$ D9 i2 d+ g, I
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
$ P, v1 O/ X! d2 W' Z9 ^ }
$ Q' C8 w. o4 h6 s! U( }# _$ h$ ~+ f break;" ?7 ^% ?, I2 w- [ m' l; {
}
6 P) {% J! H( d case 1:; |) L" p6 x6 D; e/ Q
{
5 n. c$ R& O/ c2 _1 q. U, V //整理背包7 l \6 M9 L7 J7 V) s$ P
//////////////////////////////////////////////////////////////////////////: U! a7 X2 [- o3 T$ T) x. \3 g+ B
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
1 H3 ~; b8 q9 ]1 P8 c //////////////////////////////////////////////////////////////////////////
. F+ g' M" h% e& X+ p. K2 U9 G //////////////////////////////////////////////////////////////////////////
+ ?7 |& Q+ i+ G0 j3 S CInventorySort* pInvSort = new CInventorySort;
6 s8 u8 v$ ~; P! s, E& Q vector <sItem> vItem;5 x* a+ g3 ]& z* g
vItem.resize(MAX_INVENTORY);//初始化大小8 y( B4 g2 Y, J+ t% c+ v
//////////////////////////////////////////////////////////////////////////
' `9 N9 N- V3 _- H, F //填充数据
, n4 E+ e: ^/ o' g$ z6 |. _ for (int i=0;i<MAX_INVENTORY;i++)/ [8 u0 P" t, @8 q* _% A! U
{2 b6 }* u8 [! s7 m, o6 ?
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
3 }4 f. ^7 S. n T- n2 {: P if (!pItemElem)
& P, q- ]2 n- i |3 Y; F& a {
7 _- r' q" G* v: n& k ]8 g2 e vItem.dwKind2 = 0xffffffff;0 F! m- m! P. i7 D- h6 k
vItem.dwItemId = 0xffffffff;5 i/ x9 W5 [& C( l% ~0 h" t# b
vItem.nIndex = i;! [+ [. X' x) e
}else {- B5 V9 K* p( M$ B2 [
ItemProp* pProp = pItemElem->GetProp();
# h7 ^0 y' c( C' ^1 |0 V vItem.dwKind2 = pProp->dwItemKind2;
7 c# C7 s' B) B7 |* B& \/ h vItem.dwItemId = pItemElem->m_dwItemId;
! S* j# K( O/ ?* L& o) ]8 W- b% K- C vItem.nIndex = i; f% @( w! I% ~6 b* L6 a8 k% @
}* Y* j8 R+ T0 j( A) I
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
- P( I2 O- X" }' Q }. Y! u/ ~0 a0 ?
//////////////////////////////////////////////////////////////////////////( ^% r7 i8 _% A" }% m- }' {. D
sort(vItem.begin(),vItem.end());//排序
4 L. }, g5 B1 ^- x2 O2 s- \ //////////////////////////////////////////////////////////////////////////+ H6 L1 H; z! ]) x$ I$ N1 d
//交换# Q5 R3 v9 l2 W9 P- ]! r0 h: Y
for (size_t i=0;i<vItem.size();i++)! A( h+ V+ D6 R+ v, \1 ?0 D
{1 X6 _+ q8 M1 ^/ G' A# H
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
# Q* ^$ m( e F$ U( t pInvSort->Add(vItem.nIndex);
/ ~1 a( O2 {4 h$ e0 t! J. \- c }1 u! h2 G6 N" S9 ~
BYTE nDestPos = 0;9 Q3 a# _) I- b$ @( r6 \" d( w0 _
for (int i=0;i<MAX_INVENTORY;i++)% S" o/ k& g3 ~5 H' q$ z9 D
{
- W4 \6 r3 r! W! A9 \ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
5 o+ b, R9 N, s# ~1 C if (pItemElem)
1 A/ K) V. \1 `1 l1 v {
/ z! M6 ~2 y( o! P if (IsUsingItem(pItemElem))% O7 u( K4 h: i7 J2 B0 |6 Z
{
- _! e/ s) I y, ` Z0 o //这个位置无法放
% N' R+ S2 l h nDestPos++;
5 {5 H5 `2 W( F% v2 \4 a% Q }' j8 D' n( n) g( C$ T
}' w% h. j! o$ \6 S1 K
BYTE nSrc = pInvSort->GetItemSrc(i);
7 T: g, A! W2 F+ T8 \6 F8 d r' ^6 Z g pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
. X( m$ N* N, b/ L7 W) J: s9 E if (pItemElem)
1 t4 t9 Q) h4 ]3 ~( D/ D O/ ~ {
1 |& b X7 _5 x# Y+ E if (IsUsingItem(pItemElem))4 F6 ~+ n" z( f* M% e8 q) B
{
9 `, k5 g: [, w) I, r" v //这个道具无法移动,跳过
}* }( q& ?" {. I/ @% X continue;! B; d4 E1 ~; b
}
5 B$ ?$ L, ], K- q: O }else{: y" `6 I6 m- {& |9 d4 O
//空位置 不用动; G9 h6 b- r- K/ w9 f$ @
continue;
0 O* J( I* ]0 n( S8 K }! l& F* n( p* g: Y2 K
//////////////////////////////////////////////////////////////////////////( s! v: ~+ \, y, z9 r6 o( v
//开始移动$ q4 i4 J) `; h* F2 E0 y
if (nSrc == nDestPos)1 Q& t, w7 D8 A A& M# D- e# s
{
" @* k) Z9 l) J //原地不动
+ Y$ \! X. r8 ?" A nDestPos++;: Q6 W7 O- Q6 }& l: G/ S+ _
continue;6 e$ U/ |" ]+ }2 J( w
}9 C: e' g. A+ \! s$ w7 A
pInvSort->MoveItem(i,nDestPos);
: X' L" K- S8 w9 |7 F# I g_DPlay.SendMoveItem(0,nSrc,nDestPos);
& g9 _% b5 ^9 v0 [* C Sleep(5);
* _' z' ?- b) y8 b- ]3 c' t: g //Error("移动 - %d->%d",nSrc,nDestPos);6 w3 E# I. ]7 d: ?$ f) G
nDestPos++;
3 U& H+ W5 A6 I: F m' P/ s; q }
/ c# |9 R, X/ S/ s8 z //取第一个元素的信息# _. l+ {: G" {# o; u
/*
' ?: L5 Q) ?0 ?+ F1 ] if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)' l. I7 ^# w3 \' A& ~3 }
{. Q. N% j! A, x5 O, u/ m# }
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
; j5 z) X* o E g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);5 @2 t) E: L6 B) O8 Q
}
4 e' m, q' h/ e& s. v+ r, F( ?# O */. V: V4 ]- ?# `* L( i9 W/ R# a( [
//////////////////////////////////////////////////////////////////////////
7 b7 w5 k: x' Q. W& { break;
. u: u3 \! D& g& V! B }
9 _* a5 o: c/ ~1 P; f& F+ f }
$ L/ y3 p- [. z, g+ V}
) q3 X+ H5 ^' |" Zm_wndMenu.SetVisible(FALSE);7 a# ^2 {/ s- B
) [7 J# d" I: G* ?$ }8 x
--------------------------------------------------------------------------------------------------------) s& `) t) x1 o' |; R1 E
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)0 q1 {1 Y* k* D
{
, H) t+ ^$ W0 C- d6 s+ uBaseMouseCursor();
! s; s) ^( R7 Z}* P$ E6 ]" c2 v" R4 ~. _
在其下添加:9 @; M) u( h5 k3 B
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)- k# L: R. [' Z3 G9 p
{& r7 k4 m0 ` j6 Y, L9 P2 C4 c# G
m_wndMenu.DeleteAllMenu();
5 d1 v; ~7 M# l% y' T' Mm_wndMenu.CreateMenu(this);
, [' z0 c, ^. A7 O3 Ym_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
6 K3 L9 g" A, `& v! g$ G7 Z# Y/ t: {
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
( m1 S) F- b& M{
) g( y% p4 J# i3 A& @ //P以上级别才可以删除所有道具8 s/ `% I) M" L5 O! H
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");, P9 A9 E \9 S6 x
}; X2 t. C) p. }7 u% q, r v
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
( L+ O2 ]7 C" J, J/ y) H+ }/ b3 T9 `m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );' c- y$ l# X: z2 R: a4 u
m_wndMenu.SetFocus(); E8 c D! O3 p/ T
}
0 N g# ^! t; y# P------------------------------------------------------------------------------------------------------------
2 ?8 p5 M) O* S" @" d*************************
# Q' ^* P* b8 B% ^WndField.h文件
7 h7 C1 W0 K7 B! o, a2 u# \, q" B*************************
" b* K3 H) K9 Y1 a搜索:BOOL m_bReport;- W" J2 M4 |& T
其后添加:6 A6 i: P' H! t2 H4 W" Y
CWndMenu m_wndMenu;
6 N2 s% A' c1 b& l! c搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
6 `; |# Y3 f" L$ d& m其后添加:* f$ m9 G4 L# L' S% q U. {* I0 y
virtual void OnRButtonUp(UINT nFlags, CPoint point);
/ P, X" k% Z' ~! D. X) Z" Z2 }! v5 _( P% j' ]# K
4 N: l0 U4 g3 t9 U) m7 }7 {
|
|