|
|
源文件中_Interface文件夹下WndField.cpp文件
1 _$ T& T' `0 b搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )% }% ]4 e9 n% `( z1 ~' V: ?1 r6 r
. C+ d/ v- }: _5 jstruct sItem- U* a Z" l5 b3 _% } S
{
" k0 F* i0 S, ~DWORD dwId;, P, R; B; x. {) x
DWORD dwKind2;0 R1 J! v' Z# E5 s. e' k
DWORD dwItemId;
! s: W3 j6 f& v% nBYTE nIndex;+ H3 g0 L/ P9 ^+ T5 e
sItem(){; [5 l$ \! I4 ]0 R4 E& v: J
dwId = dwKind2 = dwItemId = nIndex = 0;0 R p# @" e( j* d- D) c6 g; |
}+ N0 l8 R# R" h1 Y. D9 g
bool operator < (const sItem p2)6 @1 X2 y/ }4 n) }! m9 P- k, M$ s8 d! S
{8 m, d7 D# v& w. w
if (dwKind2 == p2.dwKind2)5 q' Q* D4 x% A9 o$ Z" W" K
{0 `! f$ {" X; {% r8 f! U
return dwItemId < p2.dwItemId;* B6 o- ^) t2 E1 o, G D8 g! `+ Q
}else{1 N* O$ I( n6 C$ n# [! V# W9 A
return dwKind2 < p2.dwKind2;
+ r! {% o9 t0 W# [; w& N+ i }
+ W+ g- A9 x6 [- T; Q}
& g# c q* N, S5 X7 r0 T: N( Q};
9 B+ c$ R5 p; ?: E& ?! d+ Tclass CInventorySort
I; K$ C5 L; W! Z{
. E" p6 X4 _- A( D* W; @public:
7 X9 x7 ?1 M! X! \: K3 RCInventorySort()
2 n& T) B* T$ X, d; R{1 }3 P; C$ I% \: s2 ^6 b
m_dwPos = 0;8 ~, u: o7 L5 D: y. h
}
0 ]% N' C# T& B" G8 p7 b0 ?$ L" y~CInventorySort(){}8 A5 Y" F( x" J* I: g9 ^
private:# w$ Q6 t/ w! K& C
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息2 B" f$ b2 G, k( g, U: G
DWORD m_dwPos;% u8 t# d+ D7 N5 }, i/ ~2 C# E" F5 B9 q" ]
public:8 M, q, P. S) Q. A" p5 {% `
void Add(BYTE nIndex)4 P+ Y% ? }1 ~* t+ M7 W
{
) g3 l7 D) ~( R$ r' s2 t if (m_dwPos >= MAX_INVENTORY)
& o/ a8 R' e- g {
- A# n! A- O1 m O5 v& |# ~9 d return;
7 {0 }, {6 U$ s( ? }
5 U J' v1 X$ Y, i m_Item[m_dwPos].nIndex = nIndex;
" ?! X1 U1 Q. |& o8 [# c/ \, @ m_Item[m_dwPos].dwId = m_dwPos;
; G# w$ e6 y# P G. j& H/ h m_dwPos++;, w7 s; O" f" u* s& V
}3 j3 }0 |1 Y3 l# n1 A7 \3 G+ k
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
, r+ B; m' {( j+ F: Q. j: H{% Q5 n4 a- ~& ?" r- R) d
for (int i=0;i<MAX_INVENTORY;i++)# N8 t" ?- y. d# I( q
{- @4 \2 F/ ?- @9 F
if (m_Item.dwId == dwId). S( l% l% P, [3 k+ g; l
{" g5 I0 O( t! g7 O
return m_Item.nIndex;5 E4 p% _- Y; X1 S& `0 m: S
}6 `/ c/ h' i) @4 }+ i) B
}
3 d: ^% p. q5 U9 S return 255;, R* E; u5 V& A- [
}% n+ b* D5 a$ c* d7 W
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
# F, L) [2 W" L( I, b2 R{, K& I* H8 n- L3 X
BYTE nTmp = 0;
% b) ]+ a0 C# \ bool bDest = false,bSrc = false;2 e4 H: b2 H4 `) U8 a2 P: F% s
for (int i=0;i<MAX_INVENTORY;i++)
9 m4 s" k3 G: R! t {! ?" \' A' T4 d0 m6 L8 g
if (dwSrcId == m_Item.dwId)- ]7 y4 |; d7 c
{" V9 p6 G$ Z- H; e0 a$ J9 I3 z
//id相等 则 改变对应的dest和src
/ M( ^0 K0 Q" R! u. V ~% m' b/ V! i. C nTmp = m_Item.nIndex;9 P$ Q3 `8 t V$ G
m_Item.nIndex = dest;7 p* s9 G+ q& \. ^
}+ t: S. E5 g0 E% G K* j
}1 m1 C1 F1 q# l- s& B& m
//临时数据保存完毕,交换开始/ s( A' i1 F& G9 K% W& |& E
for (int i=0;i<MAX_INVENTORY;i++) C, O/ {* `: f7 h: \% k( J9 _) C
{* T: g5 F+ b7 m% E% D3 ?4 W
if (dest == m_Item.nIndex)
" E" d3 a( i2 a {
- O2 f( T i4 l //id相等 则 改变对应的dest和src9 n7 M9 ^! | z9 Z7 L
m_Item.nIndex = nTmp;& @5 b& a: w" J# h9 ?- q4 j
}
6 x/ r5 j7 ]+ r/ s% E }
5 y7 Q: L8 a6 |# w4 ?7 R}' Z2 ~8 r/ a6 g4 \7 o. ]
};' r2 f0 v! a9 l' J9 @& `
-------------------------------------------------------------------------
1 y+ r$ P. n' ~6 o7 q h依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )# }1 }8 }+ X6 Y/ `; a& x* }' ~* T
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);7 t+ u& h7 j, m% |1 [7 t, E5 S: p
紧靠其上添加:
/ N) y8 U P6 J- E# Yif( pWndBase == &m_wndMenu ); \9 D0 l" o/ U5 P' [: n _
{
/ A7 d3 E+ \6 v switch( nID )
3 X9 D, |! N- i% ]* b {
8 _+ t5 ?6 A$ o6 Z case 2:
+ N6 a' B; }$ G- N$ R9 s1 A {: q& N/ _! S+ e7 i/ j6 l+ u" A% `
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);" d( i) ]1 a9 f6 N
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))2 i5 ]- |* [& t' i0 m8 k
{: }" y% @7 P% {0 m9 A& D
break;, [. V M8 r( G* _- Y
}
1 f7 }4 I" f1 f! T' m for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
: }, b7 x" i0 L* q$ l {) m- Z4 e2 o7 [; }+ G3 M) [
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);: z; f- ]! t- M U- T5 W
if( !pItemElem )2 Z* j4 V" C B3 e' m+ P
continue;
7 K7 Q4 _ W- E' Q4 a if(pItemElem->GetExtra() > 0)5 }- p" g3 y) |7 i* v
continue;0 w* V: t$ q: {4 e8 @ D. D! s
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
. t( b B5 V5 ~, l continue;/ {" }( j& h o# {% n
if( g_pPlayer->IsUsing( pItemElem ) )/ p. g7 |1 ^+ _5 f( ?6 Z
continue;
7 J! X: v% A9 ^5 C( L/ A: B. c) x if( pItemElem->IsUndestructable() == TRUE )
. ^% V3 R: h& D0 {7 c6 ~ {( X6 c! M- u/ q$ M& Z6 A, ^, \
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );4 G( x" o N7 n% d/ {
continue;: [1 ~$ {0 T* z. ~1 B5 ^4 w* j
}+ y) F8 k4 J# Z& _# K& |( ?+ ~
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum); S6 I" x: n5 T2 p
}
' V$ l6 e4 F3 O break;+ e) l0 j% Q$ U" R( i) `
}: ?! e5 d8 D/ o6 \
case 1:+ i% [! e4 Q* i& }& M1 Z
{
8 P# Y* J7 K) A. {+ | //整理背包9 O* s4 Y6 S7 O' N# J) J
//////////////////////////////////////////////////////////////////////////. X+ {2 s% c# R
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
3 n1 M0 D; d9 E$ S //////////////////////////////////////////////////////////////////////////
; X( Y: m0 C( a0 O ////////////////////////////////////////////////////////////////////////// S; B! d: R! n; U( s
CInventorySort* pInvSort = new CInventorySort;
& y4 F7 B7 }9 f$ R6 ~ vector <sItem> vItem;
G8 x( d# r: G7 _& X5 ?$ g vItem.resize(MAX_INVENTORY);//初始化大小
8 l* Y S( R# v. @# d ////////////////////////////////////////////////////////////////////////// V$ @6 d4 X+ W* _0 b" S3 o
//填充数据
4 O) U3 k7 P5 c3 H: k1 X! ^; G for (int i=0;i<MAX_INVENTORY;i++)9 r% T3 {6 c- |1 E: ]/ D; s6 v
{
8 [$ _( m g, z% p c1 h CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
1 y( w6 \& [( Z4 w1 [4 m, j5 k if (!pItemElem)+ L3 {! x& j7 `5 R- O
{0 B) j- l4 ` S! K/ O# c
vItem.dwKind2 = 0xffffffff;
0 B% y# x: e1 B vItem.dwItemId = 0xffffffff;; g; f" X2 O! ]# O
vItem.nIndex = i;
F8 D, B/ z( b' [. _/ n9 h9 j }else {
0 T( F# d3 a' m) i ItemProp* pProp = pItemElem->GetProp();
: ~$ c) V3 t7 |* e: {# @8 m$ u& O) i0 A$ N vItem.dwKind2 = pProp->dwItemKind2;9 d0 ?3 {6 ~) P9 ~5 `2 i
vItem.dwItemId = pItemElem->m_dwItemId;
/ L" ~6 H9 J$ [. \& |' ` vItem.nIndex = i;
8 H2 z3 y j+ N2 {1 n3 S2 w! m }
- q- w* s' D# Y. b! E% z% [2 z //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
0 { G+ S/ i* O6 g7 x6 P/ }) h }
$ f% f' a- y8 r. b. R //////////////////////////////////////////////////////////////////////////0 R; I* G# ^" D% \
sort(vItem.begin(),vItem.end());//排序
. E. s8 p) c8 e //////////////////////////////////////////////////////////////////////////) q7 a9 R& N3 j! X' ^- ~3 T( `9 H
//交换! |' q# q) Q, P' f! [
for (size_t i=0;i<vItem.size();i++)
$ }1 t) P; I, V* R" Q {
u3 b% G, I \6 b) s1 P" |6 p: k //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);6 x5 Y) T6 ^% m: E5 ]& \
pInvSort->Add(vItem.nIndex);2 l) E. ~& ~6 @0 H$ Q$ D% A/ d
} f: l; h3 r( E: |" \- ?
BYTE nDestPos = 0;2 z; N5 I! F0 I0 N! V
for (int i=0;i<MAX_INVENTORY;i++)* A9 v$ w) R- W6 v2 U8 z8 ^- E
{
+ m* d5 [" W+ X2 \/ g CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);% O8 |/ p7 }3 v
if (pItemElem)
0 k! M4 I( B) J9 c, B% r {+ `3 ~& q+ f+ M8 d2 {4 |# ]8 u
if (IsUsingItem(pItemElem))& D3 ~) Q! i% J+ t! a6 q
{
O# l" F# Q( N+ [2 V5 ~0 _ //这个位置无法放
+ S \4 a/ W2 p* ^8 } nDestPos++;
& y' {, t6 `+ l; Q& I! Y: s }
; A2 e6 U5 l1 a: I# O }, L- q6 m9 F3 Z0 r% V2 Y
BYTE nSrc = pInvSort->GetItemSrc(i);
- g0 ]) `$ O- X9 I5 Y9 O pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
' \( b, o) X6 u, ]5 p& v if (pItemElem)1 Z0 Z2 {4 {/ j9 d6 V; T
{* e' R1 J% ^6 f
if (IsUsingItem(pItemElem))6 W: k6 t8 D. y" U
{
- f& Q1 L) C( E9 z7 y //这个道具无法移动,跳过
8 K8 x, j. _# g4 X: J5 b2 [ continue;
/ l+ b$ l+ H- h1 l/ g G- J7 ?8 S }/ Z I$ I! U" M; T# A* L& U! D
}else{
/ g+ v7 a8 w: i- i0 c# m3 w. P4 J //空位置 不用动& x6 c9 Q n. Y l* n2 j
continue;+ e) j0 o8 d/ c& ?, w. r- |- A4 [
}. b5 l, k+ S, G0 n
//////////////////////////////////////////////////////////////////////////
/ ?/ ?* F2 P. @( i7 D( | //开始移动# F/ h% v0 e* p
if (nSrc == nDestPos)1 w8 r0 C$ D. @ \- L
{
5 [% h! v' r7 q! V P/ @: s //原地不动' M2 p- t1 F" L9 N- c3 w, N
nDestPos++;/ K9 r2 M8 G5 r. i" j5 T
continue;! }, U4 l0 a) k% }- v# B) c, s
}) E9 A$ `" \( q' r5 e4 d9 f! N
pInvSort->MoveItem(i,nDestPos);" T. P7 |" n" E+ H
g_DPlay.SendMoveItem(0,nSrc,nDestPos);# o7 _! U0 K* T% j6 j
Sleep(5);1 J) c- T$ L+ ~. u0 O; o
//Error("移动 - %d->%d",nSrc,nDestPos);
; E; `& U; f. w9 M, g nDestPos++;
: n5 V2 _2 O0 u6 I% r }
9 n1 c, \* i) r9 Q //取第一个元素的信息
& M$ m9 k; L/ B5 `2 w- K% C /*
: e$ @* j/ _9 J& u5 D& x. _3 C if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
' L- E( o9 s6 R3 i4 I1 }! Y {
+ q: m+ U( u5 w3 v# x Error("Move - From:%d,To:%d",vItem[0].nIndex,x);5 X. y. ]* M8 w# B$ Q
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
2 H% ~! o3 x3 A# z+ @+ f: t }0 r W0 `- u% N$ {$ X" Z
*/
! p1 h5 C/ ?- I. ^4 l+ o //////////////////////////////////////////////////////////////////////////7 ^' E+ R! Y0 J9 d+ E u
break;
0 e/ h B. p) s! G; _* V2 I# _ }
$ y, ?# M( k5 Q/ c8 q } # Q( {, H3 b6 y4 q
}/ m! X2 b2 Y6 `5 y
m_wndMenu.SetVisible(FALSE);) }+ u$ ?3 b4 k5 W$ ]) ~
4 p6 M( Q9 |5 Q L _9 r. A# y
--------------------------------------------------------------------------------------------------------4 d! X, f! ~( t2 p2 j
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)9 h8 e+ V. U# }- N) q
{9 `5 O `$ L8 n
BaseMouseCursor();$ {' U# ?) l4 o6 e8 T* {
}+ ~3 t& P; g h' c: d
在其下添加:+ \# \" S; |- l0 Y7 e V
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
: k" @, s$ B+ S* c* Q E{
6 i7 F# |3 r; s/ _m_wndMenu.DeleteAllMenu();
$ i; o, m6 z4 d& x3 }. p9 Jm_wndMenu.CreateMenu(this);
9 x1 t7 @" r" ~( r- }m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
: y9 U3 D( e% V, q7 h; O/ W. w
1 c: C' R% c+ d' w# ]# Y( dif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
4 r0 @+ L6 f/ K/ l{
& K) Y' t4 E% U //P以上级别才可以删除所有道具
$ |( N( o, M, n3 N3 l m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");; j2 w" l. G+ M8 V7 U' b
}4 F, P. R7 Z3 `, R! g6 S2 e
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );3 n- P1 X. m \8 k5 I7 k
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );; S) q8 C. b8 z$ c
m_wndMenu.SetFocus();: K8 l2 H5 O! }
}5 R* Z6 u1 v/ ~ |4 m
------------------------------------------------------------------------------------------------------------
/ Q4 j$ L2 ?# f+ s*************************: X# _! z0 @5 y% I* _ q
WndField.h文件
' K' i( R; S0 p, [*************************
8 b* T- V9 G7 e搜索:BOOL m_bReport;7 L! I$ h q1 n7 V' V( d$ s6 j
其后添加:- A8 B( c) l2 W4 G
CWndMenu m_wndMenu;5 d. I0 U! D4 A o
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);% ?# d" j" _2 g$ I
其后添加:
: Z/ Y N( l# c! P7 u( K- vvirtual void OnRButtonUp(UINT nFlags, CPoint point);
y3 F: A- t3 H J; p, G; X7 @; X! g3 s# R
7 u* |7 _2 d c, W8 ]' I5 L |
|