|
|
源文件中_Interface文件夹下WndField.cpp文件/ A# p5 g+ X: T* b6 o G
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )% \0 ]2 D0 I: V: h' T) Q
# W: ?( O( U3 Z. w. ustruct sItem; H. @+ w2 Y* c% L
{
* [+ k- R2 b* M% j% x7 L0 |DWORD dwId;
; f2 x$ h4 S" K- {$ i2 @4 rDWORD dwKind2;
7 h: X4 I5 u7 s& O7 t' `% T8 CDWORD dwItemId;& O& L9 E5 N' Q
BYTE nIndex;
& Q- L" c+ W" ^4 a% OsItem(){
. Z& t( v& S; M% t- i- U2 M dwId = dwKind2 = dwItemId = nIndex = 0;
4 @1 ?6 W0 U( l1 [& Y}6 F$ k; b. F% n4 v* h7 x7 f
bool operator < (const sItem p2)
5 h/ C1 q! A# P& a; k7 E# `- o4 r H# d{9 {# L( M2 z" B k2 T/ Y
if (dwKind2 == p2.dwKind2)' A' k3 q0 e# V$ `# G9 A, t
{0 y! Z) \" @2 f7 E1 k
return dwItemId < p2.dwItemId;
R8 P6 J! L+ | ~2 b }else{' t% J% d6 B s* d5 S% R" g
return dwKind2 < p2.dwKind2;
3 p! A7 j5 f/ V1 V }
$ Q1 J; X( `# a" t5 w2 v* T+ X}+ o* i. B4 C- q3 `( u. J+ c
};
7 ?/ m7 {7 T, Zclass CInventorySort
" t, i/ D: I @% P5 |- j# x{
8 y8 A/ ~& h" j) Xpublic:
& |& E, h* {+ n8 q) }6 Y" YCInventorySort(). _4 D g2 x. c5 _, }5 Z
{5 i& G, Q# k8 g/ Y- A0 [! H0 h
m_dwPos = 0;
* A9 C7 _' h5 T8 `6 g( H}( I1 a8 ]9 R f L' t9 w, _
~CInventorySort(){}
& W, a2 r1 ~ K/ z0 R2 U$ sprivate:1 k$ a/ U i7 z2 m) ?
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
, R: h2 R# ?" W8 |4 |DWORD m_dwPos;5 `* v0 T4 i9 m
public:& F7 H) x) z0 P
void Add(BYTE nIndex)# Z2 j1 R0 e+ s |3 N
{
4 ?2 ]: b7 \& \ |# u if (m_dwPos >= MAX_INVENTORY)3 \9 N# v& ?- i! D6 j
{
4 p& ~* q8 L- }: r( ?4 j9 l return;) G( i2 A. \/ G. d" L
}: j) |+ E0 t \" `" K* l
m_Item[m_dwPos].nIndex = nIndex;+ M. { R" ~* k* L# p. i$ N
m_Item[m_dwPos].dwId = m_dwPos;" x0 }# F a2 v* E" ^5 D$ K) E: h1 h5 l
m_dwPos++;
# Y( s8 \6 X7 ^# `3 J* |7 l}' n. v# J$ a# L( [ Q" a P
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列- a4 f$ y, K3 ?8 q# J! p7 h; J
{1 _$ ~" h' u$ n8 G a
for (int i=0;i<MAX_INVENTORY;i++)) ]1 v' k T* ?( J0 F1 K
{
: z& Q4 p9 h* e* W if (m_Item.dwId == dwId)
* z7 E, n) J" Y% t6 n4 W& g {3 p( H; W# k; s9 A W" \& _" j4 E8 r- p% m
return m_Item.nIndex;
6 k! t) H0 f. P }
8 Q9 |( Z f1 r+ x/ f }4 D4 J- G7 x* K& I: b( t7 e4 E( _# f
return 255;$ v: L2 m7 T, t- f: x( ]
}- X( h6 B9 n; ~" K9 P; J
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
' w. V" L9 R' v{
' U0 }. y% _4 D. C) D; u BYTE nTmp = 0;
3 b0 p7 _. E+ y: l bool bDest = false,bSrc = false;; z# k' h# t3 Q
for (int i=0;i<MAX_INVENTORY;i++)/ Q/ ~: n: H# k2 h: E, Z
{# e# m" h3 Z [( t, v0 r( l/ P
if (dwSrcId == m_Item.dwId)$ ^* ` w. V, z" M2 F0 C$ t
{* L) A* d) i; i% \9 _
//id相等 则 改变对应的dest和src, [. R; H5 W/ P9 D
nTmp = m_Item.nIndex;
: \: M+ X' Z( n. F5 F m_Item.nIndex = dest;0 W8 e3 A( W' r3 ?4 ^+ M
}. A4 W0 E! |, {% U/ @
}$ o1 D5 d. a5 D' o9 L
//临时数据保存完毕,交换开始
# O2 m4 B) M( k for (int i=0;i<MAX_INVENTORY;i++)
* y6 \5 }! `3 [* |+ N$ O {6 R9 ~$ r9 o* ]+ F: \8 x
if (dest == m_Item.nIndex)% N# z1 @1 o3 |7 |8 G7 a
{9 L+ s2 M* U9 `" R! L+ t3 E
//id相等 则 改变对应的dest和src; ^9 E8 a; l2 M9 W
m_Item.nIndex = nTmp;
5 H1 I5 Q* }" M$ h5 a4 T' {6 | }3 G1 `( s- s8 q U
}
) a6 ]+ ^$ E( L+ _3 e}
& X* @/ `3 Q$ ~. j};
' `8 d, C1 k0 q% K- g4 L/ ~6 h0 H-------------------------------------------------------------------------
+ G2 O: d3 D( g依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )4 N" I2 F8 p8 v# T
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
$ S2 X" H- A/ r; m& A紧靠其上添加:
8 W, P+ v1 @# ?; }' h$ jif( pWndBase == &m_wndMenu )* l9 O( d" d( [* R8 j
{' V2 `% d/ @7 R' T& [3 F" R1 r- \9 y
switch( nID )
% \, ^ m2 Y3 b+ \) P* [& c/ K9 U# n {2 D! y M% p6 \" K
case 2:
& a3 z, f" s6 D( ?4 z/ ^) H {% w' F: F% G# O
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);! ~0 {6 B3 r+ g, H+ K
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))& I" t [( p$ I% ]; L. D/ d4 k
{) S' t; l4 v/ c( t% d4 o
break;
/ r" d/ f N' J$ I4 E; o" l }
4 e! ]: C# t- p7 f for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)' e4 [" Q7 @/ W! k
{6 c' |8 q9 N4 j# j9 H) D" x
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
- S5 Z- T1 k: W# t1 s if( !pItemElem )0 s' C( H# h( ^ o; Y7 d
continue;, Q6 c( T/ X0 v% m6 W3 m
if(pItemElem->GetExtra() > 0)% T. ~2 U& G- V" g: e
continue;3 T _+ l: |, X, O1 }
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 8 O/ w2 R; b" D& [9 g8 X3 _
continue;: t; W9 g0 Y3 C/ Q3 h4 Q
if( g_pPlayer->IsUsing( pItemElem ) )& A9 u2 F& r8 U& P
continue;
" j/ E7 D% Y% S: f$ }9 ]+ r: u if( pItemElem->IsUndestructable() == TRUE )4 u6 H) T& f: L- M/ l7 ^# \5 h* c
{( _! c" X, Z3 M" _5 E. n- J7 q
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );. r: }8 S/ u! N- m3 @
continue;
/ q5 q4 w; ^$ N( c }8 c* n7 |; E' r7 P
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);, B* c& ]* o. l Q" {8 Y
}, D4 E- E [& Y% Z! ?) @2 {
break;
1 x% `, B( C8 h$ _/ f }
+ i) O4 ~1 K/ Q0 ` case 1:: K+ Y" ~& k( F* V d- F! r v
{9 w$ G8 J6 a9 Z# Q
//整理背包/ U$ Q! e# B" e8 E0 G6 G0 x7 [
//////////////////////////////////////////////////////////////////////////
6 D$ J" b# ]% s, {( z //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );6 Y3 ^4 ]! ?6 y8 j
//////////////////////////////////////////////////////////////////////////
1 T7 j1 I4 P- A6 w0 j! p //////////////////////////////////////////////////////////////////////////" r$ w0 g5 @# T* O! Q
CInventorySort* pInvSort = new CInventorySort;. z: J" z) `$ Y0 u; F5 D! Q {
vector <sItem> vItem;% S$ ~# e5 ` }
vItem.resize(MAX_INVENTORY);//初始化大小
1 u/ d# B g2 [0 u; a' o //////////////////////////////////////////////////////////////////////////: m/ d5 H3 s3 e0 I/ P7 H7 F6 p: _$ k" J
//填充数据. e* \* X! p5 C# J
for (int i=0;i<MAX_INVENTORY;i++)
. [# H2 R* W+ K& R- b, ^ {
v% f' h3 ?7 A# e/ w( x CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);9 r' R6 f |6 H g
if (!pItemElem)/ X, _" Y! Y" Q$ q1 M
{
- W5 x; n- y2 x( j" h' V( _' E8 l vItem.dwKind2 = 0xffffffff;
2 {+ V+ H% l, \1 D3 l: X vItem.dwItemId = 0xffffffff;
) V; \1 U6 G% K6 p% L+ z vItem.nIndex = i;. v; L! m3 }; j4 W
}else {
6 x% A& V8 z, C# d2 Q/ M% [( ? ItemProp* pProp = pItemElem->GetProp();
7 \. k, l1 y: K vItem.dwKind2 = pProp->dwItemKind2;
1 ~! W" T) X' Q/ J# e* }! B vItem.dwItemId = pItemElem->m_dwItemId; V& S; ^. `: X# E
vItem.nIndex = i;4 J7 O" _$ D5 _9 N6 P
}: h8 p9 U; l6 F3 d) H
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);0 E6 b+ g r+ W7 Q" g
}, C5 w' ]% [( ]
//////////////////////////////////////////////////////////////////////////
( ~9 V t. {: U& p sort(vItem.begin(),vItem.end());//排序
9 p ]" S2 _' O //////////////////////////////////////////////////////////////////////////5 _( _+ N) k' b, W' X7 i/ M3 N
//交换) }" y! s# H5 q
for (size_t i=0;i<vItem.size();i++)
/ H, I6 D5 t$ v2 ` {, N: o8 q: J9 s6 U$ m4 P
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);5 t! G8 `; ?4 [4 L
pInvSort->Add(vItem.nIndex);
# B$ Q& M, _% |3 z+ b( i1 ?& R7 F7 i9 V }: z) X: n; x& b# C' Q
BYTE nDestPos = 0;
. Z$ ]) h: y5 M! f for (int i=0;i<MAX_INVENTORY;i++)
9 n% F3 T4 B+ }( i, C; v {# U2 h+ R* l. U
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
0 u7 Q* b% r# c5 R6 f9 S. Q if (pItemElem)
, B9 y% }/ k. [; d {
( z1 m+ H7 J0 z: r) v( z if (IsUsingItem(pItemElem))
2 |$ p: D! j# t9 e( y {
: y( X- ]. S6 V! G, M1 `+ p //这个位置无法放
6 ? N: q& v$ ` nDestPos++;' t8 Y. }0 i, d; P1 v
}; Q& N, ?# m6 {, p) o( @
}8 g4 \/ s, c7 O$ ~- k) U0 o6 {+ X
BYTE nSrc = pInvSort->GetItemSrc(i);
% m% k5 K8 Y* F! u* w! x4 i pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
6 x& n4 p$ C- e# [+ m if (pItemElem)6 l! I0 I$ w8 m8 S5 b# o
{" p2 P! V# N' F5 Q+ N- O
if (IsUsingItem(pItemElem))
1 J7 |$ ?0 K' K' \8 g {
( ^2 Y! |: p* T% W' H4 i/ t //这个道具无法移动,跳过& z+ q( a+ u, a& y! g5 ^' J) j
continue;0 [3 G; R7 q a! f5 H$ _! ~7 \9 B$ h
}
$ ?( Z. C8 n4 {4 V }else{
1 D$ ?! J4 B6 k& G0 ^, I& T //空位置 不用动
; `, S4 ?5 d/ N$ ^ continue;
+ ?" [2 [$ u+ H }- S* q( t* j+ T! F
//////////////////////////////////////////////////////////////////////////
/ l9 }8 h7 u6 g, F L8 U$ H //开始移动2 R% C" n: _4 N$ @; Y
if (nSrc == nDestPos)( o4 F7 ?% q5 }: ^/ ?7 V5 m
{
: I- T8 \" b ]4 m //原地不动: K! d1 t! x6 Q. E: U( [# }* B5 ~$ n
nDestPos++;& O( L6 s# m9 q# V8 N+ @
continue;
. Y ~6 L4 ?( y3 p! y% U1 L# e/ J }
1 W; w# A- B; k pInvSort->MoveItem(i,nDestPos);& _' i) X& O) G) @- u8 d& D
g_DPlay.SendMoveItem(0,nSrc,nDestPos);6 x E! q, T& [) @" k' x
Sleep(5);; h. g/ c f G9 ^ d+ t
//Error("移动 - %d->%d",nSrc,nDestPos);3 F" a5 |& T* ^6 s0 c, _
nDestPos++;
2 |2 H5 B2 V# N; ~. E! M0 x4 K }
L9 E$ k3 ~# F- V7 _ //取第一个元素的信息
( @% W- y! @+ ^0 q /*' M. A) D% a) o5 p2 ?; _
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)0 t8 U! n9 a* |8 c: d' n; Q
{' F) f8 I; ^' S( y0 O( w
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);6 d" ]4 A/ z0 ]6 o+ a
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x); \1 ~- u( t7 G0 v
}
, N/ C* T3 k" Z) w */
: N0 t6 M: m4 _+ z& O4 n //////////////////////////////////////////////////////////////////////////
' F" R" A! i5 @$ F$ I d, U. j break;7 u# f2 b& \9 { b5 @( ]
}
# U5 U3 d0 ~. C9 \# L+ E% V2 P w, {8 ]9 T } 8 T: ^" [0 r) T- f- l9 Y
}- ~0 {& m# ^- F* \+ W3 G
m_wndMenu.SetVisible(FALSE);7 u3 \3 O" J* a) E. d |0 {- y
4 R4 Z' f; y2 X5 I& P- D
--------------------------------------------------------------------------------------------------------
. o6 R. K. R5 B0 T# I搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point), ~8 q2 a& B* I7 {! {
{* t) \8 ?" g8 k+ J# m
BaseMouseCursor();
8 E1 A* O' F# t) L}
! j2 O! V5 H3 E在其下添加:
7 L: `" N7 @+ E$ _2 q" ?void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)2 ]5 }4 v0 S7 Z) [. _
{
# c& E6 u1 _. B5 K3 Om_wndMenu.DeleteAllMenu();
. P! @ Z7 R k& e/ E/ Dm_wndMenu.CreateMenu(this);
L& J) a, s- a; Nm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
" `" k' g: j) S. t0 Z
, n0 j- G0 s! T. l3 O- [) _4 wif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
1 R" C0 K! c4 T{
) f* }7 D! u- P* E2 [- H //P以上级别才可以删除所有道具
6 `; I& Y1 j% O1 \- |- u; F m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");" C/ H& }2 R; F* Q& H3 n
}
( g# r, g. y4 M$ [/ R9 M7 f* wm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );5 ~8 L# N1 U8 Z( V; d6 B
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );7 v; ^" l/ T" D# ~7 L0 }% C* {
m_wndMenu.SetFocus();7 [4 I: c9 B0 d) d7 n3 t( j' C3 l
}
1 W N+ F7 h: j------------------------------------------------------------------------------------------------------------) t' o+ G) b' S+ s/ @
*************************
# Z/ L1 |% Z$ F" g3 X8 h9 j4 vWndField.h文件
" V" R" x$ F8 a, r/ b3 V3 u% o0 x*************************' X' m+ a# X3 h) ^! V- R
搜索:BOOL m_bReport;8 x- D6 x6 N7 i) P/ ~
其后添加:8 u4 v2 B0 O; d1 |4 x/ i7 V, y( X
CWndMenu m_wndMenu;1 m1 q6 D- {6 y$ |# a L7 l. p, c
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
# R7 a( H4 B: z3 R9 g; M' C其后添加:
+ H. ], z+ S& i# H3 k/ l* z( Ovirtual void OnRButtonUp(UINT nFlags, CPoint point);
! `$ ]& h9 x) A0 b* X$ q. \3 h; A/ N+ W: d$ N; H9 o
# l; n7 Q' }: f |
|