|
|
源文件中_Interface文件夹下WndField.cpp文件
( N8 {/ `3 E: ?* r搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )" T" J! {2 V8 I& s
7 R* j7 y8 e- F+ n( ~struct sItem7 b T$ F) e* x( {8 ] v
{7 I0 z }- B9 r0 a
DWORD dwId;7 \/ F' R- t8 E8 v, m+ i
DWORD dwKind2;6 J' E2 |( c4 k" m
DWORD dwItemId;; K! f, x! y1 P, R; M I' P
BYTE nIndex;
& i* r6 C- _- a" z# QsItem(){
" g7 ^& I. L# g( X' Y- h dwId = dwKind2 = dwItemId = nIndex = 0;
" I0 ^9 a. K) J6 Z4 K}
! G0 W8 t- |3 a/ E. @bool operator < (const sItem p2)
t' J% S k) L, o- [" K$ t{. H: z* _& k+ U! l$ X
if (dwKind2 == p2.dwKind2)
, B( F7 Z8 ?0 k: P& ~ {
: [$ A% Y: A8 n2 L/ z return dwItemId < p2.dwItemId;
* F- S$ m3 u6 a$ P8 b) F) p9 [ }else{1 Z" c& ~5 d" J5 P# A
return dwKind2 < p2.dwKind2;
9 E$ c& M0 j; C$ f- p" ^) j }
% o1 Y/ x+ o' X/ T}$ | v# p2 B# j+ T" K6 O* c
};
! L* i1 C1 X$ a# }; A. u# Iclass CInventorySort
1 i& }' A* U, B& R{6 C& F) u8 R; A4 u/ V) P
public:; r( a$ t$ Z* T% ?
CInventorySort()6 M+ j# Z- `# @
{
7 c+ R) k3 V' {: [0 I5 S4 o- ] m_dwPos = 0;9 U. G$ u4 y# P5 g! M
}
6 s3 T6 w- r% z5 {" } ?( C X~CInventorySort(){}
: ? c* e a5 F7 Qprivate:" l+ s6 s. x7 U4 ^
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息2 N! t( E& w8 Y3 v9 W! p; M9 j
DWORD m_dwPos;6 _( ^) e) Z" k$ Z* d* l( H# P. Y+ G9 A
public:# d& E0 ~1 E6 N9 a" C5 k
void Add(BYTE nIndex)
$ ]" v7 \) p+ B6 n# G{6 p; q3 c' }) f' {5 ?+ }
if (m_dwPos >= MAX_INVENTORY)4 d7 G, q9 h/ K# f1 ]& @& Z
{/ ?) o' Z0 B6 |1 Q1 Z( Y9 e
return;
1 H1 e1 l3 C+ W) {# a5 G }9 r8 ?* M$ H+ s1 r! O
m_Item[m_dwPos].nIndex = nIndex;
+ ~' g; V4 @. Q# F4 Q; ~1 Q m_Item[m_dwPos].dwId = m_dwPos;7 Y! Z( ^4 ]* m3 _& o
m_dwPos++;" R0 h) q& m( x0 G) z1 T
}
7 @8 P! Q* ]1 J6 @' ]BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列. }* t0 N7 C2 o% w$ v$ \
{6 L5 J) s, t% }. K$ I' c) M
for (int i=0;i<MAX_INVENTORY;i++)
6 \, k0 T' E% K6 S4 W# a, z% P {5 ?5 j9 \7 e3 d1 R% s
if (m_Item.dwId == dwId)
6 _4 k$ K- b. Q9 j0 G! ` {2 M$ L: ~/ N5 b: f' H1 @; r
return m_Item.nIndex;4 o1 X8 I' {; A% q3 E0 |
}
/ ^. X4 U3 s! P! @* X6 l& C$ O } L/ y9 L$ G: ]. l
return 255;" l% B5 r& d$ ~: o
}4 H0 ?& F9 |, \! z
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置1 ]* n# W0 d# q/ d0 ]( e
{4 k" \6 U! L) d5 \. q9 \
BYTE nTmp = 0;# _0 C$ P2 T+ \, y. @1 G
bool bDest = false,bSrc = false;' X( U6 d, M. T: \4 R* c
for (int i=0;i<MAX_INVENTORY;i++)
. f- c) p7 Q. z/ }( h" ] {+ \; G1 N' s; n
if (dwSrcId == m_Item.dwId)
' K; o: D s8 }) s: T {* o$ a% T4 w3 t' V
//id相等 则 改变对应的dest和src% L8 L% n) X! I; @. s# U8 ~
nTmp = m_Item.nIndex;7 e2 Y" l, x! L5 W0 _" ^
m_Item.nIndex = dest;
* m& J" w1 v! o& t }
+ R# }3 U; m4 J }
! G6 g' }& V1 U$ o //临时数据保存完毕,交换开始
) _9 u! @7 N/ @: a for (int i=0;i<MAX_INVENTORY;i++)
2 a+ j' S1 ?, E: g) H+ Q! { { W4 ^" Q" t& a: v
if (dest == m_Item.nIndex)( D/ X; Z, g1 j& y7 |7 n; g
{
+ F9 R$ @' W4 P9 H3 _8 ^ //id相等 则 改变对应的dest和src3 U( o" m4 t- {, q
m_Item.nIndex = nTmp;
' k ^ k" N X+ G' P7 c( k9 g }6 @% C6 _( f% ]% F* Z! @
}, x8 k, x5 I4 L" b) \
}
" `# \3 o: t4 p1 p};# g) j1 x6 M. U0 ]! X
-------------------------------------------------------------------------% Z L1 m' s: w0 h; {! C- Y
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ); B% {' x) o! W" \# c" B# v+ R
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);4 V; C. B: K" i
紧靠其上添加:+ {5 Z% E8 M6 j2 c5 ]) o
if( pWndBase == &m_wndMenu )
6 r7 L3 u1 B2 L) ` x{. _7 _" E1 _* y! C4 p
switch( nID )
% q% w2 l Z- h6 w! F1 r {
# m0 D2 j7 K, A2 h( @3 v( c case 2:7 W" N5 d6 C3 g3 L( O' Q
{
! b( \. C3 W# ~$ F! } //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
# @0 @4 y e& o if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 W/ R1 u2 l! _0 L {4 r- O5 V: H+ Z p& \, Q4 m0 L
break;
0 ?/ o) M. Y1 b% i }7 c: s" C/ F3 w
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)5 y; P- | l0 Y
{
% J O! F9 s0 S* y; R CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
, e$ j: D5 j! F* {0 y if( !pItemElem )
/ ? Q. g7 A8 E" h6 m- Y% | continue;
^3 v% o( `- v9 G* ]- I if(pItemElem->GetExtra() > 0)
: o" O R1 X8 A) X) E$ |: l continue;
1 G! V+ b$ e! r0 U if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) % a3 {7 L6 ]; @; C: n
continue;
# t' ]/ ?& V+ G% o, B! u# C+ [ if( g_pPlayer->IsUsing( pItemElem ) ). C! G+ V& ^6 l& `
continue;
) Q: H$ J. e% T, e- G1 [/ J if( pItemElem->IsUndestructable() == TRUE )
% ?; i" B( O( {8 }! m; D0 ? {4 D- E8 b% G7 u' X! i
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );9 @4 I) y' s4 `9 c6 u4 \
continue;
0 `% Y/ O! J$ D8 f }
' M2 N' }/ \+ F$ Y g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
1 [; b R: m# \- @% `8 c; g }& {5 ~# t' n1 n: G- Z; h
break;
2 x- _! H' A$ W- R$ I }5 f2 p9 j1 u. b/ \, O# E& J: e2 X9 @
case 1:$ V: B' a" Q0 p+ K
{4 d0 U. B3 C& z: [; A$ N
//整理背包
% Q- c9 ~+ F/ D7 C% C9 U. K //////////////////////////////////////////////////////////////////////////
% _, p4 t# B- u. u3 X //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
( k: }4 D% Y: k; W1 L$ W3 `( ^, p //////////////////////////////////////////////////////////////////////////
$ x+ [ Y- a' }; X$ X ? c //////////////////////////////////////////////////////////////////////////
3 ]% t, @/ D$ k* |) i* n CInventorySort* pInvSort = new CInventorySort;
: O" r( T, L5 q vector <sItem> vItem;5 H& N; \* o$ d' Y7 s( s
vItem.resize(MAX_INVENTORY);//初始化大小
6 S: b4 e7 h' w% C7 J //////////////////////////////////////////////////////////////////////////
( k2 B' k- {9 B1 U8 M, R //填充数据
- F9 g$ u# Z- N. ~0 Y for (int i=0;i<MAX_INVENTORY;i++)
$ n" e! B% L }& U$ Z {
8 Q& ]/ h- y1 E' {, S) z5 l CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);) y' C* \: M0 y0 R! e
if (!pItemElem)
) H: M# e" h* f% [6 Z7 H) Q5 h7 k, { {
1 [* f9 h ?) h; T5 ] i/ v vItem.dwKind2 = 0xffffffff;
' Q# J& z; l% A! S' ~! A vItem.dwItemId = 0xffffffff;; k/ y$ l( M; j: U, ^
vItem.nIndex = i;
1 k4 m; X2 j4 V e, o5 M( Q3 A* b3 I A" X }else {
5 v# H/ K6 T4 H ItemProp* pProp = pItemElem->GetProp();
' |) B2 `$ A0 O9 s. e vItem.dwKind2 = pProp->dwItemKind2;0 x& f' ?; U* h: U) S
vItem.dwItemId = pItemElem->m_dwItemId;
& R( c1 O" q* E* c& w0 ` vItem.nIndex = i;" K) x; ~3 s9 a# H: F1 v- b3 a
}
2 E; |% ~/ R' x //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);6 Q; P) Y6 B* P/ P/ ^9 Q7 ?* n
}2 ? |( ~9 _; J V# K k
//////////////////////////////////////////////////////////////////////////
$ v# f' Y) \& r2 x sort(vItem.begin(),vItem.end());//排序7 q5 {- \) K! _1 c7 d
//////////////////////////////////////////////////////////////////////////
' p/ k% R, m- M- b; o4 ^ //交换# { ^5 {" A3 y0 ^8 B: Z v* O% U
for (size_t i=0;i<vItem.size();i++)& C6 R! ^& A) |- ]: L
{+ b2 P) ^# @+ B$ b" W* c
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
1 @: v; f; J% Q/ l( b pInvSort->Add(vItem.nIndex);
( p p" W7 Y) N% M& Y }
$ ~) N' \8 b) e/ i BYTE nDestPos = 0;
( H; M- {" t) P for (int i=0;i<MAX_INVENTORY;i++)
2 p% G8 O F" c+ X: l) h {+ w$ T2 d. K% V \
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);( e1 u; }4 ^+ w$ Y8 b* X
if (pItemElem), f2 g1 @6 H2 `- p4 }1 F+ S
{
) @+ b0 P7 C6 Z# S4 E% B8 b' t$ z if (IsUsingItem(pItemElem))
: |1 w+ {/ z5 s0 E( z% O; e/ y {
8 F9 b7 x! |. l //这个位置无法放
, ?% x" {; X9 L$ u! |% q( C% d nDestPos++;& Z5 j1 `) u+ L& `4 Z
}# S+ d) d& T* W. r" @! ]7 O
}
0 g4 U }8 K7 U BYTE nSrc = pInvSort->GetItemSrc(i);
" e) K$ {5 Y. D: _ pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);0 D. Q Y# M, u8 X3 A
if (pItemElem)
0 Y# L2 x j# w4 {7 o8 j3 l' { {6 k- W% {, ?* `: z# b5 \
if (IsUsingItem(pItemElem))
' J. i) D6 G$ }( E3 s$ W {2 f9 K' f6 Z t: W
//这个道具无法移动,跳过
' L/ K" c6 B7 k. |6 h# E continue;
2 F8 d1 W5 _+ `# Z2 n9 T$ l }
# N: d1 V8 {4 {3 p, _, w }else{% l. i5 Z' M$ S) [, z8 w$ g
//空位置 不用动) j# Z/ ?& @4 l8 ^6 g/ V' d
continue;
# p6 t% X. m8 F# Q" H0 x* h: ~ }9 r; }5 _0 z: p, q# r6 \) o- b
////////////////////////////////////////////////////////////////////////// j% M* n/ w" P& t
//开始移动
1 k2 W1 B" I* U; r' { if (nSrc == nDestPos)
3 A/ U+ t; A, g s( }: e. `' n {3 I' H6 T7 H: d4 L
//原地不动- A: ]* u) l* I+ A( E8 a2 Z
nDestPos++;1 G; b" G: I2 Y
continue;
$ a$ L2 K; t8 x' J6 v. w# R }
0 M) r# W/ a4 I: b) |: U- x0 S pInvSort->MoveItem(i,nDestPos);
& z0 s+ B6 Z, ]) F# \( r$ { g_DPlay.SendMoveItem(0,nSrc,nDestPos);
$ I- g- d" j! N6 z( J- {3 s7 y5 k Sleep(5);
9 C7 \4 [3 B/ Z1 h- S2 O5 V4 G; h //Error("移动 - %d->%d",nSrc,nDestPos);, ]" k6 [: n* w1 u" f8 X, S( V' a
nDestPos++;
9 y# ?7 `1 }. Q% | }, p5 B, c& l2 J+ ?7 P( h" F
//取第一个元素的信息
0 R2 E6 P- S! j" v, p$ {- g /*' b' F& M c$ w
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff) [4 l+ L: [; L/ J. U7 o% }
{
3 k6 q5 x- [7 h Error("Move - From:%d,To:%d",vItem[0].nIndex,x);& b- w L8 p) a& C
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
' k. G$ ?6 F4 j l% B* F }
; N. J# Q, Z3 ` L */
2 F( X; p0 _1 b4 Z //////////////////////////////////////////////////////////////////////////
' w7 C/ X' F7 w9 C2 j1 {6 x4 Y' P break;
. T) @0 N# J4 x+ [3 w8 m }
2 z r- h& v. [; U' _+ I- b } 5 n) B" r5 b& w9 K4 v
}
. p" P6 c4 O( m; dm_wndMenu.SetVisible(FALSE);
5 J7 f! ?! s6 _: J
# S* c0 U" {8 @7 ]+ n6 T( m Z--------------------------------------------------------------------------------------------------------5 |8 D( R! P: R( c% v/ o
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
& v) ?0 u/ V- L{
/ c3 n L! X. P! O& DBaseMouseCursor();* u9 ~, l1 D1 I5 ?" l
}
& Z: V$ U- S4 y: ~1 x t5 `在其下添加:
2 q9 `- X- {0 `& e/ mvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
+ `0 j' I) @: O) G) E% ?{, r, V0 q. R0 W6 r
m_wndMenu.DeleteAllMenu();
& |! r& a0 ]; o5 Jm_wndMenu.CreateMenu(this);
* @! S0 N! K) |/ y( `9 Um_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
7 s7 o2 H' g% ^6 z: o" v( t9 k( g5 m) P$ B0 x5 K5 j8 t
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
$ ?. P2 h0 V l7 {{
% F) a9 F, `% W, Q //P以上级别才可以删除所有道具% \* o6 _' x: I7 ^5 \( R1 v
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
9 x0 i/ _. z/ J8 M5 A} \3 T% s; C0 ?* _ `
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
" j& E, [% g$ B' K( dm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
4 v1 `/ f- q! p4 X( zm_wndMenu.SetFocus();0 u( Q: ? S( L# d
}
# s6 h4 e7 ?4 Y7 _5 h------------------------------------------------------------------------------------------------------------
+ I9 e& N9 i0 G6 R* |*************************- ~ g- B% W. b4 ~4 v
WndField.h文件$ n& s, R/ C* f4 f4 H7 W
*************************
5 K+ L! M. }! c# s1 f3 E搜索:BOOL m_bReport;7 A! i0 d* Z& x" `4 ]
其后添加:
: C4 h$ X" G |% a' w, i- I( zCWndMenu m_wndMenu;) |- }7 F) ~8 r5 J7 i" n
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
* W1 `! T& r' W# m9 v其后添加:
' W: S* ]6 [ r# cvirtual void OnRButtonUp(UINT nFlags, CPoint point);
3 f1 K/ c4 U) M7 ^8 \! y: q
( R! v$ z$ h& X6 [/ ?3 u* k8 X; o& u5 B. y* K5 N
|
|