|
|
源文件中_Interface文件夹下WndField.cpp文件
* o5 V; Y/ R8 s$ V" b搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
/ e" b# z3 Z A8 Y
% N& H9 v- v7 Nstruct sItem
5 u% b- K( W/ o4 a{8 z4 F! Q' g9 T" Q* P$ k
DWORD dwId;
( u. M6 o, `$ D9 X4 [DWORD dwKind2;
: N6 B( s+ ?6 h4 p; @DWORD dwItemId;/ L7 w" d; ?* @7 \
BYTE nIndex;' L" t+ v0 s7 v* b
sItem(){7 R# Q v; b* k1 \1 v. C7 G7 M
dwId = dwKind2 = dwItemId = nIndex = 0;' |* O4 M* d- A" Q& s2 h
}2 o/ W& _ }; `: y
bool operator < (const sItem p2)" s# k1 r2 W! X
{2 u* v" O( x# s0 ~5 U! t/ P
if (dwKind2 == p2.dwKind2)( y0 P- i5 L2 u+ p
{7 Y+ p- ]) m t9 m+ m7 |6 Z- V# L
return dwItemId < p2.dwItemId;5 t/ b( y' V6 {0 |" K
}else{1 @1 y8 o0 j9 x* Z7 s' v
return dwKind2 < p2.dwKind2;
6 i) B0 [4 ]. A+ V# I1 b9 a { }& e5 F& e/ v% T/ m
}! A [0 h( z: K" N0 | m% x7 Y4 H S
};# c5 r: y4 D7 w; `, u
class CInventorySort2 V2 b1 W; \2 H# L9 Q0 _& U7 E( U
{$ }2 w/ l: X M, p3 B+ e& v
public:
/ A% ]1 @- {* Q, G9 a; F6 ^7 [6 TCInventorySort()
6 Z4 W, B; i* {, s{
# f; M* n9 e+ M- ~& C m_dwPos = 0;
- @0 @1 U7 v' J; j' l}8 m- `! q; v! o" P
~CInventorySort(){}; U8 v3 R1 j7 ] Z7 V9 H6 Q3 U
private:. s0 d9 ]( x2 p& Q4 I" K
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
3 E7 Q: H, ?, _6 L6 ]% m1 rDWORD m_dwPos;& A/ e% t B, B/ ?8 X; x
public:
. h/ G- H: e( G0 N& b. h4 G* ?7 cvoid Add(BYTE nIndex)
: b4 H* N# N" v1 |" \{, B5 R0 j, ?4 r
if (m_dwPos >= MAX_INVENTORY)% s, \7 V1 e5 W9 ^
{
" O# g2 s+ R% v) g2 @1 q return;" I' y1 R. H J% Z. Z, F! R7 y
}
8 c2 v5 s; t1 {6 s% Q; y1 Y& j0 h m_Item[m_dwPos].nIndex = nIndex;) l- N8 {" [6 Z5 S
m_Item[m_dwPos].dwId = m_dwPos;
+ c# \/ T4 A9 f0 b8 [& a- ^ m_dwPos++;5 ?! v! b; n" u! y. M
}$ b6 A' t0 F/ z
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列4 z1 X6 U& I+ c8 b5 \; V
{) s6 m! Z. _" H" G$ O0 I
for (int i=0;i<MAX_INVENTORY;i++)% w: ~+ e+ D9 U8 ^: N0 w$ b0 M
{ o- T( b* y k7 j! Q2 F
if (m_Item.dwId == dwId)$ ~. ^& R( E% ]* L! l& T
{! y! V% T( F w0 }7 L4 B
return m_Item.nIndex;9 U# P/ O: I3 k! n
}; D+ H ^" B& b& W
}2 C- ?/ _6 S0 h0 O& b- Z
return 255;
, s% `& ~1 b2 e( A. d0 l- t( |}
$ O6 Z% c7 g% W( V& N6 Uvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置$ d7 [) M! H( b* Y0 T' N
{3 j) D$ e% V4 [0 b- k: q
BYTE nTmp = 0;/ t* e) @. q5 ?- R3 ^
bool bDest = false,bSrc = false;0 R X: H2 W: I: @
for (int i=0;i<MAX_INVENTORY;i++)
( P- I5 G% O& i8 f( z5 T. R {
; k) l7 G6 `$ s8 u if (dwSrcId == m_Item.dwId)
" K& @7 D N* g1 ^ { z. P" D# f p1 \0 t. Q& a- n
//id相等 则 改变对应的dest和src' |/ D5 v) l/ p2 M: @& @& @
nTmp = m_Item.nIndex;6 ~/ l5 c: K V* Y' G7 [5 ?
m_Item.nIndex = dest;
! B1 c. H- R5 J2 J$ K8 J% o }7 G$ N. @$ r* c# W6 e
}
3 {6 N6 Q: d/ e2 u6 Z- A //临时数据保存完毕,交换开始/ ]5 k; ]' n! T) z6 e S
for (int i=0;i<MAX_INVENTORY;i++)
* B6 S4 v; x1 n6 w, L% ? {
. ^: K9 ^; _, ]) y; h if (dest == m_Item.nIndex)
7 C! [& f( S6 ]% q5 x& H {
5 g+ _* _4 e( b0 L% @; q2 o6 k //id相等 则 改变对应的dest和src
0 `- ~ G z) W; y m_Item.nIndex = nTmp;- N7 I- I5 O6 m0 D! l* e
}" e6 d" `/ T, k7 P2 \4 i' [7 B! s9 k
}
- G) V$ i& F8 d}
. r3 }6 s% w% v2 p6 ^" [* z};
4 m8 b( F1 Y$ S-------------------------------------------------------------------------. P0 r& ^4 ?( k. S7 l
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
1 R3 f/ }5 F! |4 H; q" u5 w9 G搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
5 ? |+ P9 g; w5 P* g: V" g- M紧靠其上添加:
7 D8 k6 K% Z0 B, F% Bif( pWndBase == &m_wndMenu )5 F8 ]; p% w; X6 g
{6 D' v$ Q( L) O
switch( nID )# q" K7 J' s) i" b, {: p5 i& m
{6 [ e0 y* F% w. N5 f) M: }
case 2:: W) u9 v- ^! {4 r, }
{
# [$ q+ u$ L; }) s) M% w //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL); f8 g$ c5 Q1 F
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
, F) ]9 _& E1 N# o( B; U {
- A1 \4 ]% Z& x9 p( C break;" |$ W7 b5 U" d1 P: K( b6 @# w
}( o% ~) }5 O; S# V0 ^+ @ ~6 m& L8 o; b
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)5 w& R+ A+ \! Y! P b" d5 g
{
% ]+ e5 W4 S- ~! v0 d CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
6 E) k3 r, k) D& z' Q, k1 D if( !pItemElem )# h R3 h* |/ b/ j7 k
continue;
5 m5 q2 e1 ~- N if(pItemElem->GetExtra() > 0)& R# Z/ p& U) ]1 s
continue;) Z; P0 b p/ c1 X z+ D' @5 P6 x
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
_, b' K, z1 ^! | continue;
# O. h: |' F0 C& p& B/ o8 V! n if( g_pPlayer->IsUsing( pItemElem ) )7 p% n9 g8 }8 g2 D
continue;$ o ^5 Z r2 O0 h
if( pItemElem->IsUndestructable() == TRUE )
, c- m/ C) [7 r7 S% }4 G {
" J5 w0 G5 p' ?9 X! M4 { g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );8 W; }- r4 H2 N l2 L6 i% V( O5 O
continue; V- \8 Y9 Y4 r, _
}
0 a* g7 u0 F2 `5 h K g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);! {! B! |5 j0 U) L
}
% ~1 i# b$ `9 F" Y) m0 f* C) V break;
4 y o& j: N q& u8 g% f* R }& n3 n) Y" J6 q% d, X, L
case 1:- G7 M0 a( n3 I9 k; K+ Z
{! i' H! Q7 U9 j2 V4 d# e4 a
//整理背包
8 I, A2 y, ]; ~3 C //////////////////////////////////////////////////////////////////////////( }) J5 M+ B& G( E" ?" y' X6 X6 V; E! K
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );$ A L) w6 f% K* [6 b
/////////////////////////////////////////////////////////////////////////// x' R4 q* u* A$ E& r* `
//////////////////////////////////////////////////////////////////////////
( o9 a' p; S& b$ j8 k& c CInventorySort* pInvSort = new CInventorySort;% O; N# R2 Q6 S! ]) |/ o' x+ G# v
vector <sItem> vItem;
q! I1 u2 Q" w n# q* _* j1 H. ] vItem.resize(MAX_INVENTORY);//初始化大小
. Y5 l8 y/ ~9 Q' V: u$ E /////////////////////////////////////////////////////////////////////////// b: w. B. e% T7 j' O7 Y" _7 F& z% I& j( f
//填充数据. n7 L/ O/ a0 W8 _
for (int i=0;i<MAX_INVENTORY;i++)
- L5 ?' n/ d* e$ l {8 D. P! D! ~5 Z, H9 v
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
+ ^" \) m/ e2 ~$ z _% D, _ if (!pItemElem)
; \9 [" G) I% I G5 ] {& Q0 P/ s9 x. X
vItem.dwKind2 = 0xffffffff;4 @( Y+ v6 z- d0 }% r( M' |
vItem.dwItemId = 0xffffffff;
7 o2 c) d$ w- j1 G1 |5 Y$ C. \ vItem.nIndex = i;: `$ K) z a" h! V- x
}else {
( U9 R$ z/ }- m; `% j: h/ C6 P ItemProp* pProp = pItemElem->GetProp();1 H; N, e! a' E2 Z6 z; k
vItem.dwKind2 = pProp->dwItemKind2;( A1 C, ]9 j0 m& e& z' `/ Z
vItem.dwItemId = pItemElem->m_dwItemId;% F9 o# Z% L" i/ P8 y
vItem.nIndex = i;
+ S/ ?4 u( b N6 J9 z: b: K }
/ w9 z! [; Q$ h2 u //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
7 m. K4 h0 j9 y6 p9 u9 n+ a }( X$ b2 s7 \2 x4 x
//////////////////////////////////////////////////////////////////////////% f) J4 r( w; C( K8 W
sort(vItem.begin(),vItem.end());//排序8 q* v Y7 `& g9 S! ^( @
//////////////////////////////////////////////////////////////////////////
' }3 ?- m7 B# \1 p0 w& r9 Z //交换- I/ F+ W7 Y& B% K: E$ L! T# [
for (size_t i=0;i<vItem.size();i++)/ p! h5 O# w- ~9 B
{( W. I/ J) l/ m4 ?1 V; v1 Q
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
1 a7 z0 {- B& v/ i. Z7 J4 p pInvSort->Add(vItem.nIndex);
2 h9 w$ _+ o% r# C# A4 J }
* O+ N) x/ V. Y. D7 C BYTE nDestPos = 0;
* G Q, [% v, ` for (int i=0;i<MAX_INVENTORY;i++)0 @6 y+ m7 X: I; n; M* f
{
6 P4 M) F7 n5 v) g# G, Z( Y& C CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
0 Z2 m3 J; Y4 G. E if (pItemElem)
2 M- U! O' R# u2 }. v/ h {
4 B: \ k% {2 T# C9 O) ]+ F if (IsUsingItem(pItemElem))
; ?' N4 ?) T |7 Z { R: j& O8 `" ^6 [
//这个位置无法放
0 m# e( Y e7 }" ?! A( H/ T& C nDestPos++;) _% j' z! c+ \" E3 _3 r* W% P
}
& u3 ]" i4 ]4 Q9 U }: M& f; A0 n2 t1 l3 b; c: M/ \
BYTE nSrc = pInvSort->GetItemSrc(i);
C( E9 M/ @7 \* j6 W pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);" m# n3 C: D/ c. o8 |
if (pItemElem)( f: K) s* d9 J* o- [* s! l' `
{" f, {' c# o2 r# ~% b* R. o
if (IsUsingItem(pItemElem))
* W) ]2 c4 y9 S& Q; {, I3 x5 y" l {0 N7 L( U" G5 P# B. {5 R, y
//这个道具无法移动,跳过
# C4 ~9 k+ l! _6 y# }& K8 x0 q continue;4 c; l) C7 B' E& s( B# Q' C
}
" D$ J0 V6 E% j }else{
2 w" R, P" O) k6 `2 T! X //空位置 不用动
$ J2 ?' M/ R3 R) G) x0 u; \ continue;
7 }6 |( B; G i0 A }" J1 y2 i' A; r0 a8 C! c
//////////////////////////////////////////////////////////////////////////6 }& o Y0 I1 b9 n( Q7 ?% ]
//开始移动
& z' e3 V$ W% C" @* L# f7 x if (nSrc == nDestPos)
& V% t* p ?" f& @( P {
( `8 t$ B( B! I* g |( w; ` //原地不动: H5 f+ L8 E, |4 U$ Y# _
nDestPos++;0 c: w) {* U6 A# t7 \* r! n( u; e# z
continue;1 z8 K0 I" s2 _' ~& v
}
m. [" y7 O$ J7 J/ H1 M) t1 P pInvSort->MoveItem(i,nDestPos);+ [! ]6 b, o* L4 z/ c; i
g_DPlay.SendMoveItem(0,nSrc,nDestPos);; r( H' |9 u8 M. z( M
Sleep(5);1 J/ @9 p9 N( g: h$ J
//Error("移动 - %d->%d",nSrc,nDestPos);
* L, t; I6 g. h, Z4 }' O nDestPos++;
4 [0 Z4 a# a/ r( w5 m }0 |, E3 W. ^0 c% ]9 A' ^
//取第一个元素的信息
9 P; H' Z8 }% M3 z7 V* m /*! y2 L0 @& i, ~* L/ K: s
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
/ Y. N5 G0 b/ n; ~# o; b" g {; ]* P6 g( M6 U$ Z, j( i! x
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);/ L- I' U$ Z* _
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
7 |8 k+ p1 M# N }
, A( c- c/ z" k$ [- ] */
+ s6 l- T4 T# H$ {+ R7 i //////////////////////////////////////////////////////////////////////////
# [- _ ^& [( a' y% y- j0 r break;1 G' T U+ t I& x5 T! Y) B' h& O
}
. a0 ]' K- U% E2 v5 e7 _' o! O: T! w } ( g0 c3 ^' A0 P9 ]7 [
}
+ B: e% u( [) Rm_wndMenu.SetVisible(FALSE); D5 `7 ^; { ]# Q
$ s+ u2 ~' {$ S2 j
--------------------------------------------------------------------------------------------------------
) x* {: ]" @0 L7 K. B6 ?& f$ g搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
; j) n7 f( B% E$ }: c( ~% L7 i( r! h6 U{6 }/ l) n1 }8 W6 A j7 a
BaseMouseCursor();
& v# y' P8 `' j4 x}
9 X: o: c/ K+ ]2 H: I* ~2 k) W在其下添加:
1 b% p! [9 l9 v8 ^void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
. w" T, }& R. b/ R{" U9 `- L% `. h( O: H* o
m_wndMenu.DeleteAllMenu();. C( U2 O0 O2 j
m_wndMenu.CreateMenu(this);
+ R! T9 A! ~$ W9 gm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
: f$ E( D! @' s+ P3 `7 n5 z" i- V- ?& O7 z3 q& x
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
4 @; A( j: ^( q5 D5 N- o{& a3 m; c, }8 v- t/ W* P' p
//P以上级别才可以删除所有道具3 T+ E( |1 [# c" G2 R
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");* P, N" d# e. N' \. g
}' s4 v2 o3 e7 S8 `0 v
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );2 v, |! r) i3 Z, q' L" h
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
5 f3 F3 }6 j5 }5 F `m_wndMenu.SetFocus();
* C; q# w, W# V}9 @2 m, H5 O' k; Y3 E: T* X. |
------------------------------------------------------------------------------------------------------------ F) d; u0 ?5 [
************************* e; S" w$ K5 f- p
WndField.h文件
; u( \8 }9 \ M- w: P*************************
$ V% i8 T/ m6 V, H" ?( [3 L' a( z搜索:BOOL m_bReport;
1 A# t* q# m1 F* O' @其后添加:
; \2 O8 C$ ~! Y' _CWndMenu m_wndMenu;8 E- |6 D" _* R( D. y2 N9 c
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
4 d( R8 F8 C" q' B" I其后添加:
; {7 s. Y7 H- {# E1 Mvirtual void OnRButtonUp(UINT nFlags, CPoint point);% `0 D5 u5 ]2 t" u
( [' [' T6 _, L- v6 K
- |! G3 H0 P6 l% G
|
|