|
|
源文件中_Interface文件夹下WndField.cpp文件
" b1 w5 r7 a5 g" ?! P搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )% I+ i% ^8 X$ Q; H6 H+ b
: v8 ?$ a% k& y, X5 ?struct sItem
# n$ S+ X* a2 I( _7 Z9 u4 m{" }/ w+ k/ |: F! u: x2 S
DWORD dwId;
+ Z# [8 d5 H8 v: j% y1 M5 u" rDWORD dwKind2;5 Z! Z( e9 h7 w$ J0 z
DWORD dwItemId;: D; u: h5 C2 p
BYTE nIndex;) {- N- t* H) [. M- \
sItem(){
7 {5 M& p0 f6 k# ]7 q dwId = dwKind2 = dwItemId = nIndex = 0;
9 |. u- o1 B, U4 n! d. V}
, y) u H" i, K. M8 D* i/ \bool operator < (const sItem p2)$ b' H$ i+ u! y( u7 u) {- \ M1 Z: b+ z
{
( {9 y$ }1 E1 n if (dwKind2 == p2.dwKind2)
: x* c0 k: s# Y$ R/ K {
6 ^$ `2 H7 E( z) i2 H return dwItemId < p2.dwItemId;2 `7 u, M; p6 f& ^" I9 {
}else{- q, Y0 T$ F* B/ u7 N
return dwKind2 < p2.dwKind2;
8 L5 B+ M+ }: a }* z* s- }: R t
}- [! d% T; @# v3 M8 ?
};
& R/ T' I5 X( a: K" H y( o6 Iclass CInventorySort
# o) s+ ]6 E$ G% V; Z+ s/ [ I1 x! v{
. u& m! b/ ~# upublic:0 n+ w7 C0 H2 j0 `, {+ c& ~7 ]/ `- ^
CInventorySort()
) u3 h \3 _3 g0 H$ n5 }9 Y% U{
. e6 m) e: w$ B$ v* T( x u m_dwPos = 0;
# V1 _7 y3 b+ u}
8 M5 t' f; @- N~CInventorySort(){}* c+ r7 Z, N4 j( V; W: r
private:, `: [: c6 {4 o1 r/ t2 x
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息8 Q2 P# I; `/ g. a Z7 l& O
DWORD m_dwPos;: z! g6 p" _6 e' h
public:8 n$ }1 L! v" R6 _+ E( v1 \( I4 ^. D* N
void Add(BYTE nIndex)6 M2 ?! V/ [. f0 w
{5 O- {# T2 w: E& n6 Y
if (m_dwPos >= MAX_INVENTORY)7 c8 U" T5 E/ K E% L
{
) [( ^& B4 ]9 M* C# t% p$ y1 B5 v) q return;
" `: h1 A' Z3 z5 B- ? }$ \# F ?# r& r+ A; z( \6 V/ h! l5 e
m_Item[m_dwPos].nIndex = nIndex;+ o- ~7 j6 u- v" v
m_Item[m_dwPos].dwId = m_dwPos;
* i1 E3 X) t. |, m: S m_dwPos++;
. c8 F, D* F. d* W5 c7 G1 Z2 G" ~}2 k5 _( c. F/ D# r' ]
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
+ l0 k% R# r) ~5 q. _* U; s{
r1 L* {( C, @. v$ h+ R0 t for (int i=0;i<MAX_INVENTORY;i++)
2 f8 s7 N2 ^; B1 X% I+ X: N4 b {- O" E8 \5 ~7 _& F/ p0 y
if (m_Item.dwId == dwId)
+ ~! w8 c% c8 N+ g {: v# D: J$ g6 @
return m_Item.nIndex;1 X/ |! s/ G b! u' \; @% u6 B
}4 M: B7 l h; n, }, h8 \! Q
}
1 r1 B2 b; s7 Q9 k& Z( L return 255;, h4 j( o9 \; v" c+ f# K
}
+ _. d4 E1 m) R5 ?) ~void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
) q' D7 |7 A8 z0 C! c ?{
8 H6 k, [: B9 @/ d! w# [) m' } BYTE nTmp = 0;2 O* |* M/ `5 U$ L6 u$ s) y) B
bool bDest = false,bSrc = false;
; |+ c& W% N1 Q) ] for (int i=0;i<MAX_INVENTORY;i++)* h$ r8 l+ Y+ E, i: X! B; o
{4 d# ~3 k7 J( O+ |2 M$ M9 {
if (dwSrcId == m_Item.dwId)
+ |8 [4 E0 U+ y3 v {
& w7 E& {# v; T0 ^. T //id相等 则 改变对应的dest和src6 ?4 d5 r# d" V; ]( y
nTmp = m_Item.nIndex;" U7 s7 L# x6 H2 r
m_Item.nIndex = dest;
) b$ U6 S9 {& k' x, ~ }
# Q; H, L9 h. d: X' ?4 M }
6 w: g( Y I! x) H" { //临时数据保存完毕,交换开始* Z2 y- s' E- t2 t+ ]8 s5 M4 l
for (int i=0;i<MAX_INVENTORY;i++)
- x. I5 w- |0 ~ {& a8 O) x- S% H# M
if (dest == m_Item.nIndex)
7 S) ]: X; o1 A: U( q5 ]% t {) o1 e4 v, a9 A C
//id相等 则 改变对应的dest和src
$ Y8 V* J/ z1 u m_Item.nIndex = nTmp;
3 q9 ]5 g! W3 b- ^ }
0 b% b# v3 H1 E) o; _/ Q) Z/ T; } }4 t: y# y( f: i- S5 d/ b+ Z3 v
}; A2 A4 V2 _! U5 |3 {
};0 Q' j7 |4 Z" J; V2 Q! y
-------------------------------------------------------------------------
: {4 ?% W0 V+ Z6 E& x依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
8 C+ S; ], z7 m# s4 E/ l# D( @搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
+ o6 n9 m5 `4 @/ ?" T紧靠其上添加:
* ^4 N; b/ g6 c$ ~if( pWndBase == &m_wndMenu )
) U0 ~$ H: `: |2 o/ _{
2 u6 _1 q, F! ~ C# N; a, p switch( nID ) v, M8 r) _; ]+ k
{
% B* H5 R) J5 ^$ `; K case 2:! |) \/ d: Z$ t
{
I; Y; v' P# J //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);( \2 R4 k6 t- x" O7 b- \6 d
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
1 P: M9 B4 w3 V5 ?5 k% l( i4 P {
e5 C4 |2 C9 o* E; S H8 L3 r* w* h5 X+ b break;
9 z/ M! I. l O( Q0 S }
) S6 F1 }: s5 T5 f9 n: R; [7 U% ? for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)' Q9 u3 @+ A; d$ e% L3 L* X
{& D, z" W4 D1 L4 @: b* {# `* Z7 t
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);/ k1 m- e% e7 w- e2 V" P
if( !pItemElem )
0 B9 R5 [$ ]& ]4 s3 @ continue;
# k- E# r8 D) f! A8 @ if(pItemElem->GetExtra() > 0): R& [/ `2 p) ]) ]
continue;
" S, l- f! o# Z, r) W. R2 I if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) * T, w7 \$ X' u, A; N
continue;: a) n5 y" M9 a2 t8 m
if( g_pPlayer->IsUsing( pItemElem ) )
* f5 T/ d% I. J4 Y+ l" N& E( i continue;$ P( p: p& v* ~8 z8 \
if( pItemElem->IsUndestructable() == TRUE )
* K; h e6 x! v% u' { {
" L; v( ?4 j6 \ g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
0 c6 p x& o3 }% V3 L continue;) Y! t0 k G m$ f6 B9 K9 K {, T
}
% l& F7 L+ Y/ X5 B2 B& i g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
8 k0 I, R8 P- A: R$ h }) }5 P6 w$ ?0 }0 `# F# c4 ^
break;& X7 Z0 L2 c+ n
}9 O2 \" H. b/ l; d
case 1:4 H8 _, T* _) X. t: B# d( ]
{4 C0 v/ b" P% J# F( n0 C( S1 I
//整理背包
/ ^" p! m" g' R3 h) h5 m8 @3 g //////////////////////////////////////////////////////////////////////////
% d6 T# Y9 `# y) s" ]# X //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );$ V$ e$ ^( q, p1 M) U
//////////////////////////////////////////////////////////////////////////
, P+ q2 H3 y( `4 E //////////////////////////////////////////////////////////////////////////, Z. k3 b% ^/ m
CInventorySort* pInvSort = new CInventorySort;
( ~0 s1 P `( g vector <sItem> vItem;
: Y7 y7 \* K* |1 O7 D vItem.resize(MAX_INVENTORY);//初始化大小
" S; @1 m6 ?* C //////////////////////////////////////////////////////////////////////////
5 T$ a" C7 J$ e: c //填充数据
% o% h+ p" \* c& W, |! W+ x for (int i=0;i<MAX_INVENTORY;i++). M8 D4 N9 o6 V- V Z; |, d, j+ @
{
8 o. @$ R5 ?# M2 ]& N! j CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);; G9 a" W' G- s, L
if (!pItemElem)
. ~/ n* V" Q( E6 I7 r {
0 F' {- m) e+ R4 ?( l$ f' ^' N vItem.dwKind2 = 0xffffffff;
7 H$ Y! H% c5 b% Y, L& _ vItem.dwItemId = 0xffffffff;
X: b/ O* ~: g vItem.nIndex = i;
, k \, r+ I3 Y( R1 z }else {
8 w& F" f0 W+ N9 s5 s( ` ItemProp* pProp = pItemElem->GetProp();
, x1 ?, A9 d0 S6 a. o& [6 Y$ r0 s- c vItem.dwKind2 = pProp->dwItemKind2;- b' S1 l- q. o
vItem.dwItemId = pItemElem->m_dwItemId;# m. z) o% _5 |, O$ B& y) b: A: Y9 v
vItem.nIndex = i;
9 Z4 Z. R+ y4 _: M1 V1 | }3 ~ f! e) _" P2 ~
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
8 Z% n5 f& Z; d( k; b! a: h }
4 r5 E' N; k# P //////////////////////////////////////////////////////////////////////////" K$ V4 W3 X. ~& p
sort(vItem.begin(),vItem.end());//排序
, u$ K/ X6 h0 o, m6 L //////////////////////////////////////////////////////////////////////////0 W2 v/ k. e) e; g
//交换0 B9 w" A$ f7 q
for (size_t i=0;i<vItem.size();i++)
# m, x% D" r& Q' @/ o/ N {5 n- }: j7 M- @3 I& n: k
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
7 q/ I1 K* m! \; @6 L3 r pInvSort->Add(vItem.nIndex);6 z, n/ ?) B8 |- n+ i9 @
}
# I* k0 r! Y z: L BYTE nDestPos = 0;$ L$ f9 G% F* v m( V
for (int i=0;i<MAX_INVENTORY;i++)
: Z' f) c6 ?7 `7 R {
4 y2 O+ b+ M4 {$ o8 b CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
; ~& U: F/ b/ {2 z if (pItemElem)- d+ L5 Q5 e3 S, W& w4 T/ O
{
' @8 x6 R Z' A5 d+ s! \ if (IsUsingItem(pItemElem))8 i7 [4 a& N4 H" }5 c# C6 w
{3 C$ q ^0 `+ @# Z9 f, s2 [" E: s
//这个位置无法放 ?+ B+ ~ G8 l9 S% L" v. j
nDestPos++;
2 w2 Z$ m* {# P/ E* }8 d }+ o4 T3 {7 A! Y+ y* l! K3 o1 {
}
! C. u, e' T9 q& d' K BYTE nSrc = pInvSort->GetItemSrc(i);
1 S% }9 @) Z" D7 V. W* I pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
/ ^( m0 n x) k) n* n if (pItemElem)
( o @* c! p/ I* K; Y {
: l3 g; Z7 M' A& n if (IsUsingItem(pItemElem))
6 y! y/ i7 o! b1 `) M {' A0 o3 Z: z: m! m; M0 G" L
//这个道具无法移动,跳过' ^, p! z P$ V- r
continue;7 z# p. n+ E) @# W8 Y1 U
}0 {2 j9 X" t( H d% K' k1 [! _( s
}else{
! ]( w' p3 P; J: [5 Z- S4 i1 t4 s //空位置 不用动
6 x9 i5 P& |, x& ^1 ~ continue;2 P! y& z. l0 O. J% K
}
2 ?2 j: m( ]* ~% b //////////////////////////////////////////////////////////////////////////
& F& t" L2 B. C0 H/ ]. x //开始移动
! v9 U2 w3 h7 a6 [' {% j if (nSrc == nDestPos)
% `4 e; E2 j% S- _ j6 j {
8 q7 N/ L6 s" D$ m //原地不动8 V. I/ k% |" Q
nDestPos++;
! }5 v* B! R" ^ y$ B. }2 t0 y0 ^ continue;9 j3 g" t: _3 L) l+ [
}
; r) N' G1 |0 i' \; D- V% v% S, w pInvSort->MoveItem(i,nDestPos);
3 V6 A4 a6 v7 S g_DPlay.SendMoveItem(0,nSrc,nDestPos);$ G1 O1 S/ H1 I) G% @4 f
Sleep(5);
1 c( Q- t: K$ @* e$ k //Error("移动 - %d->%d",nSrc,nDestPos);
9 @' r! c+ Y; D( e+ t- J# j9 u' Y nDestPos++;& Q% u2 U& A/ X. x7 p, K# ?* e
}7 M4 ~0 f7 k9 W7 `+ O1 G G. R8 P
//取第一个元素的信息. d0 s# p7 e, {2 {0 s Y
/*
8 w: L* K( j, h# {2 P Z. A, b* L if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)8 c v0 `* u* Q# k* C: ^1 o' S
{) Z4 ~& N1 V# w' D/ L
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);6 a5 r. I" r1 K) \0 S: ?
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);0 W8 |/ R- W! \" f
}
# h1 p1 H* @; `4 O! Z! ]% R */
5 y& g# b _. K" o /////////////////////////////////////////////////////////////////////////// y( I, e2 ~) S& k& \" t
break;. B9 i9 T2 o" c$ i
}7 G/ T, V/ A4 @5 K3 ^: j
}
, X+ C: f/ H: d- g% ^}5 i6 j m, e9 F/ J* L5 z# c
m_wndMenu.SetVisible(FALSE);
5 ?& d6 v' f5 j2 [5 \
4 r6 ~+ v: o$ D0 K: J7 ?& m--------------------------------------------------------------------------------------------------------
& N9 m7 I# C9 m" d- P搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
" u, @2 c$ A# r6 t+ Y d( [1 R{5 m8 v# Q t8 {! P& ?6 {, l$ B" D
BaseMouseCursor();
' s4 z7 \/ R0 [* g" R0 h/ B}
( C8 V, @ z T+ s8 z在其下添加:
2 I) P' W- w* S. Pvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point). P# Q, \, {1 F6 _7 v
{
7 Y1 y/ ?' D( w* t6 H$ S1 wm_wndMenu.DeleteAllMenu();- t) f& n! m/ v* K# q" u/ T
m_wndMenu.CreateMenu(this);, r1 p) u: a+ {2 {
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
3 T; c x) e, W; z6 q. V8 m" @% D% o$ u9 }8 Q; R' B8 r: ]1 d
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
6 ]. ^! a3 v' U3 s$ c: a{2 E. Y8 ]" y: @6 _' i3 M
//P以上级别才可以删除所有道具/ [: I& _/ K( K2 k
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
; v) t" K% N/ Z8 Y5 W3 A2 D}
5 [. w' W& m3 W( Rm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );' \9 d* ^5 L- m+ {% p; E. v
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );; g" r9 P2 n. L* j7 e
m_wndMenu.SetFocus();
, I0 x% z$ W. E; q* O: D# h}
! i/ u/ V! Z0 v! h------------------------------------------------------------------------------------------------------------, L0 }4 g/ v& E( U" A) G5 O
*************************5 i* C' Q5 X5 U
WndField.h文件; m$ F' i" H6 C1 M t
*************************
$ V. O, `$ m3 P搜索:BOOL m_bReport;6 s3 _! U/ o8 B, H
其后添加:
3 J. g# N, N/ F, ~# y* M8 `CWndMenu m_wndMenu;4 \& G1 ~ J3 [; S8 K
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
# b9 Z8 L" F7 X+ v其后添加:
( H3 b4 i# ?; x/ K: g& Jvirtual void OnRButtonUp(UINT nFlags, CPoint point);
- m7 a+ Y* V7 O! D9 b) o' Z" c# w9 b" c
+ B9 z% O" O. k5 U
|
|