|
|
源文件中_Interface文件夹下WndField.cpp文件' S! Q; w2 Z$ `1 W" g
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
% l, h) _( j0 K3 D" Y! i
: H( }/ e+ X" Y/ Astruct sItem8 T: x( F, ?0 B3 X' G& X+ d
{) ~" T( R+ Q& g7 p d
DWORD dwId;
# j1 G" q O4 ^3 `: y4 j; c! r" t1 t8 ZDWORD dwKind2;/ A4 A B) [: L$ h" e
DWORD dwItemId;
. {) G" }) U" t O2 T7 pBYTE nIndex;
8 ?2 H1 ^& C3 F8 R& e( ]8 M1 rsItem(){: F* {- A+ c. `# x
dwId = dwKind2 = dwItemId = nIndex = 0;! w; y! ?* a7 }. l7 F3 b
}' ^- z, l2 M2 |2 N: H- p
bool operator < (const sItem p2), \. ~ F' l8 [; e! o! M$ q# V
{3 I# G5 I) g0 v! Z/ D p
if (dwKind2 == p2.dwKind2) \6 A; G* W* ^7 ^1 y: P
{+ r' J/ {6 v( d9 O
return dwItemId < p2.dwItemId;
2 u2 Y- h5 N. A$ U( ` }else{
" c2 _$ P4 w: S( N; \- X5 t" z return dwKind2 < p2.dwKind2;9 [+ p3 s4 |7 K1 }1 X h; c
}) w' e1 ^2 q7 s& `' J" v2 ^
}
3 b% u# W6 t! u$ c};
8 n. I; ?/ q6 ^ l4 Nclass CInventorySort
; y" v( A, O- Y" A" S{2 ]8 }3 W; y, h0 j
public:
1 v; g2 T& b N2 ]& lCInventorySort()# L( o9 i2 ~% W& e
{
1 g% d& T6 p7 S# ^. Q1 p m_dwPos = 0;
: ?) I' V# b8 T" W8 U' Y+ `}
?) [1 U/ u: a8 R( Z~CInventorySort(){}/ n, o4 z" I2 }% ]7 R
private:8 Z/ [3 B- w7 r' S) U, z9 w- ~- Z
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
7 q- p% u; w7 B% |( J/ k$ UDWORD m_dwPos;, f0 S- ]+ W/ j1 h- D& S. Z: z+ o
public:
( `% A' H; y2 W- Q8 N4 mvoid Add(BYTE nIndex); p& V- P( E- y; O
{
. P1 K Y4 U/ _. G if (m_dwPos >= MAX_INVENTORY)
! g! [9 e; J4 p {
2 U" T/ a* d: G return;
s3 Y! Y# W& y s% O$ b }
3 ~6 l! k% D! a0 k m_Item[m_dwPos].nIndex = nIndex;
! i" D3 W8 h* q% U( g m_Item[m_dwPos].dwId = m_dwPos;. v2 c* e2 c$ n: _1 e
m_dwPos++;. d! z" g/ V9 f( {+ c8 A+ a5 e
}9 {- ?( k& E. q. q
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
* f* j8 Y+ n7 V8 p; t7 D' j{' O6 e3 [3 K& n0 D6 [; s/ N- G% U
for (int i=0;i<MAX_INVENTORY;i++)* V3 ~9 j {3 y. e2 ]
{- B k( j& Y/ u' S1 d$ r. O
if (m_Item.dwId == dwId)
- O9 }% ^& |+ p8 D1 `, F. } {2 @ B; r$ ]8 @
return m_Item.nIndex;
# E* g' k% C4 _5 H }( ^! a" a- c9 J8 q, r
}
$ |# M2 ?& V" x1 K7 L$ h return 255;3 n' o3 u/ w/ z3 _
}/ A" A, Y6 N) I( l$ ?7 z
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
' r- f. M( H" s: e1 U' W8 k! W{
7 a5 j. d: P) V4 f f& a BYTE nTmp = 0;& ^/ Z8 {: P7 t; ^6 Z
bool bDest = false,bSrc = false;9 U i' \# G3 _/ H# X, G
for (int i=0;i<MAX_INVENTORY;i++)
# }3 q6 j, y& [; {4 J7 G {
: v k! ?6 [' D& Z if (dwSrcId == m_Item.dwId)
* i, {8 T7 y3 b+ b6 k& ` {5 X% G; j5 O9 [2 x6 \! k- a8 ]
//id相等 则 改变对应的dest和src
: H$ M) e9 x; d. b6 G* o nTmp = m_Item.nIndex;
. ~. s: f* D: j5 H3 b0 ] m_Item.nIndex = dest;
7 V- J6 I7 R5 E ^ Y0 M! r }! r) h. k2 g' \4 w& q8 V
}
# p% A" d/ T3 I% l w //临时数据保存完毕,交换开始
& e) N+ ^$ Z. U* b* Y! j for (int i=0;i<MAX_INVENTORY;i++)
! G/ `" N! y0 m4 i {
/ ^1 |# I. Z) c' ?& b" O% Z9 T8 z3 @3 {" B if (dest == m_Item.nIndex)2 ^, M* c4 n* j5 ?3 d# I
{5 u4 P# Z1 n6 c
//id相等 则 改变对应的dest和src& c' a9 Y! {# \; M( d3 G4 H
m_Item.nIndex = nTmp;
" F" ^& i- b/ {/ ?' U0 c& L1 E }
, j( q1 }4 ^( j) S! ?7 `9 t' [ }
7 ] h/ \" ^9 G}! R- r6 X8 k. w3 ~
};
0 N0 B/ e, ~: y5 o. a-------------------------------------------------------------------------
7 t% B, `. G. P5 x依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
# k7 S# Y# ~% J& d搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase); t' ?( j! d r' T0 b$ k
紧靠其上添加:- i2 m# L/ c2 ^/ [' G! V
if( pWndBase == &m_wndMenu ); g3 x- D5 t& k. y4 [
{
; o: ^/ R u% Z) @& E switch( nID )& C- {5 _0 Z& C& s4 C
{
Y) I/ ^( h) X3 e case 2:
8 e- J# _* ~6 x% U# f# A; |5 n {
! k0 t' x" i0 R! G& O9 r //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
9 ?) G, v5 `! }7 f/ X _) R3 { if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))4 J& U# ?* B, c
{3 w* j- r7 G9 }! R2 `9 q
break;+ @+ _% v3 q# z# g* C; [& r* F# D
}8 {$ H* Y( Y1 q6 }
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)+ t0 D" T4 y) i. [1 t
{2 w( f4 ^: H, c- c: l' U
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);& {4 ?8 x- }9 ~/ N( R8 F
if( !pItemElem )
! \, l1 u+ _5 X1 u- t! b continue;3 m7 H+ f! J/ @9 w$ Z8 V* v3 G
if(pItemElem->GetExtra() > 0)
8 K5 J5 o9 d* U- P. V! y. b continue;0 I k& e! a. O4 k) k7 {5 j
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
3 q6 e! O8 ~$ c! s1 U1 V continue;- b0 w% E% N h1 c% @
if( g_pPlayer->IsUsing( pItemElem ) )+ S) P g0 b: G
continue;" b5 @+ |8 o& j, ]1 K1 G
if( pItemElem->IsUndestructable() == TRUE )1 |- `. a" d- n$ d' k
{7 H9 I! N/ A u; Y) l
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
% e B8 V6 b: |5 ]1 | continue;
5 ?# K( J! v* s/ n# a3 \4 Q }! F: t, P! P0 u- i) W1 C
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);: L/ @8 o: T. N7 M' b
}
; L5 z. N" y4 _- t0 v) r break;# t1 r% B5 m( F8 [+ O- P/ L3 I
}
4 o/ j* A+ _ _! ?) ^ case 1:
" p. G1 X3 X n% j3 k {
5 M' I& r) O$ r3 a) [3 d //整理背包
. \% [* Z$ L Q, c3 X, X4 t //////////////////////////////////////////////////////////////////////////1 n! f- z' }+ R4 `& @/ G
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );' g4 q# _) M" X4 C I" r' ?9 v5 y% Z ^
//////////////////////////////////////////////////////////////////////////& q2 p7 H% X0 e# M1 U) U. b
//////////////////////////////////////////////////////////////////////////
; N! S: ~0 t# S# ?) y) Y CInventorySort* pInvSort = new CInventorySort;4 H* C7 ~) I/ J2 ~
vector <sItem> vItem;" C: W+ _0 H1 V
vItem.resize(MAX_INVENTORY);//初始化大小. m9 k7 e3 C2 G5 {
//////////////////////////////////////////////////////////////////////////+ ^4 z2 D% p1 z
//填充数据
1 f r) A( k/ C& U for (int i=0;i<MAX_INVENTORY;i++)" |7 \: m9 f+ O$ {
{ d N K1 n0 N
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);5 X% l6 o( V/ A* `+ t& M, l
if (!pItemElem)6 i* ~" c( b( \8 m, F
{
, \2 n2 N- E- B4 f" k1 `! g vItem.dwKind2 = 0xffffffff;# H5 }% k+ {! `9 V2 l q4 K* e
vItem.dwItemId = 0xffffffff;
8 E* O1 v; T( Y6 E vItem.nIndex = i;
+ ]' j/ h+ W% T+ h( K0 \! n }else {
4 C1 N1 e* k `9 |/ B ItemProp* pProp = pItemElem->GetProp();/ f. T& `1 z4 @# u
vItem.dwKind2 = pProp->dwItemKind2;
( o7 K5 D7 t3 t+ U5 d vItem.dwItemId = pItemElem->m_dwItemId;
8 H+ J( Y# }% y( V Q vItem.nIndex = i;
# M- O; Y6 G* X1 x9 Q }
9 z3 ~8 [7 N/ y: A8 t3 @/ d" t //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);8 \" W5 ^. o; G8 T, m0 }! y
}' f7 V7 Z+ i+ p) K
//////////////////////////////////////////////////////////////////////////
7 i9 S- ? T3 i% c$ I6 @ sort(vItem.begin(),vItem.end());//排序/ G+ U7 p, v$ F
//////////////////////////////////////////////////////////////////////////
: m1 W) [- ?, C4 f/ ~ //交换
. y% Q8 S# u, O6 x" Y3 \" C7 A/ W for (size_t i=0;i<vItem.size();i++)4 n+ W+ K' g) P R4 I
{
9 M4 {4 ?0 _. R4 G8 s* T //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
* I- x3 a) p J2 K5 Z9 T7 w% y pInvSort->Add(vItem.nIndex);
0 a% {5 m# n2 g% K8 a: S* j2 i }" H4 u3 t! q/ m7 ]" ?- e
BYTE nDestPos = 0;; p) d/ B" Z2 h8 A
for (int i=0;i<MAX_INVENTORY;i++)- B3 k9 P2 F2 }2 W5 J0 H2 x9 o
{' L: k+ L( O0 |+ |$ E7 r3 Z4 `
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);: ]9 X2 ]8 x2 X& C% Y$ K; g9 N* p
if (pItemElem)# d& p3 E2 w2 L
{8 J- ~+ Z2 X1 v( N" E
if (IsUsingItem(pItemElem))
+ p9 a2 s, G7 g2 L' g0 P {
3 \3 Q4 C4 a B+ M+ A/ ^/ K; A //这个位置无法放8 ]1 B1 I. |& H' Y1 u& ^: W
nDestPos++;% A4 J+ H `. k) h5 x6 ~4 c
}
0 e2 c$ Z1 _2 L0 o- T% G4 d9 f5 E }
# L5 E5 G% J( W( F# G$ U BYTE nSrc = pInvSort->GetItemSrc(i);: W9 m y1 b7 r2 p' L) Q4 |! [: {
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);+ v2 }" R5 ~& W. ]: g. U* a
if (pItemElem)
6 H" E* \ v' p4 p( ?2 Y {# C5 [! T0 Z- y) n# _5 K- q
if (IsUsingItem(pItemElem))2 U) V0 q- S& O! J$ b6 |
{
0 u6 L) g" Q! d* v8 n //这个道具无法移动,跳过
/ l$ U% I/ m! f2 G- i; A' A continue;
( B* N6 \/ J' w }
+ D( y3 G: d9 i2 h% j7 Z, G }else{
]9 H0 ?2 A; a M //空位置 不用动* L$ P8 }( H2 _) L2 ]8 w
continue;
) L" G9 L% L' ^6 S% e6 S4 o7 h }) _# _. ]$ z9 H8 b
//////////////////////////////////////////////////////////////////////////
1 B9 j o" l1 L1 A4 I) K //开始移动
8 N0 i. P: u. N$ m7 @2 L if (nSrc == nDestPos)7 U% W! Y" ]* k$ K' n
{
. l2 p8 L% R9 Z. V* e i& m& c //原地不动. Q) E: C* e' s/ g( T& N" F2 D& h
nDestPos++;# @0 U3 n. c$ k* v* `/ Q
continue;
% A% \4 {' }# d. A }/ f2 [/ N& _' c, p
pInvSort->MoveItem(i,nDestPos);
3 f' R/ s/ J: I+ {; {0 g4 c( j* d g_DPlay.SendMoveItem(0,nSrc,nDestPos);
: w+ n( Z3 S1 g" | Sleep(5);
0 U) K% W" ?# G2 ^: r) ~: I //Error("移动 - %d->%d",nSrc,nDestPos);3 B, h, Z& ?# Y
nDestPos++;
) n6 L- I; w0 X/ u9 R }; m& B |0 ]0 W N2 O! ] E
//取第一个元素的信息
( K B2 P# W; x% e1 ?% z /*6 Q, z# t6 q2 y$ w; E& R% X/ w. Q: W( G
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
" b7 B' f* z, E5 J! `! u3 V/ q {# `1 R0 c& z+ Z8 o
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
3 ^* [( J9 {; v) v+ e$ Y g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
" E: n4 ~1 _4 R6 H2 o }7 v- w" i, j& q' X
*/2 E* ^) K/ @+ O# f! c
/////////////////////////////////////////////////////////////////////////// R o4 _, s+ Z% S# L
break;& g4 o% r$ }- W. @3 |' j/ ^
}
" u! y9 k) T0 a }
7 B% ]2 Z, @ J6 u9 o}* ~1 X1 n( u4 }7 h/ n2 |
m_wndMenu.SetVisible(FALSE);
2 Z8 L1 K5 Z1 s) B& G D9 @5 k1 v5 n: J
--------------------------------------------------------------------------------------------------------
! Z [1 N( E0 _! h/ J9 R R, b7 Z搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point), Z0 k1 |* D5 g
{3 f `1 u! b0 D5 o8 K
BaseMouseCursor();
" I* x" |. c: }! K$ ~) I}
+ @0 P6 H- n/ \: C* t: s9 [1 [在其下添加:9 A3 L* F# L3 X0 T; |
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)( a5 x; o) F# w
{
$ j% H6 `) j0 O9 d5 xm_wndMenu.DeleteAllMenu();5 G5 e1 Q9 D" o& Z* z7 J
m_wndMenu.CreateMenu(this);9 d4 c- o" k# @ X
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
+ k8 N6 [# X7 m; c6 c0 y/ E2 p' m$ x* q& x
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))! o" i+ u# K$ F2 B: Y
{
9 O5 l$ i4 Y. @ Y2 B3 j5 |/ {7 L' q //P以上级别才可以删除所有道具& ]* v6 y* X. p! D( Y3 g2 o
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");$ ^4 G5 o1 v+ m
}
7 S! y8 l7 N5 e& j1 D% g+ }( z1 D9 Sm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );9 K+ R& M) [6 [ x/ |
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );( c; |& d' c5 y! m. Q# D7 @
m_wndMenu.SetFocus();
+ c' q6 M( f: t3 ~# H& |! B}2 T( d+ \+ c$ z1 u5 ^
------------------------------------------------------------------------------------------------------------
" ]/ N6 I5 f9 X- P3 `0 I6 \6 p*************************5 a+ J0 R6 i9 W2 a% ?
WndField.h文件
2 }7 z0 V! j8 S- [& [2 e$ D*************************( A; _1 L0 C C3 I+ ]
搜索:BOOL m_bReport;
* c/ l' ^+ j( R) |; C& \8 {5 A" G其后添加:# y% h: W/ Y/ L5 K
CWndMenu m_wndMenu;
! R$ i% i1 y! t3 ?& b; T" r3 Y搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
# R! x" q$ k& h' {0 \其后添加:
/ [2 h7 o; E; I, X& o: a2 J2 A% vvirtual void OnRButtonUp(UINT nFlags, CPoint point);
0 B; H0 O+ h) V7 m" T4 m
* u$ u1 y* i8 @" U4 B+ I. r0 W+ T
7 j _: f7 d9 s" V8 R4 V8 N+ z |
|