|
|
源文件中_Interface文件夹下WndField.cpp文件
7 f ^4 B5 D: D+ c L/ Q% S; y搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )9 ]5 _% v( y& E7 m* b
6 |) g% [5 n- d( \struct sItem
, N9 f! d2 W, d- b! w3 l+ L6 X* g{3 Z: _' s' y' w* |1 d) L2 w4 J- H
DWORD dwId;4 o9 }( ^# R9 ~2 s4 S
DWORD dwKind2;8 z- N2 Q j8 g! A( Y$ @7 W
DWORD dwItemId;& s& f' T% a, n3 u
BYTE nIndex;
6 l0 v, v/ _7 zsItem(){' T0 s1 i/ v( @ D. n E
dwId = dwKind2 = dwItemId = nIndex = 0;; s# Z7 A; ~: _% s' b) {
}* n- {0 Q2 T) J! q
bool operator < (const sItem p2)
4 b8 ]2 u! B& k2 e( D3 h; S{" s- l9 k: S+ e" `: Y. e
if (dwKind2 == p2.dwKind2): L8 C+ F9 `3 u1 Q
{
9 g$ Y# N, H" b* z return dwItemId < p2.dwItemId;
8 k& Y1 x6 H6 [6 ~5 X }else{, D3 ~- v+ Y8 d$ }- K5 s, \
return dwKind2 < p2.dwKind2;
s/ Z6 O' V% m7 r; }1 D! O }
3 M6 Z" \. }. q! P0 O}
' _; _" c% y9 r1 X! t% H7 S4 _( A};
* J& b, l( J& H8 b: r. t4 |class CInventorySort3 [4 O' }" b4 L
{
5 _" t" f( a0 }) c& Q+ Ipublic:/ E8 S! X( h9 C1 \& p& S) V
CInventorySort()
8 p8 t; ~+ K* e+ h# c. S{
+ c. m* k0 N" n: q# i m_dwPos = 0;# N; W, ^( V }
}8 @! \( a) s* H Y& p/ _: d' ?+ ~- X
~CInventorySort(){}
4 Z A7 g- |! J) f% Zprivate:
3 U; Y8 B! v+ r9 B. a" MsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息3 \4 d1 ?. n3 g0 m
DWORD m_dwPos;
/ ?+ q r& T; T; @2 D' dpublic:8 _% x9 b+ E' u- S
void Add(BYTE nIndex)4 n K* C1 y, ^7 W( \
{
7 W' N: L @0 y ]0 S if (m_dwPos >= MAX_INVENTORY)+ Q7 j0 H( ^5 e w w1 r( c
{
6 \; A }: e! b( ]- D0 G$ d1 u/ s return;
4 U8 t; W1 ]9 e) Y3 k }
$ [, b4 z6 E" K1 S/ G' ^ m_Item[m_dwPos].nIndex = nIndex;
( d3 u p+ w0 f. i+ B m_Item[m_dwPos].dwId = m_dwPos;/ x7 u/ p- T& o5 z# q. G
m_dwPos++;6 b, r% E# ~/ t7 x; X
}/ R8 j0 A3 u4 z: T
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
/ G3 x& o" j! a# {; M+ n1 F{
" M+ @" M7 E. w' R; o for (int i=0;i<MAX_INVENTORY;i++)' y) V E$ V( a3 Q( b% _3 r% G
{
5 c/ t; n. k0 u* h9 \% p6 ~ if (m_Item.dwId == dwId)
+ ?; G1 J" r3 Z" D7 [+ p {( `- a) \( r8 }3 T. c1 k
return m_Item.nIndex;4 c. e$ r# W) U! a7 c$ P% }% U
}2 U/ t9 S! H* m7 q/ p
}2 t+ W5 z" d4 ?- k- b+ K! x
return 255;
9 l' X9 Q# J& i: R+ I+ k/ t}
. E, \) W' M2 S' Fvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
|4 l, v! d( @7 F6 v{
; {& C8 i: Z& j' u; j BYTE nTmp = 0;
2 w; X3 N# c& G6 H" P# a |' l bool bDest = false,bSrc = false;" U; C R' d, C d1 t$ X4 p
for (int i=0;i<MAX_INVENTORY;i++)& n9 |: u5 u& F9 }, h9 |$ ]( W
{; n$ W# [7 k/ [: v) Z" d
if (dwSrcId == m_Item.dwId)2 b5 }" l+ h# y* y* W- |5 u" L" P
{3 i- u- C1 ]: H# s! I0 C& p
//id相等 则 改变对应的dest和src
1 K1 ~( \( t9 D- _( F# y nTmp = m_Item.nIndex;' I+ q0 {7 o9 J5 W1 F# r
m_Item.nIndex = dest;
+ k" [% d' h% d. [% N! Y6 ~8 Z }+ m7 Q( Q" Y8 m+ V; @. ~2 {& c
}' G& n' v2 j. U, d) ?9 ], v
//临时数据保存完毕,交换开始9 \- i7 v, `* W! X7 h6 u
for (int i=0;i<MAX_INVENTORY;i++)
2 w, r1 I- a( x% n {
) l$ A* m* \& K1 z0 y if (dest == m_Item.nIndex)5 E5 V- S; r% A' m+ \
{9 C7 f' T3 A% S# N) p' b2 d
//id相等 则 改变对应的dest和src
+ X/ D# k5 t! u0 X7 u1 b* N m_Item.nIndex = nTmp;) B# z# Y% ~) ]/ @6 j$ W0 T
}
+ Y* b8 @6 V7 h2 W6 o" T }
( C4 W" _8 p6 O/ T}
: ~$ U9 A4 o2 O# }$ ^};5 I, O1 `4 N- S+ `3 j- Q
-------------------------------------------------------------------------2 Q2 |" I0 z9 q& V' C. b
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )$ B8 J# U4 L5 {+ Y
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);/ p4 G5 ]4 c7 m |
紧靠其上添加:
( `+ ~% [6 V" r; G. U6 Pif( pWndBase == &m_wndMenu )
0 T+ ?7 d" l% ^" x" f2 u+ q{/ Q7 Q6 y: L3 h
switch( nID )
G! p- z& M, O% e {
; |' i) |. q* h+ l$ u5 P. y% P case 2:# N0 b* P- n; k" R0 O/ @, Q
{
8 u" D3 G% c5 C //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);: C- _% @4 z s+ a- Z& t- a& [
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))0 @5 {3 K, L$ M7 C5 M& V
{; l4 x g5 S% b5 Y a. T( }
break;
/ S1 Z& C/ V' J0 O8 d x9 [ }
9 P4 K9 v4 y; w( H for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)0 S% g8 p2 o9 g1 t, B
{
$ ?; }% a7 }) K% Q CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);5 g. V9 W6 D$ r# ~
if( !pItemElem )
2 V* U ?9 m" s" Q2 e continue;8 O2 @ Y1 `! c
if(pItemElem->GetExtra() > 0)# P" J+ e0 Y7 P& y! P
continue;
! P, ~1 w+ u } if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 1 `9 w) e. A1 p2 h
continue;9 s# T+ V! b0 V6 @+ V7 m3 e
if( g_pPlayer->IsUsing( pItemElem ) )
* f) f. p; ?" |' k* o continue;
0 Q& v( J8 |2 ]9 G. ]2 k if( pItemElem->IsUndestructable() == TRUE )& S7 d9 s: \. p; f/ l, T% K. U/ W
{
8 `& a1 Y' O* x/ T g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );( `: ]1 D4 T) p: G: o, o
continue;
* H4 G r( C- G, E1 A/ n }
( G |6 W9 c/ U8 `$ D( C g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);$ g. W. x# F9 m2 o" g7 k- g
}/ |- T% \- ~: e/ T
break;
# H8 @# S8 T. Z) C8 B }
+ R! e1 o2 P& [, S- o0 X case 1:
+ p1 z- z5 y4 {1 y4 t {
* @9 ?- t/ _+ p //整理背包3 s' ?8 _; ~4 u! e( D$ O. f9 h# G
//////////////////////////////////////////////////////////////////////////
/ i$ X( }$ b: l) ?) E, o //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
/ i+ C3 k: Q4 f7 |8 P //////////////////////////////////////////////////////////////////////////* e$ Q6 S; @# V0 k, V( o, [! F3 d
//////////////////////////////////////////////////////////////////////////
1 N) |, ?6 c' j, Y6 O CInventorySort* pInvSort = new CInventorySort;
4 x3 C( J# m% M7 q0 B vector <sItem> vItem;
( Z7 F5 g4 X0 r8 y' P* t vItem.resize(MAX_INVENTORY);//初始化大小
4 i% }2 n; e* _' p" r //////////////////////////////////////////////////////////////////////////
! e1 S: D' m8 {. s/ p" ? //填充数据
# X$ ^% s& m& N8 D3 t1 V; k$ E4 s | for (int i=0;i<MAX_INVENTORY;i++)
% G3 _8 l3 d0 p/ S {
1 D( ^) e# c4 r& f2 b8 ^. t CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);0 h7 |+ C q- u6 H: l$ J" t! k5 J* X
if (!pItemElem) Q- [4 b1 X1 [7 \- F4 P+ v
{
0 Z, _) R" `' M" z) u vItem.dwKind2 = 0xffffffff;0 @4 t& j0 r8 H* I4 ~
vItem.dwItemId = 0xffffffff;1 g1 s ]- x: _2 B8 P. A! k
vItem.nIndex = i;# G$ |# ~$ H; G
}else {
) d3 Z/ x* `1 V7 Y5 D ItemProp* pProp = pItemElem->GetProp();
5 M: X! @7 P, ^ vItem.dwKind2 = pProp->dwItemKind2;& P+ J% T* ~2 z6 O
vItem.dwItemId = pItemElem->m_dwItemId;/ f: H- q/ b0 B" B. \1 p- x
vItem.nIndex = i;8 |* m! d( M4 e: d
}
. p' W7 F, T" q8 l //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);" l3 c+ e+ l! F" L u3 K
}3 [5 v4 v* _8 ]3 P
//////////////////////////////////////////////////////////////////////////
( [7 ~ i* t8 r+ u sort(vItem.begin(),vItem.end());//排序* w! L# A( M- I( H0 ^9 \6 n1 Y
//////////////////////////////////////////////////////////////////////////
& u. J z( U# f: t a //交换
0 I9 Y" C7 `8 _7 K for (size_t i=0;i<vItem.size();i++)
2 X7 K7 q5 A r. o3 o) G5 \ {$ r- k( a8 P6 i
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);! P( }" `0 I0 K
pInvSort->Add(vItem.nIndex);
8 v. }1 O5 v" B! h3 d }* u9 }$ @: g* u
BYTE nDestPos = 0;: Z4 w0 d7 M# o* J4 \& F
for (int i=0;i<MAX_INVENTORY;i++)" Q. h; Y& ]' s4 V; t _3 }: Z
{( o f6 H( L7 ~8 K, L% s
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);' a4 P2 e* q& p5 _
if (pItemElem)! H0 ], d" y" m
{& l& M8 R3 J, | u) ]9 W
if (IsUsingItem(pItemElem))
/ D4 A, p# Z( V- @ {6 p+ f/ Z# A+ [
//这个位置无法放
1 d+ O, F% S. @1 ` nDestPos++;0 V/ h* R# O7 [) M
}9 H+ s8 Q2 c% {$ z) [
}
( U6 t: L$ |0 v+ Z3 y BYTE nSrc = pInvSort->GetItemSrc(i);
. f# t( S+ Z& a5 L pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);4 s& `( F/ T2 ]7 c& i4 a( r
if (pItemElem)! U% T; V0 [! `% h: o0 {9 d( S
{1 V- s/ q, v7 x
if (IsUsingItem(pItemElem))
/ O( q6 C' p% N9 O2 I b* S {6 J& @& N' W) J$ n8 P4 a5 }
//这个道具无法移动,跳过
6 o9 z6 @& q! S) B4 N4 H continue;+ y( u5 V1 h `9 U
}
3 _" E- T/ Q% e" [ Y+ W }else{) |1 S K# X. ~3 [9 N5 {6 p
//空位置 不用动
$ C- Z& z; h9 X, r continue;$ V, j5 g" o( c0 D& g M
}
8 ]* J$ |; g$ R- N# c# y //////////////////////////////////////////////////////////////////////////4 Y5 o6 _) j# T, G, @) @( K/ e
//开始移动( A# Z* C+ K# G+ l9 v: O
if (nSrc == nDestPos)
4 n" }, q/ _4 @3 ~* [1 _ {$ t1 A1 H' n2 D/ ]. o% U: K
//原地不动
, K+ ^+ e) g: }. e+ Q nDestPos++;8 ^1 ^. t' Z% c
continue;! |' d8 @5 o+ ~' X- w; x
}
) R6 e# ?9 _, e' ^& D$ J pInvSort->MoveItem(i,nDestPos);
3 Y& ]' U/ o6 f$ I8 g g_DPlay.SendMoveItem(0,nSrc,nDestPos);
" r1 s. O# @0 g/ o4 G+ J Sleep(5);% ~* v" `1 f7 K% Q1 N7 z8 ]
//Error("移动 - %d->%d",nSrc,nDestPos);
# o$ o$ ]/ Q0 w nDestPos++;
& ~# @6 t( r4 x- l/ ~" z' v }
6 V% V9 L' `4 r; o( C6 J! e //取第一个元素的信息
3 U, u- x0 r0 M4 W H /*
& P7 c! W% {8 b2 ` if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
/ q; {& e0 t& q; i! ?3 E4 ~8 f. j8 {8 ~ {
6 D+ e: s' Z$ c) t5 | Error("Move - From:%d,To:%d",vItem[0].nIndex,x);) i( z4 t1 K6 J
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
& P( S% O# I9 F7 _: C! F }$ C) {+ ]& ]7 b7 \
*/
/ z& W+ H4 |% Z //////////////////////////////////////////////////////////////////////////
* m3 `* z" L4 r! a% M: @. @) K break;8 l* b2 i) c# ]# f( h$ H
}
! e# ?9 C9 J' X4 R5 B, @' J/ x }
" t5 f4 ^) m; R}
' }, s. Y, a, u, ~5 \m_wndMenu.SetVisible(FALSE);
) e1 l1 d" t+ G* K3 I" j
* z/ n. ]5 W+ q* o0 B--------------------------------------------------------------------------------------------------------- x- Z# w$ n, U
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
2 L) K+ E8 ? g5 @1 N- h( }/ K{: E1 s# l9 u# z/ h1 A) [: D) J
BaseMouseCursor(); M/ J% I. P3 o: G0 n
}* g8 w3 ~$ n, |" p- Z3 `
在其下添加:1 D _0 A# {; A& t: Z4 ]9 s3 ?8 D
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point), [. m4 z$ ?. ~
{6 ?* n/ ]% m) F* s- s
m_wndMenu.DeleteAllMenu();3 D& C2 ]) ^9 b+ P, z
m_wndMenu.CreateMenu(this);
6 S$ Z0 a( _+ @3 Z) M Tm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");5 u8 r* d: g$ S" F
. C- r) m) |7 V2 h! |+ r3 eif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
9 Y( s4 F/ N9 M* A{
4 }- t! D& N2 D( H# P2 n$ M' I% G //P以上级别才可以删除所有道具
9 a. K2 T7 k- D7 M m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
: D- H6 x/ w, t0 `}1 P8 O) N* ~! S! C4 {1 l
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
' N" |# H1 V- W6 r6 Y; S* Dm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
O2 G2 C) c/ ^' u7 om_wndMenu.SetFocus();
) a( `5 j* y0 j) n}1 I; Y- y4 x# g3 [& e" m+ r
------------------------------------------------------------------------------------------------------------
9 s: D2 s) C l* U0 H B*************************
' c6 S; O$ ~( _" E! `WndField.h文件
2 ?6 _0 g$ l0 k, T9 `0 O*************************6 x. u3 k6 E1 E& R5 N5 B: U& f
搜索:BOOL m_bReport;' F% M/ {- w% G! d( c" w4 F" a4 I
其后添加:
3 P- Y6 b$ K* g4 J: [CWndMenu m_wndMenu;
( `5 w8 b& y% C$ o. J搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
) B4 F# L: k2 [! x# U% A其后添加:
! ~8 v0 T/ H3 b6 g% X) ^6 e/ evirtual void OnRButtonUp(UINT nFlags, CPoint point);1 v/ S; @# b+ g1 O' n* h
# R5 H( z4 L! w' c$ h+ n/ O
' J+ z3 {6 f( F: v* O4 B0 t9 K |
|