|
源文件中_Interface文件夹下WndField.cpp文件; @, S/ `0 Q5 g' B+ d' X* M0 Z5 n
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )5 A$ f, n! v' A4 y- m
$ i) X4 Q% M( x) F( Qstruct sItem- X8 A. y# B$ W3 r' q7 w y
{
! |7 m$ d7 X2 V# w4 `5 gDWORD dwId;, u1 e b: e- n4 f0 J
DWORD dwKind2;. C( P! F% @- X8 W
DWORD dwItemId;
8 [# u& c& Z* c: eBYTE nIndex;
$ ~. q& M" b; u7 c4 x, z; FsItem(){* l3 H1 |+ b6 N1 Y# Y0 Z
dwId = dwKind2 = dwItemId = nIndex = 0;
. {8 s% c% y+ z0 L- q}
' H8 H4 G$ p9 P% Gbool operator < (const sItem p2)
% r' X- B" C4 V0 w; q: ]/ R{) h- l$ X+ P& X
if (dwKind2 == p2.dwKind2)- o( F, l. }' P0 `, Q% O! T
{
+ L! N+ |$ q! o4 ] return dwItemId < p2.dwItemId;4 F0 R' n, S, ^+ w& T2 O8 s& v( y
}else{
3 L) R- y! v+ h+ z, x6 B return dwKind2 < p2.dwKind2;
7 ~( a% |; Z- T: p0 e }
; `/ j+ L6 V5 G$ r}
9 g0 s2 E% E& |+ O2 d};
; T" `+ a" H# s0 v6 pclass CInventorySort
7 p7 l! R, _. [- c8 g3 A{1 a+ u: F+ _7 q; ~& @: Z! g
public:2 Z/ }7 o* i& C J7 a
CInventorySort()
+ `+ @" A% s* k0 Z, R{# o: F$ \: P% E$ k; t6 r
m_dwPos = 0;
. W5 U/ _: U) o# F( A" F9 x4 t' x& V1 Z}4 a% _" {* {% r2 Q4 w4 S9 B
~CInventorySort(){}" _8 j1 B8 I6 O. |& j
private:; R5 J' N* k2 D: D
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
+ H; e g( B6 q/ w- j7 UDWORD m_dwPos;
S0 N, a) o" o' l: y& P+ }& e1 Gpublic:8 Z+ t1 z6 l& @1 R* k! f c
void Add(BYTE nIndex)6 L2 j* d# O6 e. {/ ]
{ n4 ]" U5 H6 _
if (m_dwPos >= MAX_INVENTORY)+ E; _) \- q. o# x
{- r6 Z( ?. V0 Q/ g
return;
! y! j9 `6 `' i. ~# n* J }7 P2 s5 V" q( b
m_Item[m_dwPos].nIndex = nIndex;
/ C& [- z) v5 o& r- ^/ H m_Item[m_dwPos].dwId = m_dwPos;
) k4 M+ o- V$ @( e m_dwPos++;
8 c6 F- C U- z3 _5 ]}
4 w6 L& F' x1 x' @7 sBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列- m6 T* R! v1 w1 e7 U$ G
{
6 T& U' l9 e H3 {( m' m7 f+ C for (int i=0;i<MAX_INVENTORY;i++)+ B ~$ h( W, }3 U! c, [ k, ~
{$ ` V$ Y' I0 C# q2 F
if (m_Item.dwId == dwId)% C- t2 C3 I+ S
{* Y+ F0 g) ]& Z5 q# ?6 j
return m_Item.nIndex;
. \- l8 I4 _0 Q3 b: b5 E) n2 f }, r/ i4 y" t. z1 I
}1 S% d- C2 H: Q Y) L" z1 `0 P% V6 X
return 255;% ]# T) ^: l. D, v. N! X/ D
}
6 b; a" G. C+ Q' C# q+ i5 Jvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
3 h6 s) ]5 h+ k& @: V{# f: V h8 ~& }& a
BYTE nTmp = 0;$ t& m' ~; e! ^. u8 a4 }1 D
bool bDest = false,bSrc = false;; B# O3 D% Q4 E6 L' S
for (int i=0;i<MAX_INVENTORY;i++)
# N$ D+ j7 B F2 c- N' p8 u; ? {" v/ O ]( n3 n4 D( g4 Z' ~
if (dwSrcId == m_Item.dwId)
# ?( A0 S0 ~2 G( W2 l {
3 @) C8 v+ I8 i) H. n //id相等 则 改变对应的dest和src& |$ c8 |2 l/ G/ |
nTmp = m_Item.nIndex;
8 w' ^+ l) u O! E7 m m_Item.nIndex = dest;
! g& ^" o8 l3 f0 V }
: u7 ]4 ^4 Q. p4 n }
- W+ S$ h, @ B1 T( k" _6 F* o) R //临时数据保存完毕,交换开始
6 E, V: G! ^; t. j/ f for (int i=0;i<MAX_INVENTORY;i++)
; K0 M6 s: |0 J. H% ^0 z* G# H {
4 h$ u2 O4 v; o2 ^8 W if (dest == m_Item.nIndex)( }- y$ d, J9 M0 G' _
{/ b6 R0 j& l5 X; r' k3 S
//id相等 则 改变对应的dest和src
8 k( `# e- s! @ l2 ]# w* m" N m_Item.nIndex = nTmp;8 s# U" s- v- n. Z" D: r
}$ y: _$ p% _7 C; P
}+ C8 N. F- t2 K$ k2 t" O
}
/ K9 t6 @( K6 h& P/ R- n};
& w% h4 j$ h2 t7 ]-------------------------------------------------------------------------
& I9 v# F8 B! `. r/ _0 Q依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )2 m, D) k+ U8 a P
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);9 R' p7 Y$ |) T6 C* K) l
紧靠其上添加:
' i& d4 E# |& {# d) B4 S! iif( pWndBase == &m_wndMenu )
% U$ J) J, g& ]. B) B( A2 E{: G$ H0 | z" J" y5 a3 g# Z
switch( nID )9 ~6 \8 c* g" D8 v8 Z# T
{
* D, ]! J9 K U; Z" v: w' v case 2:
M; m: y. W$ f {
" T* a5 {* y6 ?; r1 F //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);# \% ]6 t; R8 j9 c0 i* P
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))6 b7 C3 V3 r% E+ B- U
{' z( Q6 Q' x, B# c
break;
" l2 v3 z3 l$ n2 K& K }
1 C; ], g/ J0 I* r& i/ N/ E+ M. t for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)& H4 g. n3 p' h t
{
" t: ?+ `0 ~' m& d/ |7 k" y CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);1 X1 g Q, f! ?3 z w
if( !pItemElem )( D0 @# d- W* B* X% G- N# s; q* I
continue;" r5 X0 E. J! p1 J/ {; @& I! l ^8 C
if(pItemElem->GetExtra() > 0)
" F& b. g- r4 a$ R2 B5 | continue;
! Z+ @0 H4 {% w5 m8 B4 Q* H/ q6 d1 O) x if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
3 v) t, s$ |; T continue;
* P E* S b/ {% V* R4 t if( g_pPlayer->IsUsing( pItemElem ) )+ v+ e/ O! `" ]+ d- T
continue;7 \) t& B1 |4 s2 I& E* U
if( pItemElem->IsUndestructable() == TRUE )
0 m U/ o3 x }5 ^+ s* z {
# o& O+ v1 Q" i& O g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );- M9 i! V; B8 ~ N
continue;2 j- y' j8 d' R" g5 i, I
}
; E& O& a8 N7 ? g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);, e$ E0 s, s6 d7 B# I1 u
}
8 _: W: p& x ]+ b break;* z5 R( D2 u+ w# k6 Z0 l
}
3 \0 l, H: _) O5 s case 1:
2 o. c Y9 G8 u" O R# @* ` {9 t" s2 E5 c7 N' p/ }/ _
//整理背包) Z9 @2 t% d& m4 P! U; U
//////////////////////////////////////////////////////////////////////////, |* f* m0 y; d, A
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );& ~( W; Z u e0 T
//////////////////////////////////////////////////////////////////////////
# h* ?6 [9 T+ X$ l" U; T) Y& J, b J* j* w //////////////////////////////////////////////////////////////////////////
4 {3 b/ R8 t( }8 {% d* K: @6 _# z CInventorySort* pInvSort = new CInventorySort;) [& }% V# i" H+ z) `
vector <sItem> vItem;
. p; l$ t3 l7 {) l X vItem.resize(MAX_INVENTORY);//初始化大小
9 Q2 T# o7 j0 O5 G+ U //////////////////////////////////////////////////////////////////////////
" x3 C7 V! T: g7 G //填充数据
2 f& V6 n& f) k0 w6 ?* |9 C: Q for (int i=0;i<MAX_INVENTORY;i++)
5 F' ^) |; r; ~% x9 T% U {1 H7 o1 v' A( W+ V( ~
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);4 q% J4 S) r {; ]
if (!pItemElem)
9 @8 N) O: r. A: M+ V {
0 }* ~- S' i# t I) ~ vItem.dwKind2 = 0xffffffff;
) u' u7 J( R/ V, ` vItem.dwItemId = 0xffffffff;6 e1 O3 ^6 H+ _3 h
vItem.nIndex = i;
$ d9 ]7 F) U3 J6 d5 m2 B3 i }else {
7 r: o# e) l1 M F8 x ItemProp* pProp = pItemElem->GetProp();6 |+ e. L" o1 R2 \! I' {
vItem.dwKind2 = pProp->dwItemKind2;+ F" x! K: u. g: L3 n: B' t* {/ o
vItem.dwItemId = pItemElem->m_dwItemId;
& s3 h" n; I, C- {* D( O, G: s$ U7 N vItem.nIndex = i;, d$ L% A4 e# }) B6 b
}* j0 u6 M& K; z0 I
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);6 o8 u3 o: }" x% R! v
}& S6 o5 O' \3 ?
//////////////////////////////////////////////////////////////////////////
! r& q6 v& j; m( q; l' K5 Y sort(vItem.begin(),vItem.end());//排序
$ N" s/ w) y, R z //////////////////////////////////////////////////////////////////////////5 y& f: X: F2 { O5 ^" d" \
//交换% F% r0 @1 J3 c* F" n7 S- I
for (size_t i=0;i<vItem.size();i++)
6 a2 w* `: L8 c1 c. T, i {) u: X" ]5 _* f
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);) n; G. J4 k. a: z, o& H; h3 r
pInvSort->Add(vItem.nIndex);
9 C1 Z6 _/ U. G8 e* R }, h0 W1 x# ^( Z0 {
BYTE nDestPos = 0;3 x# C! L5 c# I5 m
for (int i=0;i<MAX_INVENTORY;i++)# H6 w. ?5 w* [+ _" v1 e
{4 S! S+ S* N/ Z
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);, E+ h/ ]& R4 G4 \3 }! p
if (pItemElem)
$ s: e) z% a8 _' {' Y" h {3 v4 L8 g0 A( h7 }
if (IsUsingItem(pItemElem)). Q y0 {8 k; C& O& p* t) E& R
{! q( X( `! r' {
//这个位置无法放
4 _8 Q+ q! O0 t1 F+ w5 h u; q nDestPos++;- c- }2 @7 V2 z
}
3 b: K6 `: @3 w% d) G }
+ @2 e9 a' V* Z1 `$ x BYTE nSrc = pInvSort->GetItemSrc(i);
& C3 h1 J9 v1 u! Z* x! z, m pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);2 F; r4 U1 I2 D" f7 A; B
if (pItemElem)
; j7 C: {7 G$ _/ z {
( N2 D9 t' b5 n; S8 j if (IsUsingItem(pItemElem))
# t" t% \; ]2 ~; o) n! a {
5 r4 O8 X7 R; e! D* } y4 x //这个道具无法移动,跳过
% b V* e! X7 k' `# F3 a2 E continue;5 G7 u. K j( e' M+ Y
}# l5 w$ j' x$ H$ \, Q6 B
}else{5 }# s2 X% l6 r) _
//空位置 不用动: z; O% @' _9 R. W0 G0 t) ~5 a
continue;
. ]) Z/ A2 [- [! K9 N( h e }
4 s' l% y7 g( F% l% g //////////////////////////////////////////////////////////////////////////
9 D, y5 }; i+ ] f% n: _ //开始移动
K$ L" T* c! a. v& z0 u) o if (nSrc == nDestPos)
; T% Q9 S5 q( w {5 @" j8 z. H6 r
//原地不动
' m8 o, D' P2 q5 e nDestPos++;
2 F! Y3 W. l Y6 S+ L continue;
$ }' W& q" r# v7 R# t% m }% J) E0 N- a- M9 G3 f' Y9 i
pInvSort->MoveItem(i,nDestPos);; M. t3 M# x2 X% ?
g_DPlay.SendMoveItem(0,nSrc,nDestPos);9 ]# z# @% M& O: ]0 M& i
Sleep(5);
% }( s( o6 k# N* x //Error("移动 - %d->%d",nSrc,nDestPos);
0 b- \4 P4 R' k; @+ b6 [2 B7 d nDestPos++;+ A$ C( c! {4 [, [4 E
}# ^6 @& E% G: A: r Q
//取第一个元素的信息
# T9 L9 z- Q# O+ B2 P' y- U /*
: A0 p- S* `' | if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
K" X5 v. Q( P8 O S8 R4 N$ G, D {
" J7 P* ~) x. L9 Q$ y5 m+ A* j; u Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
+ N+ i+ D/ H, y6 h, I' O g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
_# ~6 m* c( X1 m9 l# a9 @8 d8 l }
+ a* B" A @6 k5 ^# H% K */
8 W- ~, B5 `+ M0 l //////////////////////////////////////////////////////////////////////////1 [2 v) o0 q' B5 I
break;+ z/ M A7 b; h& {/ h9 ?
}2 t! w$ }/ k6 ]7 k# R
} $ G3 G5 b2 ~5 O9 N: l
}
S, b+ ^! i5 B) im_wndMenu.SetVisible(FALSE);5 R7 r" }* Y$ j; a
# _) ^+ a; r* T7 ]+ p8 B$ {--------------------------------------------------------------------------------------------------------: b4 P; n P! V
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)6 f' b: m' @* [- f4 A3 }/ [8 d
{
5 m& O& ?: b1 F: c' p$ UBaseMouseCursor();
5 v& O) r: k0 ?# E* I! c}
: b$ B" p$ t% ~- R0 J* |在其下添加:
/ ]8 b3 U; i; v0 M. _; evoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)8 @) h c! N5 z N8 R' {
{
- I& h7 p) K8 wm_wndMenu.DeleteAllMenu();0 Z7 c. j0 Y/ N! y& Z
m_wndMenu.CreateMenu(this);
v9 Q2 G* |5 V- W `m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");( w) Q5 E& y2 I4 b; \2 d f& R
, H4 v2 b ]- E7 z, w$ v5 j
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
# ~5 J8 Z; m6 Z! t# ?$ N! f; o{
- j6 _2 z" {4 O4 |* [7 Q% U% g5 U //P以上级别才可以删除所有道具
6 U, g/ l7 L+ z& B1 \3 |) ~8 u m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
4 ^* C+ y, y( J* Z; {}
& m9 a q6 G* b6 jm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
- N( `4 g2 f" ^1 [m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
( P5 L' ?2 `4 Nm_wndMenu.SetFocus();+ ?# y5 F- J1 T9 V! u. O
}. |: F. p# B% V7 }- L! W; j( u
------------------------------------------------------------------------------------------------------------2 d3 Q8 F9 B9 g& q. L
*************************
* F2 ~" S- S% Q3 C% NWndField.h文件
. i) e5 m0 I4 x*************************; J& V2 s, l0 z9 U0 m5 M
搜索:BOOL m_bReport;
/ ^2 R8 }0 A4 X L* @ j! O0 a其后添加:- k0 [3 M) F( { m: i; P* q; ]' O
CWndMenu m_wndMenu;
) }7 F* H5 E5 f, H' C1 p搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);7 {( x4 V8 S9 o9 K! c4 h
其后添加:
* _4 e n- {/ B+ Evirtual void OnRButtonUp(UINT nFlags, CPoint point);5 x# @8 { l" M! w/ Q/ A
5 x0 i$ K) N9 N( Q! N E: X' z6 Q. m$ t: l, Q9 d, @
|
|