|
|
源文件中_Interface文件夹下WndField.cpp文件
' C& ]( e4 s5 {/ \6 b* j搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
. x( J' ^8 i" r) u* r: d& n$ J" A
( W! w, V' {3 C& W/ l. u' J" J6 \struct sItem" p0 E$ K. o7 i/ C4 m" o
{
! o- d2 c5 P* G7 RDWORD dwId;
( _' J) L) y! f/ U `1 dDWORD dwKind2;
" a, J7 H' T* T7 s& h6 @DWORD dwItemId;
/ w2 x! G, s c: D W7 f9 W! VBYTE nIndex;7 Q9 g" r! M* G7 U& t9 I3 P, N
sItem(){
3 A$ i- ^- O# W+ F8 n% c8 [2 [ dwId = dwKind2 = dwItemId = nIndex = 0;
( _7 g) [, {' ]( J3 W}
! X6 M% S6 A7 C8 H* wbool operator < (const sItem p2)9 L/ R7 z, f3 I& g0 v% V# g* ^
{2 h. O( ^! R4 b' j0 q* y
if (dwKind2 == p2.dwKind2)
' r& p" Y7 \7 O b; U/ G {+ }7 Z g7 v" x- Z. P/ g
return dwItemId < p2.dwItemId;! W" f1 m8 d4 r v
}else{8 r* }* ?( y) |- G, z. ~6 i2 H7 w
return dwKind2 < p2.dwKind2;2 ~7 ^. V, Q. [* v1 e9 X
}
- i7 s& {8 @* P9 c' K/ ^: j0 s6 Q}* g! [/ T2 ?1 Y7 Y5 K' f' ?
};! `7 J2 c6 F! I( U
class CInventorySort8 i, E/ h( }8 U4 e/ Y
{/ Q0 i; a! R/ G, X3 B1 B, L. B
public:
7 ]% @; Q$ m* j* O" s* B) fCInventorySort()
7 Z \. x2 C, `3 Y% L: ]" `: a{
5 L8 J% p8 m: K" s, o$ z m_dwPos = 0;
m" S6 D4 Q4 R/ Z5 A" x q}* H1 T% l& u' h6 ]3 Q$ q
~CInventorySort(){}
- p$ a6 N6 z* z ^# w4 f; E2 lprivate:2 p5 q! R g- R8 V. W
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
7 ^0 K) K1 l. Q1 ADWORD m_dwPos;
) {# h/ O) Z* ]9 lpublic:
2 f6 [' ]2 ~* G$ Ovoid Add(BYTE nIndex)$ p! Q- }* ~( L; D* C
{
% F4 ?. k6 J5 n if (m_dwPos >= MAX_INVENTORY)
0 B% G4 _8 k4 o; l {
* f6 u9 { e/ O2 B1 T return;
$ H7 l. h0 [/ p }( t8 V8 w3 c' u1 R4 \5 g
m_Item[m_dwPos].nIndex = nIndex;
( j7 T- r/ d% `- L! x m_Item[m_dwPos].dwId = m_dwPos;3 g( y/ \( j. |% t" z
m_dwPos++;
* h7 m- c: ]5 i5 m9 b7 P6 R}% \0 Q9 W: ?0 O
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
) u+ g, M% K& W0 q1 g8 ]; l3 W! w- C{9 P/ E) f% B1 a) ]+ U, V5 E
for (int i=0;i<MAX_INVENTORY;i++)) h: A* J/ C7 H+ W
{
) ^+ }& q; m. P if (m_Item.dwId == dwId)$ ?8 b' k! V2 {; {
{7 t' u/ z+ D s3 l4 W! r
return m_Item.nIndex;" G& o% ^ h% \% U# A5 h
}
" |3 l, D7 m0 I# g; q, c( { }
+ v: o. Q; x- u% }2 `* g return 255;
4 H& ?+ ^9 P% ?9 ~- q" I$ ?6 r}
3 R% _* X' D' g0 W+ {! X& ?void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
( A$ R3 S- g8 _! n& p{: B1 S; \/ n+ z. [: k- h
BYTE nTmp = 0;
) ]$ a( @ E1 r/ c' @3 {" i* P& D bool bDest = false,bSrc = false;: u. Q3 J& e. Q6 j
for (int i=0;i<MAX_INVENTORY;i++); u. z6 l) k3 |) a D
{
; \4 d& ^3 B- g3 ?# j% l. q3 r if (dwSrcId == m_Item.dwId)9 W, f, C6 M: X: X
{5 }# a; ]+ `- H
//id相等 则 改变对应的dest和src1 n4 M, F) A- l
nTmp = m_Item.nIndex;. ?9 x+ i8 k |" ?) N
m_Item.nIndex = dest;" r4 [9 b0 q, ?+ U( Y) |& Q
}
/ t. u" T! W* A; D: G }6 @3 M* m$ a, Q8 u; P1 y }
//临时数据保存完毕,交换开始: m9 U9 ~/ |; o/ q# m4 s! t% Z
for (int i=0;i<MAX_INVENTORY;i++)
' a, G9 a( j; y# G {
: }( H6 y T8 P: z$ ]/ [4 `. g: q if (dest == m_Item.nIndex)
4 }! Y M3 v% P8 a {, a9 V8 k6 q' m7 Z* F
//id相等 则 改变对应的dest和src( W) ~3 N9 U; b& R& e! q3 x; w" v* y8 l
m_Item.nIndex = nTmp;
! U# X+ E1 h: a/ `$ O! z }
; z4 H$ ^+ W$ O" A. U) | }& j6 Z* f, `, l+ A0 X, X7 f# j9 }
}/ ~. g6 n6 X5 O1 d9 j4 b
};! E8 m& s, K" I/ `
-------------------------------------------------------------------------% [: j6 U% o% q9 }* ?
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
5 Z: r/ j, m, N( p8 Z3 {搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);+ |5 e7 v" r5 X5 {) R7 P
紧靠其上添加:
. Q8 B+ P& O% J- W5 H% `1 Hif( pWndBase == &m_wndMenu )
4 q7 |7 u O3 E{
+ }' v, a7 m |8 a switch( nID )# S' C* @2 w" b( U% i
{
- r3 [3 c6 v. P9 @ s/ k case 2:" `, y1 K# d& p2 s$ K
{
5 b3 _ ?3 |4 H //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);2 p |9 Q" O5 @$ q' _" N
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
R' W3 C, j( `2 l+ t {
" s) G$ s q- v0 C* e break;1 V9 O2 G# q k5 l6 b
}
8 u4 q: e- U) s4 n& @, M G for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)9 @+ H# R! s, A7 K
{
8 u! m7 [" [9 B$ a CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);/ m8 [3 h% U5 q$ V
if( !pItemElem )
* D+ h9 s: y$ @6 @0 I6 u continue;
- z, _/ U! Q; G3 L+ I if(pItemElem->GetExtra() > 0)
/ D1 m8 _; J' S4 r) `8 h continue;" T8 ]# v5 x/ m6 T- w" h0 v
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
5 T1 Y5 b2 g: F continue;
3 j: V& ^5 n$ ~* u4 [ if( g_pPlayer->IsUsing( pItemElem ) )
% c9 i4 |% D3 z continue;, J. T, I0 k$ Y0 p; k' e
if( pItemElem->IsUndestructable() == TRUE )
/ c7 o! K K* T; e/ g0 { {3 G* K" ^( y+ ]8 g5 [) g1 i3 B
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );% X) \" p7 s: n9 K2 Z* w0 `3 q
continue;
& g0 |$ ?8 }# T* z8 D }
7 [. @1 Q( f) o5 c$ u5 y0 ?) _, D g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
" D& l+ G. ~0 k }
5 \3 ?# ~% T( g. [( F break;. M! l4 r# \* I# M9 V8 v6 ]* d
}
" u* l; I1 I" v case 1:
3 I3 R+ V' M: A4 I+ r5 H8 O) N" z* w {
. E) X6 H1 B) v' g. w5 ^. T# F //整理背包' Y/ L- j& o% p5 r- P6 g
//////////////////////////////////////////////////////////////////////////
& Q0 {! H- |" k) m; S p //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );3 y. |$ W0 l- q& L S% ~
//////////////////////////////////////////////////////////////////////////8 d L. o" d% E
//////////////////////////////////////////////////////////////////////////
! K- b5 d/ J/ U& z CInventorySort* pInvSort = new CInventorySort;
# ?0 v/ X, V; U, b vector <sItem> vItem;. j/ Y9 I. [8 [+ C
vItem.resize(MAX_INVENTORY);//初始化大小7 Y0 j( w0 B) _. `- F/ d7 z6 F2 ~% G3 L
//////////////////////////////////////////////////////////////////////////4 a) n" m: z5 F/ M
//填充数据
9 k; @) ?! ~: B! b5 N+ | for (int i=0;i<MAX_INVENTORY;i++)
. f* R& @5 F# F* E {0 g0 X/ S6 v0 q- _
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
9 V# T# i$ f6 p* M# ^- K' B if (!pItemElem) B/ `& q( @3 A0 D
{# [& d0 _) M' \" Y. a6 @" |
vItem.dwKind2 = 0xffffffff;
9 Z+ C2 s! q( ?* @: V! [& \ vItem.dwItemId = 0xffffffff;
2 m j% P7 e" r2 t1 U vItem.nIndex = i;
/ h8 u! T( g9 ]0 r. M: g }else {
) y, Z- e# v; o. v: N% U: m Q ItemProp* pProp = pItemElem->GetProp();
6 K( j, @! V2 C" A; U6 K vItem.dwKind2 = pProp->dwItemKind2;9 x' N6 I. C! E/ K+ B8 n
vItem.dwItemId = pItemElem->m_dwItemId;/ @, p+ w# q% x0 @- c' G
vItem.nIndex = i;
; s1 t% g1 l, R1 v# F3 l1 j1 Q }
& f- S; a5 n3 L& q- ` //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);$ l, k; A4 z0 R: A U
}
8 p0 x: s# J' ] //////////////////////////////////////////////////////////////////////////
- a9 D3 n; G, X+ k$ x. h& B sort(vItem.begin(),vItem.end());//排序
- o4 ^3 R) K8 i0 ] //////////////////////////////////////////////////////////////////////////
9 r W- k' H5 z6 U //交换; }7 i6 M @5 P4 }' Z0 q# k
for (size_t i=0;i<vItem.size();i++)5 h3 h$ D/ g" o1 k7 J
{7 @6 O$ n. n. w/ K
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
! d2 R* b& n, k$ W9 U8 e pInvSort->Add(vItem.nIndex);
3 [( Q! x5 b% \! m }" u, ?" B, r8 E+ g. n+ N
BYTE nDestPos = 0;
; P& ?2 ^' v, ~ for (int i=0;i<MAX_INVENTORY;i++)
1 P& s# [- i, T8 T( w$ N9 C: D {
5 j7 p; X' |" [; }, Z CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
8 Z" Z/ I( y, ^0 P0 g if (pItemElem)4 v7 r, v) B0 R* _ D6 ~
{
# j9 k% g8 r3 a: N6 d5 W: X+ ~( R if (IsUsingItem(pItemElem)) F5 T0 G- u q# m* P
{
2 P( _- {* r& D; C1 z' P //这个位置无法放' ?$ s' u2 t0 m& `
nDestPos++;5 |8 J1 y1 R+ S* P
}( Y9 }" e/ b; l) x% N1 h7 O# c# C& K
}
& k- ^* i' O) G2 x: F/ F; R6 ? BYTE nSrc = pInvSort->GetItemSrc(i);- D# m- c- V% ~( k0 |
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
9 Q1 Q7 {5 V+ M4 [ if (pItemElem)$ ?/ v" r. q- y, q! `5 J
{
. A- S6 p* R, W8 G7 ?; |* H: h7 b% T) \ if (IsUsingItem(pItemElem))+ t& X' U/ `4 T8 j. }, z
{: f+ A* |& h8 W5 R2 A# _ h; a1 x
//这个道具无法移动,跳过
. l& p" U4 s6 M7 Q0 [1 r continue;
1 e8 ]( }+ J2 j7 J5 O }( d5 E" p5 `+ z* I( S6 b
}else{
" M4 I1 }( m0 b1 c: `5 N$ x: t g //空位置 不用动6 B6 c: S; d4 [
continue;
5 D: l' n" {( O7 Q | }
. Y" \+ f7 g2 B, ?" Z3 ~6 A$ } //////////////////////////////////////////////////////////////////////////: f8 o @( g* y) a1 ^' T
//开始移动: ]: ?" G# ~# h2 P0 `: N. T5 i
if (nSrc == nDestPos)
' R. b) u. `' J7 s, ? O' _ {6 }8 }+ P. H: P# _* h
//原地不动$ z) i% U1 @2 c% G) U* |$ v
nDestPos++;
* Y8 p+ f q- N: \* U continue;
/ C/ t8 A, o8 d2 i% e8 Y }
3 }, T+ k& @& | pInvSort->MoveItem(i,nDestPos);
* _1 n. e2 N4 R! r9 u0 j. I7 I g_DPlay.SendMoveItem(0,nSrc,nDestPos);
) w' n |% o2 u# S' l s- j3 H Sleep(5);
5 C* ]& F' r. C) ]8 G+ s( C //Error("移动 - %d->%d",nSrc,nDestPos);3 e/ Q, V9 ]& g3 }; @ w5 C/ _/ Y% ?8 b
nDestPos++;
; p% N; J3 g2 i# f+ h, } }4 {6 T. q1 d7 k3 e. {& t
//取第一个元素的信息# K. }! b, ?7 j9 c4 }, s* r5 \
/*
5 y% @' @' H- z3 a' A- F if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
: }. {6 B' r& U$ w1 | g {
9 g! L) O7 B; F+ u" A/ |# |% d Error("Move - From:%d,To:%d",vItem[0].nIndex,x);" @: ]) g+ p" i7 w* |9 g4 V
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
; W& }: X+ g- D" ?& M5 o }
1 @/ Z- l3 k x9 ~: \ *// J6 f+ H/ w0 O# v6 {& Z
//////////////////////////////////////////////////////////////////////////0 W. z7 }8 o; V# m; j& H$ }
break;2 j' O d& J C: y
}
0 Q c3 p' i" u; f1 O }
1 X% \0 \- E% x}( D3 U0 f* h" S% ]& F% o
m_wndMenu.SetVisible(FALSE);
q# e4 v) e) k% A T5 q
$ B4 R, P) z) d" s4 k! ~3 L! L0 @--------------------------------------------------------------------------------------------------------
. Y0 ]$ v, P: K/ j. u搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
z- F: b, X* e3 t$ l8 X% W) N* k{7 W8 r5 D& e: P8 ^, z) Q# O
BaseMouseCursor();
- S3 m9 _& \ l1 e0 C6 z1 e d}
8 M# F/ S# o# m% a在其下添加:
; g; {/ X# r G0 R% w( b% D0 ]8 h, ovoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
( f% s7 \. c5 M6 D* W{
: ~! f) C- E6 ?2 l, t4 C7 cm_wndMenu.DeleteAllMenu();/ l! D: \* @5 h; Q
m_wndMenu.CreateMenu(this);
7 k( a2 `7 h9 F# N' x7 am_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");$ C! C' b$ D/ S$ ]9 D4 f
" c% T; x I( g: m' M
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
# s% u$ W2 R2 v& L$ z% ? R{
\. o( g$ z* M5 F- I; }! v //P以上级别才可以删除所有道具
" _0 [% T+ d& ?* u9 A$ s9 _ m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");3 G( S( q4 A% X% T0 u7 G0 G8 N3 }
}) ~% U# i( r3 A
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );7 Q Y) k8 G" B+ ? {
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );, ?% _* O! y h
m_wndMenu.SetFocus();1 d" a* T# _; m8 I6 D# V
}+ l' k: r- T( C! Q& V, U+ d
------------------------------------------------------------------------------------------------------------
! ?" q6 b, p7 I( b4 t- L*************************
5 K5 x3 @* Q" {3 A$ gWndField.h文件% @- X5 e& O0 V F' `
*************************' p" q! r+ V- ?4 D \
搜索:BOOL m_bReport;
, Y- U. q) r2 G; i4 R其后添加:
* [- N2 Z8 ~6 PCWndMenu m_wndMenu;
6 j7 r! W" b8 l搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
. U5 t/ E$ y* D! M其后添加:
& V- P A q2 M2 A" u, \virtual void OnRButtonUp(UINT nFlags, CPoint point);
$ W! y& e0 K/ ~+ }6 K! ~7 c9 [' Z, {/ R
* _$ l3 w& y! r' K- R- {( o |
|