|
|
源文件中_Interface文件夹下WndField.cpp文件3 H( {# K# T7 C; T
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )2 X2 N1 j. |2 u# K' G2 Z
6 G& N9 I% P6 R6 `* w9 v7 W. bstruct sItem5 X) [; c. S: k4 c& @, U
{
9 A2 F, x- q2 c& i! X( b9 L2 dDWORD dwId;
* R" Z7 ]0 w0 s. v; dDWORD dwKind2;
8 o9 L- [: Y0 r2 V: ?) `3 ~DWORD dwItemId;2 w. h, j( _' Y/ z1 s
BYTE nIndex;
3 e$ ]9 _% t0 L! IsItem(){
. l, F- q# E! Y0 u+ o2 N dwId = dwKind2 = dwItemId = nIndex = 0;
; m6 @$ c9 A0 E" _& }& C; e9 k}
$ G! y9 i3 L" E% [- D2 V2 ?2 Qbool operator < (const sItem p2). s. N( }! L; X2 c
{/ d: Z" \9 {9 g& ^. H4 }
if (dwKind2 == p2.dwKind2)
; I2 c2 |' ~; t7 U# [; i" I {9 g* X: S4 T/ |6 r
return dwItemId < p2.dwItemId;" o- y8 X) u; o4 T. \8 X
}else{
# D! ^! Q/ Z- j# S& k/ H0 Y5 r return dwKind2 < p2.dwKind2;
) P8 b2 [/ V6 o/ T }8 @( O1 A9 Q$ R% e
}! L2 g, m! ~; Q# H
};
0 E6 q7 F) X5 r1 v8 e6 d: e: `class CInventorySort
# q1 @2 |5 K9 m0 j- ?% Z: z{
! X& L0 i8 F. Y0 f: p$ {public:4 J) u" T7 D+ R' C7 K5 r
CInventorySort()4 w7 C' m+ T v4 o5 h1 a
{/ i* M' l4 W) L" n; G
m_dwPos = 0;
1 t/ E4 {7 v) d' ` m& f}/ Y6 X+ E5 n& R
~CInventorySort(){}
- Y$ Y4 ~; n( T: D: L& `( Lprivate:' B" G' l) N( M/ c0 ^
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息- `/ h* _/ o' @/ }! _
DWORD m_dwPos;: ?& \% H5 h$ Q
public:- M: H& @, D6 A# B
void Add(BYTE nIndex)) g! @- a/ k7 n
{0 W( H, t1 b% H3 }! f) l, E3 }) H
if (m_dwPos >= MAX_INVENTORY)/ r* w! s, _; S0 ^+ _5 |
{: N7 G/ ~5 O& Q T( Y1 f
return;
^% I$ N- A2 h3 g }, S3 D& t6 e' S4 J. ^
m_Item[m_dwPos].nIndex = nIndex;
% |/ r5 c5 Q2 `( z m_Item[m_dwPos].dwId = m_dwPos;7 c, q) s" ?0 l+ {1 V4 G5 k
m_dwPos++;
) C5 M! c3 C1 }# {7 J. v}3 P1 i8 g% R4 a
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
. z; f6 A' L5 N0 r/ |& E; J{) X1 w) w, [# M% ]0 K
for (int i=0;i<MAX_INVENTORY;i++)/ Q: s( m) @4 a0 t+ h
{
) X# H$ e) g7 ]; q3 E: K if (m_Item.dwId == dwId)
p9 r( |& q1 z+ y6 k) v" T2 i {
: ?3 s% O# y y e, _# s0 T [( S return m_Item.nIndex;
/ | d. | F R! ] }
5 h: ~# F5 A+ R$ ~* I }
9 g+ J2 G: Y9 K* P7 v: c return 255;
7 j0 V6 c, r# o+ N2 X7 P}
- }/ ]1 ]+ U, f& }6 mvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
2 W- w+ {/ x6 d" m/ ]8 l{
; w* Q/ |- P) i BYTE nTmp = 0;' ^" {# n( |' R
bool bDest = false,bSrc = false;
k% ?. V4 S1 c0 _* d, Y for (int i=0;i<MAX_INVENTORY;i++)3 a. W$ ]$ T V! v
{
! \- L q( S7 o9 U7 p if (dwSrcId == m_Item.dwId)
, f) W, _: f1 I; o {
0 r! j+ G& {% s H5 N8 i //id相等 则 改变对应的dest和src# _; ~- E8 z! O. l- _, g1 D* Y
nTmp = m_Item.nIndex;2 f5 m4 H8 k9 M9 `( q) J) x/ b, D
m_Item.nIndex = dest;, W$ t% E6 k* ^& q2 V2 ~5 o
}0 T2 ^1 v* [# O* l+ E5 [3 a
}
9 a3 K- G; [. k& |2 C //临时数据保存完毕,交换开始( i E; j) G1 |: B0 |$ ~) ?& |0 a
for (int i=0;i<MAX_INVENTORY;i++)8 o& F, |" S: z; p
{; M% w" A e: K! o$ L2 R+ W
if (dest == m_Item.nIndex) m7 Y7 [! d# h( m6 ~
{# j2 z% v3 y5 q
//id相等 则 改变对应的dest和src
5 @4 }4 @1 I' S- R' {# h m_Item.nIndex = nTmp;
/ l- n# l5 X+ j6 I' V9 Q+ }- Q }; x+ ?" u8 }- E3 A: c0 ~
}9 q( F( i0 D/ S8 b" g
}
* g( J' \" [( K* V6 m$ ?};
9 o7 }4 x/ R% y' X3 |) E-------------------------------------------------------------------------
& A+ ?+ R1 m7 \, U- }7 A7 h( [: f依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
) K, l3 w+ |' j" h: P) V搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
& t. C: P1 ]' w# c. E* q紧靠其上添加:+ b7 ]0 X. Y3 y [
if( pWndBase == &m_wndMenu )
+ A1 [5 f) m+ _ t{$ s9 X. H% {' f: F% B) `
switch( nID )" e5 a4 y; U( h. H/ G+ q& o
{
4 Y' q8 F# _/ l: J% n! x6 t case 2:
0 m z- {4 g! o( H0 c {
" c D) R, W3 A; l/ O //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
3 [' c8 Q: U6 T2 P1 @ if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))$ E# X2 M- L8 p2 v, H
{0 ^1 T |4 m. z9 |
break;
0 C' I/ ^. ]- z& Q$ _ }- z, ?2 N4 d+ b- S6 ]; J
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
8 c( \+ p1 F$ v3 Z1 O# N {5 b$ v/ V7 A: E, a- n) _
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
9 M! C1 ^6 b5 L4 |3 o1 w if( !pItemElem )
7 J$ V5 I4 d, N( z4 j continue;+ d3 S( o% E. T- r
if(pItemElem->GetExtra() > 0)9 }$ ?- u& i2 \3 c$ f$ s
continue;
) h1 e( G% X- G) p if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
7 R4 B) H' P( a% v0 i# [ continue;* Y" W# e; `- T, O
if( g_pPlayer->IsUsing( pItemElem ) )7 @7 T) f: S% K6 c; q/ v! g0 B/ q
continue;
; F" P2 R, q9 T9 b3 P6 m if( pItemElem->IsUndestructable() == TRUE )1 T8 q* f) d0 @/ d& l# G( y
{
( H" [2 X# Y6 W; ~5 c& N" l g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );/ Y# \# l$ U# S! i* a
continue;
1 t6 m! e+ ^3 H6 l+ u }
. q+ s0 ~4 O; K g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
- V, I2 H6 w1 U4 K! O; ^; z5 _' J }
& G6 I6 l9 T, O/ }8 w9 T, V o break;
. |! b0 s" r) N/ O) h }" @6 L* t! T7 p3 d9 q: H' i$ |
case 1:
/ e: y- o; |4 C8 t2 u- i7 G {7 j- R& K; g3 T& R' c/ k
//整理背包
3 t+ s) [: P! t$ S% o9 L6 U //////////////////////////////////////////////////////////////////////////# a; b. F) z O* o4 z! {
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );/ v6 p0 ]* t" ^+ ]& g# e3 K
//////////////////////////////////////////////////////////////////////////
% t: h- Z2 G0 P/ h% r0 }" B //////////////////////////////////////////////////////////////////////////0 A- ^$ a2 o* ^1 b: ^* m
CInventorySort* pInvSort = new CInventorySort;
* Y1 X" d- N2 _& ]; { vector <sItem> vItem;! I, ~7 _* S# A9 n/ T- m% s& t u
vItem.resize(MAX_INVENTORY);//初始化大小. }" k( E1 {) Q8 [
//////////////////////////////////////////////////////////////////////////% t# y) b: J3 W( R6 G
//填充数据! W; `8 f5 Q' x7 J8 ^. ]
for (int i=0;i<MAX_INVENTORY;i++)
2 c2 K) x. ~2 \! t9 n. O: \ {/ J0 J3 X' L8 H6 j1 b) _7 w
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);0 @" @# B( L! [8 N% ]4 l! {4 |
if (!pItemElem)$ H- Q0 F% S s& I: [
{, z8 ~& q2 x7 K/ O9 a# G! O
vItem.dwKind2 = 0xffffffff;' ]1 w; i5 m5 s1 J+ R- l* ~
vItem.dwItemId = 0xffffffff; b: `9 t) \3 T8 ]6 H6 l
vItem.nIndex = i;
% q5 S0 {3 M" R! f }else {4 y2 E4 T8 {1 D8 j7 U
ItemProp* pProp = pItemElem->GetProp();. v; t& u( A' h# e5 Z6 q/ m0 k
vItem.dwKind2 = pProp->dwItemKind2;
- K7 ]5 L9 E0 B+ P% J. |- G vItem.dwItemId = pItemElem->m_dwItemId;
& f1 o- _! o8 Y4 K! F. Z vItem.nIndex = i;! c4 ^6 ?# \) L q' C7 }5 o6 W- I/ s
}
6 Z# g; r! d: j: O/ v' w //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);0 |1 d4 Q& [! o# W$ V9 M
}
% ~3 W/ P- G5 ]- d //////////////////////////////////////////////////////////////////////////4 c9 a3 l# h$ t5 `
sort(vItem.begin(),vItem.end());//排序# t6 w# m n) i! o2 B( i# z# d" ?: h
//////////////////////////////////////////////////////////////////////////7 b6 a. e5 ?1 s& @" L+ ?
//交换. d8 u9 U& n1 `1 d/ F
for (size_t i=0;i<vItem.size();i++)
8 `2 w1 Y, r8 p5 O: O {2 |: ^3 J/ |' k' y; R+ k
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
; S( z; W" z9 S+ T3 [! a pInvSort->Add(vItem.nIndex);
/ p7 }% d1 p" s$ c }2 v; y, D# b; Q7 U2 e
BYTE nDestPos = 0;) y5 H" X4 D4 u/ }1 {" R
for (int i=0;i<MAX_INVENTORY;i++)7 I/ c3 P% L: i; b# I: W" _% Z, R8 k1 \
{. u$ |5 n/ `5 } C% C
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);: r: k" {/ T# X% f5 j" l4 L5 N: A! u
if (pItemElem)' n' W. [7 X' W8 r
{
. V7 z5 y t8 t! }# B$ n: A if (IsUsingItem(pItemElem))- }( e# y# t4 X9 n
{9 y+ g' |# u1 c+ E& o
//这个位置无法放; I. M' H ]% u9 o3 W3 N5 T# J0 {
nDestPos++;
- R2 A" T: D; X4 z& Z }
6 x0 L8 R |- h6 r% X }
3 k+ o+ j0 ^* Y2 u7 v# P) u+ g- V BYTE nSrc = pInvSort->GetItemSrc(i);7 U- w y' t/ t: m/ Z
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
8 V; {2 w d6 Q' m. Q( H, c! d( y4 I- { if (pItemElem)9 h9 u, r/ e/ X* d0 ^: o
{/ o5 c0 q' A ?0 u/ y
if (IsUsingItem(pItemElem))
$ y! e/ H# j+ m3 {) V, {1 C {
+ U9 ?% {/ y' x8 Y' d" M* u# b) U2 U //这个道具无法移动,跳过' M" D5 |% \. m- P' `
continue;
- j" K) y$ D: P- m# S$ g$ d }) w8 @8 T+ k) b3 C7 [2 A
}else{8 |( h) G' C* N& f7 @! n
//空位置 不用动/ X o8 I9 S6 q
continue;; U+ p v7 A& V: {" S% L
} t& T" S r4 p% L. Z
//////////////////////////////////////////////////////////////////////////
7 v: M/ b5 t# i. o2 s) V# P @$ F( x6 K //开始移动
, `, t- N) }2 x; d) ~ if (nSrc == nDestPos)+ E% f4 W9 T5 i# D
{4 ^3 ?& ^% ~9 C2 c3 k: N+ Y
//原地不动2 d r. s8 F* A7 q5 j
nDestPos++;
- H7 V, q# f/ u6 Z" |" E. p5 Y continue;
' P8 N& z8 w( p2 q) H, M6 m5 k }; E2 |0 |8 h& K: }9 G% f; h
pInvSort->MoveItem(i,nDestPos);
2 H5 m, g+ m; \0 ]/ { k: b0 l g_DPlay.SendMoveItem(0,nSrc,nDestPos);
+ T; v; y, ]6 d" T2 @' L Sleep(5);
7 Y; U3 Z. g2 e: T7 [3 O //Error("移动 - %d->%d",nSrc,nDestPos);# S1 Q6 A8 e# J, X1 H! x$ M
nDestPos++;0 }: y" F# E* x
}
/ g7 b4 W; p6 D* w$ _% G# I- u //取第一个元素的信息 F: F" V0 m1 ]6 M0 K
/*
& t) M1 W; `. Y! R/ { if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
+ ]$ \- E m* O3 u9 p1 N) R {
) H; ^8 D3 R" E$ Z Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
1 T) e9 b: Y9 M2 @ g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
! q, G: a! @& h u/ q4 V }
j( _5 m; X0 B- x */
! z# Q" I$ Z9 H8 p //////////////////////////////////////////////////////////////////////////( R' H/ g" H7 l! B7 D
break;" t3 O2 ^" H/ G
}3 c; O) s* V# b0 M7 B z8 B
} f3 f& S/ t7 g* _% `1 I
}
4 p% c6 w8 l4 P1 Cm_wndMenu.SetVisible(FALSE);/ v1 M6 ~7 P# X6 v( d
- G4 u, `1 P: D. c--------------------------------------------------------------------------------------------------------" Q. M/ l ~+ D1 }5 F8 _
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point). t: u% C6 f0 G% q; J: W5 \: S8 Q
{
9 V2 {4 b; T$ n2 Y+ u' fBaseMouseCursor();2 F7 H/ w. Y+ `) f
}
2 D0 d C9 `- j# B( e在其下添加:# H. @$ Y. G* c K4 V
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)& u0 _9 i3 p" \8 [- m
{
5 `/ `) e L; k tm_wndMenu.DeleteAllMenu();
( _3 i( `# q, m$ h$ x J; \8 Jm_wndMenu.CreateMenu(this);
% G: `5 r5 ^" v- b' L7 o; bm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");1 W- W6 m' j( g- Y9 E3 F: z
W. h% T1 s0 T. U" lif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))# D9 c# ] o8 q4 U4 ^* ~: b# w7 I
{
2 q! }" @' r( m0 H1 `, Q5 q //P以上级别才可以删除所有道具
( S% _# f2 U* v3 {+ [* P m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
! P% _* v! x) M}
7 J! {0 K( S! j# cm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
k0 x$ t6 d6 @( sm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
5 t( k; \4 b6 |- Km_wndMenu.SetFocus();( |- n6 K6 Q7 t* o, h, S
}" E# V! x: X, e) a
------------------------------------------------------------------------------------------------------------6 v; y0 _ Q5 C- c
*************************0 `$ ?& y5 u9 N7 _
WndField.h文件
5 G5 s9 S+ R5 r& }3 O*************************' l8 \: I8 J2 P$ x8 Y! J0 X
搜索:BOOL m_bReport; ]' K# j1 e4 |
其后添加:
+ H& `& }7 H2 pCWndMenu m_wndMenu;
8 [. e+ f8 {# B- r搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
. D$ S, A; O1 e; n+ i7 t其后添加:, V$ D5 X& G( b* `3 w% j; N
virtual void OnRButtonUp(UINT nFlags, CPoint point);& E7 @6 W ?/ v! w1 e+ } d& A1 A
9 Y9 E# i7 e" |7 X; ^
- h" X; m$ v# N. n |
|