|
|
源文件中_Interface文件夹下WndField.cpp文件
4 x/ q, k7 |1 n& s6 d搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
2 Z7 R; b, Y. t0 k$ n4 N: p
+ D3 y6 u* q- ~& Lstruct sItem
~2 H9 V& _! a+ o. I& G{
5 E. X/ Z5 R# D# W0 `" H% R1 gDWORD dwId;
8 g5 P$ x6 b3 A& ~6 q0 A& E" \DWORD dwKind2;
; g# G0 r: K1 V. B: j) f. aDWORD dwItemId;
' \" ?1 E' H4 j& t: E* w+ s8 ZBYTE nIndex;% H6 ]3 h& U d1 o& P: w! m
sItem(){8 A+ r1 ^3 p/ W
dwId = dwKind2 = dwItemId = nIndex = 0;; a, Z0 G( b6 T# @% F
}- O2 S+ {, V; E+ o9 e* U3 P
bool operator < (const sItem p2)
; Q$ N& ~: \# ?/ Z$ H' S; q{
; ?3 l' S; a, B if (dwKind2 == p2.dwKind2)
) _1 p+ _+ m; A0 u {" V7 X. ^9 h1 @( h# E3 ~! e ?
return dwItemId < p2.dwItemId;
. w# V* N/ P; b3 n, X6 h- t }else{
0 l; w5 n+ e T) r$ d return dwKind2 < p2.dwKind2;
n n: a" t, A. }9 ]) W }
V# p8 F1 u7 `/ [2 j" a}' ~7 g9 z9 S' A9 O
};8 ~3 o' n0 O$ O8 j/ M: S7 U" x0 j
class CInventorySort
/ D$ y- W& [4 `" D) N{& U: [8 s0 ?, F3 H" M+ Z
public:1 |6 R5 G, x7 H# R
CInventorySort()
' H0 t r( {" w{
s3 p* \- Q. p" K# Y; S( J2 G m_dwPos = 0;
( z: a- V4 L1 O, u) m1 v, n$ J}9 D2 J& ], j$ A) D8 @8 t, q
~CInventorySort(){}
' B1 E) j. Y& `# Mprivate:
$ w# Q) B5 T4 k8 n, v* ksItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
; {- F6 {! ?' V0 a+ oDWORD m_dwPos;, r; T2 a d1 a
public:
& O! Z; n: T8 K/ ~void Add(BYTE nIndex)# a1 J8 b: S" E1 B8 \7 J+ Y
{1 w: |, u& ~# _. F% O# L
if (m_dwPos >= MAX_INVENTORY); D5 ` W1 j: u' `) N) N
{; r! R2 c P% A( M
return;
7 b9 t& a L& a |: ~ }9 I: w8 {0 c H' F& [
m_Item[m_dwPos].nIndex = nIndex;* P4 s ]4 T4 [9 ^3 Z/ |' [/ s
m_Item[m_dwPos].dwId = m_dwPos;
. a$ }& T3 b& T" N: o' B0 O m_dwPos++;
/ O D2 _( q: T6 E7 b. p}
0 Y$ K6 [, n9 a; f3 Z% dBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列- [* X- X" S/ b6 t9 q. z; B8 Z
{: z \# r4 p1 q" Z* j3 _! i3 D
for (int i=0;i<MAX_INVENTORY;i++)
! k, k/ c& E0 f {
& H. v3 |+ P' Y% s U2 Z$ a9 a* G if (m_Item.dwId == dwId)
, ~" M% n( {( C2 ^ t4 s5 o p- y {: O- R V$ Y+ V3 a6 G' T9 W
return m_Item.nIndex;
8 _! j) V% \4 b7 `) G. x) j, R }
8 A0 ~2 o% H& Z }
' _" x" d1 S V return 255;! O4 A/ W4 _* n: X& s# l
}8 r% D4 F0 u$ {1 R' S- {
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置% ]* B# s; Z. E
{
& R7 ~( S% G9 w9 [. h BYTE nTmp = 0;
" u% C$ e C2 g+ _) p( [/ y0 L bool bDest = false,bSrc = false;
" Y. G% S$ }: j* x3 i for (int i=0;i<MAX_INVENTORY;i++)
& m- n' J+ }# A& J+ f. N+ H {$ m$ F7 Z0 T5 O1 S" A. _% @" |9 C
if (dwSrcId == m_Item.dwId)) F7 ]" Y$ f3 [: z/ V* j6 U
{
+ [% [% ?2 ~$ P1 p: X //id相等 则 改变对应的dest和src
0 ]( \: [5 S( w A nTmp = m_Item.nIndex;& b' z4 {, k) z" o: n
m_Item.nIndex = dest;% i) ?" a3 u a5 F
} `% f A7 _9 E4 L* c; Z4 L3 V
}
9 I- H2 E* j7 _) x( X0 C //临时数据保存完毕,交换开始
a$ J( D4 K2 y4 X: K for (int i=0;i<MAX_INVENTORY;i++)& B0 r; _2 M, h* c9 _$ q
{" `( N+ ^) c4 r f( w
if (dest == m_Item.nIndex)
s* f1 a+ y- e {. \1 q# [3 Q8 `9 ~2 j. P: c0 s
//id相等 则 改变对应的dest和src
' T3 h5 p& P9 q1 J; J m_Item.nIndex = nTmp;' s$ P, K8 z% {9 {1 R) ]
}
4 |- ?1 D9 Y3 c7 b7 b }
5 b1 q% d! a2 s6 o+ n}
0 `- v$ w" [2 ~. Z) F};
- Z# X- h7 |. S# ^) S-------------------------------------------------------------------------8 `! ~5 c) ]: v3 V" y
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )0 ]% I# }: p; G& ]/ ?+ a
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
9 A8 K4 j0 C9 q5 ?: Y9 O9 y/ K T紧靠其上添加:
" F8 z2 e0 \ U; L/ e( U: t0 Cif( pWndBase == &m_wndMenu )
5 _6 e& S/ V8 z9 r( i{. ?0 ]' Q& K' i' F9 B' p
switch( nID )
; N. Q' A8 r" _ |. s* X8 { {
; y D7 `6 q( P+ u case 2:6 E& v$ R1 _: g+ {7 S1 R4 r
{7 }7 P6 f$ W- I+ f
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
. b6 p, V* T1 r# D2 M if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
. ^" h. A# E& x @# `" O { k" }( h: q. W# C$ x, M
break;7 V+ r! {2 A0 ?: X: O
}. w1 _, U: u% ?
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
9 B7 v% z, k- J) @ {
5 F$ O; U' j6 P0 s: t CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);" @6 H; {# G" u% N' b
if( !pItemElem )
1 B1 S2 e9 t; X' C" v continue;
& d% ^ l8 q% {9 A1 Z1 ~ if(pItemElem->GetExtra() > 0)! @& Y; _+ ^ g G2 Q' ?8 B
continue;
& J+ t! W# s, S( Q; U4 G. k R+ g% D if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) # G1 e; y |# L# \
continue;
& D, i2 f5 Y( ^ if( g_pPlayer->IsUsing( pItemElem ) )5 x* ] D! m! t1 u1 b! r
continue;& Z1 N- w8 t6 q: ^
if( pItemElem->IsUndestructable() == TRUE )
4 e6 Q5 x" A3 Z5 Z {$ o: l% Z3 o( ~& f( h' f" A1 Q9 ?2 u
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
/ d0 B2 P: C2 i' p continue;& B# { G, O. N ^5 S
}
4 {, `2 Z' a; o g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);) G: m+ |& ~. m( d. N% Q% y3 |1 f
}
$ i9 b- \' o; R) x c break;4 Z d3 o0 e; P$ _
}/ T0 t( U8 Q/ p4 P2 e# u, q( Z
case 1:- b z! Z9 }( q
{3 u2 H$ S- w) ~& Q, t
//整理背包2 M5 \1 t1 `5 e" J( g4 q/ P
//////////////////////////////////////////////////////////////////////////+ z/ \0 a6 E; A# P, S% R
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
; R4 i9 y. b7 _2 ?" K- a& F //////////////////////////////////////////////////////////////////////////
* m; n3 l% s* p+ M //////////////////////////////////////////////////////////////////////////: ^9 m* M6 _( z
CInventorySort* pInvSort = new CInventorySort;
0 W3 J( G, n9 ?% N M8 y8 @9 P$ n/ \6 q vector <sItem> vItem;% a0 n$ u+ g5 F: D( c
vItem.resize(MAX_INVENTORY);//初始化大小
/ x/ b! I# F" K; _8 { //////////////////////////////////////////////////////////////////////////
/ Z- ^ \* h- X. W2 @ _# s //填充数据- q9 F# M% \: o4 F8 @5 I" H; q
for (int i=0;i<MAX_INVENTORY;i++)
3 p. Q" j1 v1 A T {
x0 y" r/ J6 W9 }/ q CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i); H. @% Y! j: w5 H, [0 X0 f3 M
if (!pItemElem)6 d% ] P; n# Z* R. ?& d: @
{8 p3 n, J3 m# I, Y9 [- n
vItem.dwKind2 = 0xffffffff;% M4 ]1 Q; C1 s$ B8 b6 }7 |
vItem.dwItemId = 0xffffffff;
4 Y \; \# |- _, [# T3 r& X; z vItem.nIndex = i;
( C. O7 W2 f$ r0 M/ y, A }else {
9 B$ j8 @/ o' O" Q. i$ i ItemProp* pProp = pItemElem->GetProp();, n; B+ P3 D( O* R C: C1 D; X
vItem.dwKind2 = pProp->dwItemKind2;4 G0 r% y, T7 A7 d# T! z& y7 k
vItem.dwItemId = pItemElem->m_dwItemId;7 g3 ~ o* [5 V+ B
vItem.nIndex = i;, J" n& ]$ a; _5 _; w# `* E
}2 O" Q4 d, m0 F# Z
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
& T m6 d% R7 }+ k( D }
# u. O/ U( V: H+ R, u% r# Z* W //////////////////////////////////////////////////////////////////////////) Z3 z4 b- \) w8 H* J: M
sort(vItem.begin(),vItem.end());//排序
* N5 Y$ f; r' D7 M/ C //////////////////////////////////////////////////////////////////////////# V4 R6 D" K) L% q# u/ C
//交换
3 U# \/ z$ P$ C7 z) w2 R for (size_t i=0;i<vItem.size();i++)
2 ~% `1 K s7 b7 k {5 T; z6 ]1 g5 ?7 z
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);/ w: A# [4 Y9 P* N* }$ R) y/ |1 h- D' t
pInvSort->Add(vItem.nIndex);
- r \. g: k* t: }( G: q: ^. t }, ^5 m! h6 }6 r) P6 I) x
BYTE nDestPos = 0;
: x# _5 Q5 q8 F0 w/ Z9 R/ H for (int i=0;i<MAX_INVENTORY;i++)- q6 a5 G9 q$ d& h1 |" x* ]
{% w0 {- C. R& \, N
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
, W8 d! Y! S8 O1 z if (pItemElem)
0 e9 H V$ o8 }' A* C {1 x* V+ \( H* o6 ^$ V
if (IsUsingItem(pItemElem))
/ E [! z; e4 u {* h/ w0 q8 k$ H" i% F* ?
//这个位置无法放: N1 a* k- J6 C5 Y
nDestPos++;) I- \8 V* U' \' F, u2 l4 K
}
- T; }6 p; ~. z! j$ ` }6 L4 R' _, Q7 D+ p2 j
BYTE nSrc = pInvSort->GetItemSrc(i);
- }/ g+ H9 D% o$ m+ _$ b/ _ pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
. d# o6 M; w6 W( [. l if (pItemElem). ?8 a; a2 [9 G* o
{
& Y0 l, k: C- A b4 P, o- Z if (IsUsingItem(pItemElem))
' M* A- J& @( U. J: C {7 B% Q2 U' ^! I
//这个道具无法移动,跳过8 {( A) |" }, {4 n. V- t
continue;! G$ H; e0 B6 U" q: U
}2 S) M- Z' R/ u" v- m
}else{+ `3 m& x7 ^! V$ \
//空位置 不用动
, V/ S( O3 I4 g1 M! F4 h2 ]3 B continue;" q) i; J6 |7 s. F1 U
}
: s* R4 v. [* h" |, {& b3 j! c //////////////////////////////////////////////////////////////////////////
; V6 _1 P% W3 T: k+ F/ F2 m9 S- x; Z //开始移动
4 R% N/ k* @$ p/ ` if (nSrc == nDestPos)
# H ]+ l( p; H; \- J0 R {
6 U0 P, w w3 ^ //原地不动
9 i' ^/ I8 V0 W4 f nDestPos++;1 d) P0 l( B) ^; {& C
continue;
* k4 Z+ M1 | l `) ~ }" ~; G; C! M- |2 [3 g: ~" }
pInvSort->MoveItem(i,nDestPos);/ ]& g: o- w+ p( h# y5 q
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
# m. Y/ p) ~: d9 l% o# z Sleep(5); ^, K+ ]0 }8 v; \7 d: j
//Error("移动 - %d->%d",nSrc,nDestPos);
4 @) h5 t O7 G* @ ] nDestPos++;
& m z2 @6 m; ^2 t$ z8 v6 m }( W" L% C' `7 J/ J) k: T: j1 E
//取第一个元素的信息
5 ]& N6 Y4 j* e- u /*
) \8 d3 o: R4 n" _9 O; o if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
/ e, j( d" b1 v# e0 G4 B0 O {/ Q% `' G* e }7 {1 M+ ~
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);* o B1 |; \9 d' m! j' X
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
$ }- R- m U- s0 L- [2 a1 I) | }4 x3 G3 B, r0 `- h# f0 k
*/
' h F/ w5 v! @, { //////////////////////////////////////////////////////////////////////////
8 k( Y ]" k B. s; ^' L* e break;
6 B. m' x4 q* p$ d% ]7 V% j) w+ Y }
7 [) e! }% {+ ^+ ]6 | }
; t, b0 f- n0 s7 g7 q}
5 Y% L. V' i( p# T; U) b1 o0 ?m_wndMenu.SetVisible(FALSE);
* y u9 }5 W2 ?" [0 \' ?8 L( S0 p' t' Z \3 V: j# S& v4 ?! E
--------------------------------------------------------------------------------------------------------- v5 r A# v: X3 b" [
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)+ l K5 b) p J9 S* B) K7 w& R
{
; n0 T! `& n' {( m1 k, ~( j1 tBaseMouseCursor();; R, w8 r7 r+ V% l6 B e; s
}% ~, U5 j6 f- \! l& n. Q0 i
在其下添加:4 f- t( B3 U1 ]* y( L' N7 o+ s6 t- [
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
+ E; ?3 V' e1 j: ~$ k{
7 |/ Z9 y# W; i8 M" \+ }m_wndMenu.DeleteAllMenu(); f; y0 A3 {4 j' h9 h. o' z5 {
m_wndMenu.CreateMenu(this);* u1 V3 M, k2 I3 K& U# h% g
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
3 H( V1 T4 G) S/ s v! e/ }3 n# `8 S& \" Q5 C- }
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
" Y" ^5 j! J- `" l; |7 d) I{, @% r: n Y- V- W0 L3 R5 |& d9 H
//P以上级别才可以删除所有道具3 u; n7 x P8 B0 w! M
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");2 d; H$ S4 j- R; t2 R. R
}/ A, z' y) `3 w
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );0 {. A* q; c m2 D
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
3 v. Q% ~5 x# Q! ?m_wndMenu.SetFocus();% Z3 w4 w. j' k9 f1 W+ F
} o1 l9 }# m7 @/ i: v2 s% b# _
------------------------------------------------------------------------------------------------------------- K. i, |/ b' R. h' t' F( x! O
*************************+ S6 o9 Y0 ?1 m/ p+ O9 R4 g. n
WndField.h文件
* k; n/ Y6 ?1 k6 d*************************; w0 K$ V, V+ L& I
搜索:BOOL m_bReport;
3 W8 V3 {# \* `5 M其后添加:4 G% P" f1 ^! B8 Z
CWndMenu m_wndMenu;
" Q, I7 C. z* {3 k搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
7 ?9 k* w5 Q( ~( `其后添加:
; T6 w, j3 z% M# Yvirtual void OnRButtonUp(UINT nFlags, CPoint point);: Q8 A3 L" x) b& i5 c% {& \3 C
5 c2 H- I0 }0 W2 h' J& L% ?: G; l
4 ~0 A7 y$ _2 \ A L F |
|