|
|
源文件中_Interface文件夹下WndField.cpp文件
. @6 @ K' m$ G: X" q/ T# `搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ) ?8 l$ g; {0 a
# f' G# R5 B) w
struct sItem
5 T1 x {6 V, V5 t% ]{
# ^7 X, X- R( B) x0 DDWORD dwId;
& `5 l$ y7 [& A9 LDWORD dwKind2;
& s. M/ _! o& w( P7 D: J- W' C/ K, oDWORD dwItemId;- _* ~* S+ r3 Q5 X- r
BYTE nIndex;$ Q' W3 o$ |" `/ x/ K. m9 G9 O
sItem(){; G- P* n7 I# }7 O& V$ W
dwId = dwKind2 = dwItemId = nIndex = 0;# L0 ? a) _) [+ k7 e7 r1 R2 ~% U
}
6 h q- V# h) R5 kbool operator < (const sItem p2)
z/ J( O2 @* r5 I{, N1 e5 h( A6 N; d b2 p
if (dwKind2 == p2.dwKind2)! @: A% v0 }: v, j m
{1 ]* F# }* v2 p. x
return dwItemId < p2.dwItemId;; X: t1 h" L2 `9 F6 x! u
}else{, i0 E* z L( K
return dwKind2 < p2.dwKind2;
, U4 ]; l0 p! `* G+ T4 o; q }
. N* } g' f/ P3 P! _' I- v}3 g- T6 c \5 w" G& u
};! `! P: N2 C }& {- S, e' V- z
class CInventorySort
: P# x+ s- v, U" W, P. e{
. T5 p0 f* Z- g* M3 W- tpublic:- g) N( Q* E/ M
CInventorySort()" j/ M% G, x% R
{$ O4 e- q9 |) b/ O( L1 l- G" V
m_dwPos = 0;
, i* V% K1 U# C2 e$ [7 Y; D8 [, b" s}
) D$ c3 {7 d+ X4 q6 a~CInventorySort(){}/ H% E: N' R! S( i7 A0 s
private:
3 A3 U) v1 Q% m. o4 h. ssItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
1 n- r& Y/ M9 P7 t8 \DWORD m_dwPos; q& C$ D5 b# x
public:* \3 x- [4 u/ _. D$ \( \
void Add(BYTE nIndex)
4 ]! h9 r/ H% y5 t1 y{6 b! h9 I) _& N- m
if (m_dwPos >= MAX_INVENTORY)- N$ [" g0 A; n8 f
{
& b+ [, u2 G w- O* C return;
5 t# S: |% Y* \3 j2 b }8 s% c: t8 X; e" o: k( B9 B
m_Item[m_dwPos].nIndex = nIndex;
y5 R* X! v0 \# q m_Item[m_dwPos].dwId = m_dwPos;2 H) k6 ?6 [( Y: X
m_dwPos++;
7 u# u% r7 w2 I7 ^2 m}
( x6 Z8 a: Q X/ X/ e0 @0 j7 q+ |BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
0 O" V0 B5 M* K{5 r1 s. F; E4 E$ s$ ^
for (int i=0;i<MAX_INVENTORY;i++)+ K, o$ E5 ]& x1 \
{9 _( C0 {2 ]& ?+ z: F
if (m_Item.dwId == dwId)
, V1 ]3 {1 }9 R {
5 D. ~3 E% |: @; L7 j- q return m_Item.nIndex;
N' L5 x3 M O1 C3 R* L3 W }
! B3 n4 }7 M' ~7 c7 S! p }
+ o, L+ K7 j5 \ return 255;/ \4 Q# w6 n! h5 {' o6 ^
}
. u, s# t& W: u. [void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
1 o, R. }& J2 j0 B) k- G/ c{. B( Z2 N* _" A8 Y9 Z$ q
BYTE nTmp = 0;, A2 s$ [- b3 w" Y
bool bDest = false,bSrc = false;
: [6 P7 \6 M) M5 W1 O for (int i=0;i<MAX_INVENTORY;i++)
4 i! z3 T0 z" A9 k {3 V+ g) V" ` m' `0 O) o b w) `2 d) a
if (dwSrcId == m_Item.dwId)
' b4 C* w) [2 L4 T$ U+ d. L3 G, r! i {
! [9 m0 y: {# B# F1 w( d //id相等 则 改变对应的dest和src$ j0 } \3 C$ F* o
nTmp = m_Item.nIndex;- }- i, u C. R6 u$ K! p8 i
m_Item.nIndex = dest;
7 Y. E* b% m8 A8 r$ }6 R+ U' C) r }
) G- ^* ^% w& \% o7 [6 ~1 j }
$ t4 B2 F( s, J- M5 u //临时数据保存完毕,交换开始
& P1 K$ X1 X& T+ ` for (int i=0;i<MAX_INVENTORY;i++)
* B& b( q3 D3 G3 {$ A {/ n {
% l- _5 `0 _; T) M6 i9 m1 f if (dest == m_Item.nIndex)) {2 L% @0 x- X: ~. h. N4 h7 H" y$ w$ c
{5 [& P% A, ]6 R- o0 o" J
//id相等 则 改变对应的dest和src- o( Q( P/ U- O3 t3 [
m_Item.nIndex = nTmp;, A6 W/ q4 ~0 i# w. H l$ T
}! ?- V3 u! [% _" q
}
$ ` p% Q4 V! I- w) H}! u$ Y- m1 G3 b( {- V
};$ P3 k! Y ~4 H7 L2 s( c
-------------------------------------------------------------------------
1 Y2 L/ e9 g& Z$ N6 [依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )1 I& ~5 ~+ {2 Y* N I/ [4 o9 I( z
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
& b8 y5 y& e5 `8 N7 Y紧靠其上添加:5 J( E5 V3 \* M; u& ]
if( pWndBase == &m_wndMenu )
& y6 g3 z: O7 f2 ^9 R{5 |; ], o) `* T% W4 o
switch( nID )3 x0 O d& l5 Y' D* @
{
+ ^' e- F8 l5 p case 2:/ ^" F4 s" {- a5 S' v& U$ v$ ?
{- t, J# z( D. G7 m7 o/ f* a+ P
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
0 y9 @7 a& }( `3 T if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
u& e2 v' M9 ?' K; C {( x {: `# @6 p3 Y$ f/ j
break;" l: R* ] K1 i+ x+ d
}
8 B) f/ `8 R. V7 _ for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++); m8 Q! O, V* k- z7 \8 k2 `
{
; q3 M3 m- N7 D1 y) N% ?. g CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
, E6 c) f" ]+ r9 N# @ if( !pItemElem )8 e' o! C/ l3 F& ^
continue;
* O% J" ]5 I6 f! }! H% Z, i if(pItemElem->GetExtra() > 0)) V4 }; n& M5 q
continue;
6 M9 R1 x7 Z" I8 L( S: V if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 4 }8 f0 B, Y5 P
continue;
Z1 t+ _/ P& \6 O; L; R F5 A if( g_pPlayer->IsUsing( pItemElem ) )
6 S: g& o% _. _8 c6 ^( W5 \/ ]+ |; y continue;6 m# l% P/ p# g. b
if( pItemElem->IsUndestructable() == TRUE )
9 r! z; z4 n m% j9 l) I6 g {9 x: Q! b- u# W+ q2 I4 K
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );2 F- k* a6 l4 i+ E/ ^
continue;2 e, r+ h; ~4 i/ ?. O6 b7 N
}
4 Q& U6 B9 v' g `6 f V7 t g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum); b: B9 E, Y% N: s# d' ^* V3 S
}9 H% _. L: o z+ h1 P7 p% Z
break;" h e9 v0 X6 e. v% T) l0 G
}
: L/ F* |6 u5 n4 D case 1:
' b* h( o8 R6 K: z4 H1 c {& _* o# D" U; r4 t8 {8 X+ j: ~% w+ l
//整理背包; R, p4 f4 m* S5 X
//////////////////////////////////////////////////////////////////////////
/ T( c7 _, V% k: N //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );+ i& l% T- S3 J# P ^% l
//////////////////////////////////////////////////////////////////////////: r& C5 v [" ` N- Y
//////////////////////////////////////////////////////////////////////////0 n8 l, c9 U( c6 g7 @1 s! _: H
CInventorySort* pInvSort = new CInventorySort;
- M/ Z2 f1 i8 a8 S/ E vector <sItem> vItem;. Y, \ T ?5 B* Q! t( s
vItem.resize(MAX_INVENTORY);//初始化大小
! x3 _9 @( ]# q7 ~; b //////////////////////////////////////////////////////////////////////////7 {) q; }8 M1 L3 o7 w) |; T
//填充数据
7 k) W2 ~* w( d q7 E for (int i=0;i<MAX_INVENTORY;i++)
$ W3 `* c/ E! I% e {2 E( U; |" W4 s9 b9 ]6 p# f4 T
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
- R E; G( {7 e O- s% ]. t: ~: M if (!pItemElem)
- Q$ d% j8 I% t, V1 a0 w. @ { ^- q( M) z* m: l) T
vItem.dwKind2 = 0xffffffff;
9 w3 u! A. U6 [ vItem.dwItemId = 0xffffffff;7 u+ t- y1 J2 F3 j' S2 M
vItem.nIndex = i;& f, t) F9 R- n1 \6 o6 d% t2 p" s- O
}else {
3 Y1 Q0 w3 Y- A! v5 r. Z ItemProp* pProp = pItemElem->GetProp();$ \* D) E' e+ |1 g* f9 l: g
vItem.dwKind2 = pProp->dwItemKind2;
b( Y9 a5 V$ Q: i vItem.dwItemId = pItemElem->m_dwItemId;0 T( V7 A9 `1 W0 ^- l% n
vItem.nIndex = i;
- |% U/ b) e7 L8 [% v: ~ }: Y0 Y% o, a4 @9 A# z6 y( i
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);8 |5 Z$ x4 Q+ \2 d
}! h4 v* A9 U/ |( n# B" [
//////////////////////////////////////////////////////////////////////////) [: C+ B3 ?" C2 ~, F0 z
sort(vItem.begin(),vItem.end());//排序
! N/ E" a/ p; P* e% ]8 j //////////////////////////////////////////////////////////////////////////
, _/ u- ]6 g2 G* X- U2 n' a //交换3 k- [9 e P5 s3 V
for (size_t i=0;i<vItem.size();i++) C! A! X) |- p" Z$ A* D$ d
{
) w% M1 `; c+ I //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
! e) Z7 E# p" H+ c* t pInvSort->Add(vItem.nIndex);
- G6 }+ I$ b# Y- p7 l }
; a' Q, ~) u/ |9 g BYTE nDestPos = 0;
8 Y( w1 ?6 o' } for (int i=0;i<MAX_INVENTORY;i++)
6 p/ b; N5 p* D7 p { i; e3 M8 u& z/ @
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
2 o9 |4 P9 D/ \9 }4 i if (pItemElem)1 {( h' v) M3 n$ e( n
{
3 O' x# q) X! B4 a+ J if (IsUsingItem(pItemElem))
; U* B3 [* O/ }" d9 P6 \ {
- d$ z- \4 _* e7 W, o7 |. Z4 D //这个位置无法放0 W# J6 i9 m. g' \5 D ?; |
nDestPos++;7 F" Z% X7 e* x* v
}: L, y' R: k d' l( c
}& |8 H! o! V( D& N
BYTE nSrc = pInvSort->GetItemSrc(i);9 E8 w; b0 o" a g
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);9 E) u; [! F8 W1 {0 P
if (pItemElem)0 J# A5 g. H/ ?9 W7 ]$ w
{8 L# [) i# i/ m1 U; f: J" P
if (IsUsingItem(pItemElem))2 G. ^* |# r* R- P
{5 s9 I& `7 M+ \4 ^# S+ N
//这个道具无法移动,跳过
) x( ^2 u; j; X k2 }0 g9 j- Z continue;
6 g$ L L; _# s# ]# e& ~ }
4 M4 X, y; O/ o1 f. V }else{
5 X5 v* ]& Z$ p3 ]8 c; b: ~ //空位置 不用动
) P; j0 a8 V5 C3 X% G continue;9 r$ o" f. N% ^* f/ M6 a
}" W# @5 [* L$ Q9 } E
//////////////////////////////////////////////////////////////////////////' B7 w, N" u5 y, z2 B
//开始移动2 Z# m/ r$ d# x0 d$ L: R
if (nSrc == nDestPos)* F1 M2 G3 z3 n0 }% Y' r
{( x3 j" Z* i1 A5 i
//原地不动+ f: f( _$ M) z; m! ^7 E
nDestPos++;4 @& Y( i P$ Z' f
continue;: V( I% ~3 f# ~* ^
}+ P1 h0 u' m( b* C
pInvSort->MoveItem(i,nDestPos);
' G: M8 ~ u6 J9 }) f g_DPlay.SendMoveItem(0,nSrc,nDestPos);
* j; }, r) l, |1 F Sleep(5);
/ a* {2 B; E0 O# P //Error("移动 - %d->%d",nSrc,nDestPos);" l% K) M) ^! V- e7 A9 ]# q* u
nDestPos++;, s8 I5 x* W* O0 t( s9 Z
}
5 l9 x% p$ G& f7 H //取第一个元素的信息2 d$ {) C7 _. g$ s/ ~, f
/*
" D9 n1 y8 ~7 @3 S! b" | if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)6 N; s. n8 `' Q( c
{% a1 e3 U4 B3 c5 w/ D7 `' q+ R
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
8 c! a6 E! ^5 i4 D g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
, C# y7 |" _, p0 p$ [, k ^; Q& k2 H' U }
) F) T2 X) [ i. f */
/ d' G0 Z, y# O0 C //////////////////////////////////////////////////////////////////////////& s2 {; |9 ^( u' `' ?- P
break;
1 A( P) P, ^8 k( v% @, Z }/ W4 I) p; C$ ~3 A
} " y. @0 }$ O9 a* z Z7 T
}! M/ J. \2 F( o- L; z v4 A
m_wndMenu.SetVisible(FALSE);
9 s: \2 f0 z: K& Z, J& F
7 I( r- \9 G. T7 C# U& T& w7 `: M! F-------------------------------------------------------------------------------------------------------- N* a! W1 d% E7 ~/ G
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
) L4 k( e+ Y w. ^{
; \4 p4 F4 P$ `+ U9 X. QBaseMouseCursor();
5 S \. |" F/ L}# e! e' { e; H2 K
在其下添加:
4 r# \; ~4 J4 G) @2 Pvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
( Y! k; n$ q+ U0 x6 {7 W% I{
5 Q9 ~% ^$ r# z( b" n% ~0 m5 ?m_wndMenu.DeleteAllMenu();
# N/ g! x0 S) t, Rm_wndMenu.CreateMenu(this);3 T% [+ c v# U$ x1 q9 S
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
, e. t" t3 F; [; }3 P
8 \ s. }4 \, y+ `7 eif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
+ r1 {* s$ v' G/ i* B{8 {% }) Y( L1 y1 q9 \
//P以上级别才可以删除所有道具
5 |& Z3 o5 z( q' U s m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");: e2 Z7 U9 f( e9 l2 S
}
8 H$ W6 f; L+ Z! a Q: Em_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
5 m1 A/ Q# R8 L9 fm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );* K3 c' D% o+ f" S
m_wndMenu.SetFocus();( v8 d+ p$ A# n# U! E+ R" S3 x
}
0 {7 |) n. l' v( D6 Y$ ]------------------------------------------------------------------------------------------------------------
/ r; ^, P4 A; D, t*************************8 b7 `1 U6 N* o- W# v; W* Z( U3 g: c
WndField.h文件& X& @9 L! c, H0 J
*************************0 i) S6 `" x( M( U0 Y% B: Y
搜索:BOOL m_bReport;
6 V% B, C" z7 x9 c7 c2 h* |其后添加:2 \3 ]3 ~7 D6 K2 z
CWndMenu m_wndMenu;
) Z, I2 S: ?' |4 }7 Z) C搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);2 \9 P. O! w) E4 h9 O$ u& V- g5 b
其后添加:5 B7 m4 m: t5 q) k/ {% R, J$ g
virtual void OnRButtonUp(UINT nFlags, CPoint point);; ^- i& b3 {) z; U0 N
* \) n O4 o3 Q4 H# i
% K A4 Y6 ] M9 c9 R- U' d% X
|
|