|
源文件中_Interface文件夹下WndField.cpp文件
3 S2 r, X4 l4 R9 }+ @搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )) X5 n* _: ~" f. c5 G7 ^& `& _9 _6 g& C
7 p! {/ M8 [- i4 o/ I( X/ z1 _struct sItem+ {+ I# _# R; j% \, k' e b' U
{
: m, @ i0 n4 [6 ]- LDWORD dwId;
* r+ L" r" Y+ t5 R' w: l" ODWORD dwKind2;
* l: v- Z4 X* f! [ V1 T4 jDWORD dwItemId;0 a( P* i: m8 j9 P& q5 Q' p
BYTE nIndex;
& W( y6 [- [) nsItem(){
/ _! A8 |* K+ X, e dwId = dwKind2 = dwItemId = nIndex = 0;! W7 j( l2 S O+ A
}
! `$ ?, ~" ~1 s/ P1 I" ^bool operator < (const sItem p2), @" [) U8 j3 O, p- @) W2 }5 P6 a! m
{5 j' \% b0 o+ n
if (dwKind2 == p2.dwKind2)
+ |4 r& [3 s% h( @0 ]9 d+ p$ i- L {2 y3 y( A1 x' C! w4 ?
return dwItemId < p2.dwItemId;" R6 M' E6 b5 U) a/ ]; @9 v* \
}else{' J' Q3 P! P; Y- B4 H1 Q
return dwKind2 < p2.dwKind2;
, p% P5 j* z2 y4 j3 Y, r: x# q }
" ]+ \8 w2 H; L7 k* b}
& j- L; E& _/ D8 q) _};
1 X. U* w2 B" P" |; i9 V% u; |class CInventorySort" `' u8 S' `" T: a$ \# E2 Q
{; v3 |/ Y- a4 A) i$ Y
public:( w* f/ R# {0 p* h7 Q* F% ]
CInventorySort()
8 v! Q' F; |" w7 S( ^* {{, a) Q E( w- u) S9 `( ]
m_dwPos = 0;
" t( Y* }3 N" h6 S3 b6 C1 v}% _+ s p6 G" ?& w$ @
~CInventorySort(){}
# I, Z) h G: _ ~5 Xprivate:
2 v' L+ N9 a" \* PsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
: n( r1 P# k; d; ]1 h, Y' HDWORD m_dwPos;
) }$ T9 b, c% C! [3 `) mpublic:
8 f( K8 f3 ]/ B/ z* ]void Add(BYTE nIndex)7 r1 |$ y$ G, u* T
{4 R( O. u. p7 C$ l
if (m_dwPos >= MAX_INVENTORY)
, s' C$ s. z! S# Y2 t( G {
2 j! [+ q$ i& u( L6 O return;1 W! I) k9 R; i
}
; ~7 i4 C. l( j( S2 Y* I5 L m_Item[m_dwPos].nIndex = nIndex;2 k: X9 i! {' V/ W2 F4 y8 y& g# y$ F |0 O7 f
m_Item[m_dwPos].dwId = m_dwPos;# F5 \+ _7 d6 `& ]9 c# _
m_dwPos++;
% R. q. }5 e, Z( P: A; k1 X}& [2 H; D1 `0 V; ^6 T$ S
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
& i8 l5 w0 P2 ^) ~2 E' z4 r. Q{% x0 H. Z( u( T+ ?
for (int i=0;i<MAX_INVENTORY;i++)/ ~6 {0 v0 l! e5 t" l# M9 S
{, `, H, l$ |5 v5 R
if (m_Item.dwId == dwId)
5 ]" d" e2 E; y, v6 z" n) t3 ]9 T! N8 m {
. d5 \1 F9 n1 Q p return m_Item.nIndex;
3 \& f1 c' P0 Q" O8 d }
9 S' l: Y- f' U- d/ P* i }& J# R. @( K( B4 h
return 255;
6 t% W/ p* W8 Z}
9 Z9 _1 ^# V- `9 L; |7 Qvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
, c% T1 {' V! ^ A! a# W+ j% u8 F{0 ^, C6 q1 X* \% ~ M3 t9 S* d
BYTE nTmp = 0;2 J3 Z3 ^4 ?6 e& i
bool bDest = false,bSrc = false;
6 U; Y3 j9 X2 s# L for (int i=0;i<MAX_INVENTORY;i++)
3 V& W0 E4 [; _1 |) n% x ~ {
: F" Q. H' l2 @' n+ R# e& A, ^ if (dwSrcId == m_Item.dwId)
. Z1 t; J+ }. _4 I {$ G/ A8 r. u9 U: W" W/ s% `" O5 ]
//id相等 则 改变对应的dest和src
2 p& j% s& z- I' F& `" [ nTmp = m_Item.nIndex;
& }8 j0 R( }% K& Z% c& u m_Item.nIndex = dest;
7 L( U2 w7 I1 t& K- f) V( s* O) l }
; z9 ~8 Y) Q3 ^/ o1 z }; o; P" B' W0 K3 M1 t' \- j
//临时数据保存完毕,交换开始+ ]$ p5 D* ~9 l1 I* q2 ^
for (int i=0;i<MAX_INVENTORY;i++)0 w1 S+ b" Y$ E9 w" L
{
8 y4 z0 N* z6 j1 W) Z if (dest == m_Item.nIndex)! b& T5 s7 j: p5 l
{
) B; j, y( Q/ L1 `' O) ~ //id相等 则 改变对应的dest和src
& B1 P- A& k$ |& t m_Item.nIndex = nTmp;* u) A" e4 }/ \9 ]) s. i
}4 b8 d- G, o& b; P
}3 F0 l5 Q4 K4 g- f/ {
}7 r+ `9 ~. d% F+ }4 S0 ]4 O
};2 K( v+ Y m* j- y# s
-------------------------------------------------------------------------5 t& E) I7 t" ^4 l
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
% P: a: P' q0 ^* S6 j搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
& m1 C4 D0 P- ?0 W紧靠其上添加:
2 d7 T6 f: @4 _! i) c, y2 ]( qif( pWndBase == &m_wndMenu )
& Q+ m% {5 t$ ?{
/ @( P/ p4 f5 C1 B/ u- ^9 h switch( nID )
2 m G2 h W6 g9 u2 o' z* M+ S4 t. ? {$ B9 s, E D! H/ @2 B
case 2:6 n' T1 P$ K$ e/ Q: m: t
{( g+ y1 E3 l3 q: F* w% M
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);+ x% d6 F _' S0 C2 \
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 a1 z+ s$ Y4 m# X7 s {# h T3 T9 S- x
break;
0 @( F7 i3 w3 W E+ {* Z; P( f8 Q }& n- _+ |" T* r8 _- U8 l
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
9 M6 u' N% r0 W$ c8 p {' n- F# V( _% z+ N
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);$ S- {' r+ J5 E d' v
if( !pItemElem )
; L& a2 @" \$ [6 e+ `4 Z) ?+ ^- x continue;
+ K) A Z# t3 U6 v0 [3 D if(pItemElem->GetExtra() > 0) ]" U* T( D9 E3 _% c- ] ^( E
continue;
; V0 S. h- y! I if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
/ z% N, [9 J3 E, D2 o continue;. V1 h8 z! z+ l# W9 T4 @$ _
if( g_pPlayer->IsUsing( pItemElem ) )! E9 w J: T2 v; I' K- J
continue;1 d: e' P& p% \# G
if( pItemElem->IsUndestructable() == TRUE )6 g) O7 `, Y. \5 X# C. S
{
i! R, c6 h. e% ~- N0 m+ G& I g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
5 u) b0 Y6 `' Q' g7 b' D9 l) r continue;
. A( R0 F3 x2 f4 n, _8 A }. I, j; |9 q) p5 I7 {
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);5 e) Z* b. W* \: ~/ Q& V
}
+ t* g/ G2 ~5 Z) H break;
9 U3 U7 a6 b8 h$ c1 C }; ~& D6 m. \! b" c9 g! O
case 1:
w. W8 @4 Z$ |, a5 A {
c$ F E; p1 O; M [ //整理背包
- C9 J5 b$ @0 J, A$ h0 x& S //////////////////////////////////////////////////////////////////////////
& A0 B4 F7 Y; q5 J" _ //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );# B& v! x) u: I% ^
//////////////////////////////////////////////////////////////////////////$ A" ^9 @% @0 P# ?, A2 H
//////////////////////////////////////////////////////////////////////////
: R: M2 q8 g8 G4 R; q1 n- k/ k CInventorySort* pInvSort = new CInventorySort;4 |2 D) `1 g% w) l
vector <sItem> vItem;
9 C2 l' F, x" Y+ Q- L7 w! f vItem.resize(MAX_INVENTORY);//初始化大小
0 c: c7 D" x6 _: G8 |; K7 g3 k4 D //////////////////////////////////////////////////////////////////////////; B) l# Y* q! J/ w. x: ?
//填充数据
, c9 b1 N/ E3 ~ for (int i=0;i<MAX_INVENTORY;i++) z- c6 g* H% h4 a
{
0 d& w; h. ^, q) A/ j8 R+ q0 q# x CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
8 P* T: k1 ^7 u2 o0 z2 V& n if (!pItemElem)/ o8 z; p q# j2 ?4 c) w
{
; O5 M4 x& b& N9 ^1 K/ |" X! @9 _1 e vItem.dwKind2 = 0xffffffff;
q& B( @/ Q. B7 n6 j% w vItem.dwItemId = 0xffffffff;
" R; {2 `1 t3 p vItem.nIndex = i;
7 k0 J* ]2 p% {1 D$ k& p( x# S4 r }else {6 p5 X1 F3 b" D3 \' h5 a
ItemProp* pProp = pItemElem->GetProp();& X+ n2 f6 u- ~7 W0 C
vItem.dwKind2 = pProp->dwItemKind2;$ Z+ n; @% F# w# b- x5 h9 k
vItem.dwItemId = pItemElem->m_dwItemId;
2 I8 a7 G, [: j5 b! ` vItem.nIndex = i;
1 E% c/ g* K( z3 K& s }
6 Z7 r, @; d1 n+ ^! G5 f' v. S+ O //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
% f; P3 I1 c7 q d5 U! p" y }* b' ~+ C k: H. o
//////////////////////////////////////////////////////////////////////////$ U* |9 E1 N6 g
sort(vItem.begin(),vItem.end());//排序) B/ k+ T+ z& h- ~9 p
//////////////////////////////////////////////////////////////////////////
$ n+ u4 `" V! j; ?5 ~( A //交换' m" o4 C3 B0 c
for (size_t i=0;i<vItem.size();i++)5 P) B' a, Z6 ?3 J8 T" d6 ?
{
5 E& L) }3 Q$ `+ C0 O //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);7 j+ I, b) \7 i' n( g0 N
pInvSort->Add(vItem.nIndex);
4 s: H: i3 l( H' z }
" R. v% u* h2 l1 j$ s: q6 e! v BYTE nDestPos = 0;! k, V6 \* p5 P) l( g6 e5 R! H' A
for (int i=0;i<MAX_INVENTORY;i++)" x' e+ G; J& J& k# E# S
{
; Z2 U, B7 E7 C. q4 X CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);2 Q+ E+ u- g1 s$ y5 b% g
if (pItemElem)7 R* |* @! W- h ^
{8 |; e Q& Y% Q9 n4 h5 B
if (IsUsingItem(pItemElem))8 v7 C; ^; g8 j1 r
{
# q/ p- g1 U6 Z6 o //这个位置无法放: A W( Q4 p" L
nDestPos++;& Y7 s6 y+ G( |( F6 M
}! i) v T) z& K: S& h6 B# f+ @4 X$ d
}
6 f6 M# @( p0 e/ S6 s$ u BYTE nSrc = pInvSort->GetItemSrc(i);
9 N) R9 l# V; f; T6 X7 I/ ] pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);) v8 S9 R0 F7 ]) R
if (pItemElem)0 k$ v% k1 M/ D6 k# y2 j
{( F: s) _' o! p0 Y* d i: F# v9 s
if (IsUsingItem(pItemElem))
. u8 u! ]3 W' V, S8 z: N$ A3 z& ? {
8 V5 ]" b9 F2 H5 V$ L. V6 K8 [4 V //这个道具无法移动,跳过
- T# Z$ V/ g3 o- H0 C; z/ R+ G continue;
$ ~, J/ N6 G1 p$ k( i }
" c8 G7 q i6 G H! z }else{
, f# m* D0 f# j5 `' Y! U& t //空位置 不用动
6 z. l# Z6 l# e) f continue;
/ z: U% l) ^- H }6 u @& {" S- P2 M" {( j
//////////////////////////////////////////////////////////////////////////
1 P- E6 U: f" h3 j# j9 M4 y0 o //开始移动
5 r9 [7 T5 E' V7 l! x- B if (nSrc == nDestPos)" D' c. B. d9 ] H: W3 s) Y
{
9 E' ?* `: S1 n8 g5 A. ^ //原地不动
" S2 q/ I. G2 O, ~ nDestPos++;8 C, D" O7 T6 o, _* _2 K$ R3 Y" p0 M/ M
continue;
4 O: e8 Z) o6 W6 h. p% P# n" V) P$ } }' R6 d% ]9 \4 J5 W
pInvSort->MoveItem(i,nDestPos);
8 k4 B8 s4 D, K" h; c1 g6 u g_DPlay.SendMoveItem(0,nSrc,nDestPos);
* [$ k+ J& ^+ {3 C$ i: _7 C* U Sleep(5);' O2 q* a/ ^3 I% ^
//Error("移动 - %d->%d",nSrc,nDestPos);
7 ` `! u0 m8 U* {2 `0 L& H nDestPos++;( J2 f8 x) @- H4 G: D
}
7 s) y% c7 x$ h1 j //取第一个元素的信息. [" X9 r( l7 P: s3 I$ z/ B0 H. X9 \
/*8 R9 F0 i$ ]7 Y* u! O/ c+ }# u; T
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)3 }1 P5 Z7 V* i/ ?! |5 |& i
{
. V+ I' ~; n- ]% K" z( K# Z Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
8 m9 X- L( F" J' n/ E# D* h g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x); E4 i; j, P) ~1 W
}
5 |4 Q$ F$ j9 c$ I0 k3 L */, m+ Y5 [2 N4 W0 o6 i9 P
//////////////////////////////////////////////////////////////////////////
- g1 }' f" P5 E( a! y break;9 a: m0 a5 I& N7 k0 P0 M0 \" k. u
}! w5 q( i$ ~7 B4 _2 J( M2 c" h9 g
} / j. [7 Y6 `8 `- w
}
& |# M( t ]9 @; Y2 N" gm_wndMenu.SetVisible(FALSE);
9 C2 O; g) u% ^, o! { K* D/ F9 ~3 g: \
--------------------------------------------------------------------------------------------------------! k& I& {+ j" ~
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)0 m& t3 e, \5 R0 M1 F: Y
{0 Q z4 L+ A! n' t/ F1 [) t; ]
BaseMouseCursor();) {7 _1 z; t% @/ @
}: r- r- U7 A) K5 F* H0 Z
在其下添加:2 x: ^. r ]) A& i# k
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point) j, V. G! g% k! J
{
* P% N9 B: ]) j6 Y. {m_wndMenu.DeleteAllMenu();; @ O8 N( a X* P! S" ^
m_wndMenu.CreateMenu(this);3 U: Q: y- i+ u! O5 v
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
2 `4 D+ }' n1 H, \1 k) m! t" ^
* N2 t) x2 y1 L0 m& ]1 |if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
: Z* f( {" b! ^. }2 t8 t# B7 f{) j- h9 Z6 K6 F4 |' h# z! P, N
//P以上级别才可以删除所有道具
5 |1 {: K f5 J m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");$ j3 I/ q4 u. _+ K! E
}7 r" E4 t n, X
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
+ o/ m% J( k( ]# \4 P, g0 G8 C/ |m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
' g) c9 v# o0 Im_wndMenu.SetFocus();& |# y3 O/ H. V* G# J& a0 n
}) l5 c: _% U4 I8 Y9 f
------------------------------------------------------------------------------------------------------------9 t3 q! P0 Z! O6 H4 c) }+ A! u
*************************4 J; V1 e6 ]. Q, u1 n* u t
WndField.h文件' H, E+ i, T' ~9 N1 ^
************************** [' n: e+ z y' O8 B. P/ j* ^. ~
搜索:BOOL m_bReport;
4 M1 R& e4 R0 H4 y, v其后添加:% n5 c9 t! Q; [# F" ~& L& w. \. D. v
CWndMenu m_wndMenu;
9 }3 t/ [# m2 z搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
# y! K% e4 M' p! A: K其后添加:
a! _; n$ f7 \# kvirtual void OnRButtonUp(UINT nFlags, CPoint point);! c& C3 y; E( x7 Y
5 w& ?* `; ]5 X
# l0 q" @+ b7 p% O2 n% c5 a |
|