|
|
源文件中_Interface文件夹下WndField.cpp文件% t5 u# O+ f- _. ^$ Q
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )% O- }" y0 U% O1 H. E/ u+ W
5 s0 F2 @. N7 w5 ] L& G: pstruct sItem3 q. r* ]0 M% a
{8 `/ f. B* ~1 k3 e, b
DWORD dwId;; D n% ?6 _) k) q+ V- r1 u) g
DWORD dwKind2;# C3 X) p; x6 Q, o7 V
DWORD dwItemId;
# p, _2 B+ c4 j. T- S/ A$ lBYTE nIndex;/ y* o3 }7 `! U& C7 D& m- X) X
sItem(){; i* V+ ~ k0 c4 @
dwId = dwKind2 = dwItemId = nIndex = 0;
! _$ N9 G. j3 N; t; p$ V}; }4 I3 C3 {; Z; _
bool operator < (const sItem p2)6 Q* c2 W2 M7 `: O8 y- P" M( q
{
4 |/ l( l6 c) _! J/ q1 }2 E( f if (dwKind2 == p2.dwKind2). c* O1 W. H+ t. ?: K
{
( s6 g0 H0 T8 f- C' P return dwItemId < p2.dwItemId;: W0 R6 _7 ?7 T# G
}else{
1 y& }+ f$ q8 D7 X, F1 w return dwKind2 < p2.dwKind2;* x% `! d! K0 A; C/ B5 u$ B
}1 V: o ?7 g- S/ H# @
}
# J& T; \9 }- O};
# L; K8 Y Y, L1 Y7 R: R* }( cclass CInventorySort
4 R9 L- I; {1 J# l7 x( ]4 Z; u1 U{' }! I0 H7 e7 L2 M; _
public:
- ]+ m, p0 F- l: v3 R) \CInventorySort()
, x0 N b5 C6 F9 a7 G/ Z9 a{
8 h3 p% _# p: I5 W2 f3 S m_dwPos = 0;9 } A) q6 c/ ?: r, Z. M, L( g
}: A; r4 e9 q7 d. O6 I
~CInventorySort(){}& X4 @ N( ]- a
private:: l. s0 Z* b0 {; ]% I# K
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息) F1 Z p! F+ ~: B! H: b
DWORD m_dwPos;7 q- X/ a0 [1 I7 U' y; Q: M) V
public:. I1 _7 }) M: N' h' W
void Add(BYTE nIndex)! }" O; ^+ D5 k! [3 b7 J
{/ l5 {9 q3 q7 a- M; n6 h
if (m_dwPos >= MAX_INVENTORY)
0 J$ }9 L0 `. L* P8 x {
5 ?: r% R* u$ w6 o4 T return;
4 w& P; K% P' X7 C' K; B }
$ k$ [4 [! T' u" r m_Item[m_dwPos].nIndex = nIndex;
& n- Y1 \9 v# N+ A0 c. k& G m_Item[m_dwPos].dwId = m_dwPos;( e8 p8 P; b p. @
m_dwPos++;
& V* Q5 K% G) @1 q( {) F}
7 f) S1 r" j1 m! u! a% fBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
/ a6 E2 |& i+ c1 S{
, r6 k2 u; k! a# [5 i+ h0 F for (int i=0;i<MAX_INVENTORY;i++)3 ?4 L8 `, V( \% a1 `: D
{4 X# p: C- S2 M6 a
if (m_Item.dwId == dwId)8 z( ]% Z- ]' t4 P' i" g
{; i2 _/ [: `8 p7 Y1 p f9 ]) U
return m_Item.nIndex; }# b$ q" `% _2 U- L; E
}3 Q9 }, o; [7 ?. D% S8 I, X7 _
}
4 I$ V- S, l& u; E return 255;
, |# G& u" w* E* s}
! Q1 X4 \3 A( E3 P! g$ i( Y2 qvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置/ F+ R5 f3 O& z7 g2 c, a5 V
{
" g V9 ]7 m$ X& n1 T BYTE nTmp = 0;
2 n/ L# T+ u7 p* i' T0 A bool bDest = false,bSrc = false;
, {$ M. I2 p5 t" K D1 O for (int i=0;i<MAX_INVENTORY;i++)
0 Y; {0 v5 Y8 d) l {, o9 [2 w* D6 h1 g" x/ b
if (dwSrcId == m_Item.dwId)9 K, e* {" Q9 ]6 k; j
{
, H( @* W! ?0 U7 h //id相等 则 改变对应的dest和src( |* \- W& u4 L, j% u4 {; Q
nTmp = m_Item.nIndex;% B- _" i S* G$ T+ ]4 ?% y2 s
m_Item.nIndex = dest;
7 c8 w7 a: B6 J( h C: v }
3 R& M4 z' I0 l( |: K! ^% s }+ K/ W% E5 n7 Q. Z6 L! k
//临时数据保存完毕,交换开始
% b( G" z+ T* U: z for (int i=0;i<MAX_INVENTORY;i++)
4 {" x+ w# E6 f* j0 y0 Q {
2 X2 L( j* ]+ a) ~2 R6 J0 @ if (dest == m_Item.nIndex)9 B F* _# i1 L6 g- ?. X
{
t. ]4 a- `3 t1 G6 q //id相等 则 改变对应的dest和src! S3 d; ?, c4 s) Q4 v7 ]! Y5 }
m_Item.nIndex = nTmp;
( {! f( Y4 `* Q# W" r }
O( a0 F: S2 \ }. t/ Z/ X* R; q% C" w( C t6 S: l
}
( \. v2 m7 r( ^4 H3 R. b1 E- i};
" f/ P5 T$ B+ Y6 u! S9 v& A! k-------------------------------------------------------------------------
( l6 V& |7 p' ?, B依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ): Q. y9 N% {; `! ^; P! p1 Z: L# P
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
7 f2 ]4 u- S- F' U, l1 z紧靠其上添加:; I8 T' V, Q2 F+ c; E
if( pWndBase == &m_wndMenu )
/ h1 w+ p' ]4 d- C5 w8 N{& _" X$ x! u9 Q: e6 Q* j+ z
switch( nID )
( W( l" C# D) E/ Z4 F9 h {
0 ?0 u' @ C" _- E' z& Q3 o: \ case 2:
# \) a) y& {+ t; J8 E2 P {3 b7 m3 Q2 H0 F2 G$ X3 L+ k
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);8 X2 d \3 o4 f9 z5 f V
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))8 Y( g+ o& h4 {! b' D3 H6 ^+ `
{7 I8 ]" G0 R4 j. q; s( B9 F5 F
break;
! H7 A/ c3 i" k/ F4 H0 }4 d }
" x& \) N# N+ s8 e, l% ~ for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
3 [5 t* i$ n/ y$ l" U& I {6 m/ E7 X1 k6 k/ x' _8 a3 {4 h
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);8 v! O0 q0 A% r& M( q
if( !pItemElem )% L5 L+ N4 I; ^6 k; j1 ~( M; t0 B
continue;/ \9 L0 q/ Z) W6 ?" f
if(pItemElem->GetExtra() > 0)+ F: y/ b4 T+ d: Z# V1 u5 O
continue;9 S5 ~9 x$ T1 P7 B1 R( a* A
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
p C5 u# S8 B A/ ^5 @; i continue;3 R8 ?6 N% G) G z0 c; d$ p
if( g_pPlayer->IsUsing( pItemElem ) )
5 E6 m1 M8 M7 j# {" p5 E continue;: X7 x+ T, f9 Y
if( pItemElem->IsUndestructable() == TRUE )
3 Y2 z8 {- ~. L- t# @3 ^ {
P! [- {! i J( |; k! ? g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );+ F, O& p3 R2 V, X8 C, I5 U
continue;
3 A9 u4 |5 |# c. p5 `7 K }
( x a3 P& i N, |( o g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);% J; r+ ?7 ]( U% }6 \, J
}
* _9 ?$ F8 E) D( y break;+ v3 Z x% R6 }# N! I' m
}: Q x0 S, G: [+ i1 p; ~
case 1:6 E. Z, r2 d+ r$ }) f
{
9 N# [* z' t+ z' x' O7 Z //整理背包+ f3 ]1 ^" S- x4 n" H; Q5 T
//////////////////////////////////////////////////////////////////////////* r3 s6 @ a4 m$ b& C3 n
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );( J C" C- A) `$ i! o
//////////////////////////////////////////////////////////////////////////
8 a) b. q7 ? G9 X3 C) t //////////////////////////////////////////////////////////////////////////
3 E4 J {9 }* V( f1 ] c CInventorySort* pInvSort = new CInventorySort;
$ v1 V& J! P, l vector <sItem> vItem;$ d# D( u5 K5 C7 e* O D; N
vItem.resize(MAX_INVENTORY);//初始化大小
: h. Q/ y7 |, J. P //////////////////////////////////////////////////////////////////////////
- a9 N% R( B* A. V+ `2 `& [( R //填充数据) Q: p9 q# M+ ?& e2 Q/ O* ?
for (int i=0;i<MAX_INVENTORY;i++)
+ {5 e; u( b9 ]; |2 ` {
$ Q1 f5 V6 d, M; Q( }0 J$ H0 m, ^ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);, w8 b; a! w2 r9 A2 J1 E) g
if (!pItemElem)0 _% P" Y. ]8 R. p( A
{
( {: n0 ]' k! ^ \5 n( I, ?8 w7 j; ^ vItem.dwKind2 = 0xffffffff;! w( H3 D u5 \: F' G
vItem.dwItemId = 0xffffffff;
; T$ q. g. r: `/ i6 Q vItem.nIndex = i;
# Z5 X6 \# [& N }else { H% b0 s; I X, R% Z& `
ItemProp* pProp = pItemElem->GetProp();
8 e( w. g% Z! V* O2 u! b6 n vItem.dwKind2 = pProp->dwItemKind2;
6 j. A$ O, N6 H4 j vItem.dwItemId = pItemElem->m_dwItemId;
- @6 Y5 c$ h) {2 ` vItem.nIndex = i;
3 s( i& n( I5 n/ R* z4 |6 {- f }/ G! r& k. ~8 g/ }8 n" v0 |
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
. W% B0 x% }7 K; \! U6 D! S8 ?2 ] }6 a( t% c' ~, _( M/ y8 z
//////////////////////////////////////////////////////////////////////////: Y1 Q; }( w, G/ z1 `, a
sort(vItem.begin(),vItem.end());//排序, W: p% `: X1 o; b3 q
//////////////////////////////////////////////////////////////////////////
; }0 P3 z: M% @" E6 t4 T! w //交换
: Y8 V# s& Q* G4 r/ J! p0 S* T4 t for (size_t i=0;i<vItem.size();i++)0 D" n( P* B$ P& [5 v1 s
{
$ L0 n. e5 Y$ n/ \; n; S //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
6 Y* p- T% [4 }* n" M& A% G# x pInvSort->Add(vItem.nIndex);
+ }8 s) C8 t; K, `4 P1 e }
- O4 a8 U' g ~& o* q, [ BYTE nDestPos = 0;8 R$ Q9 N- @8 w& ^3 v. v/ q. T$ P
for (int i=0;i<MAX_INVENTORY;i++)
5 y9 K2 z8 J" j! H6 E5 a% Q, c {! D' |1 L% Y; a3 @! z( |% n
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
/ H1 E2 X: b2 i! h, H- v& r if (pItemElem)
: ^, f* Q2 e* f, p9 q9 p8 B; A1 x9 c {
% `! q4 [2 ]* S- _, ?. P& z if (IsUsingItem(pItemElem)) W$ y' j# ~) s4 g( E
{# ]9 @: c! p/ r2 ^8 M2 W5 a4 [0 l3 K; O
//这个位置无法放. C" B) P# K# b- X2 s
nDestPos++;2 T8 b3 V! g+ v$ k! T
}
) X+ h* m; t1 G2 a) C }0 E4 ]( d& E" Z% W. S
BYTE nSrc = pInvSort->GetItemSrc(i);" h# @' H3 ~1 R' ^5 m
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
5 X; X' s6 q. b: l" C if (pItemElem)! H; ~$ B6 q, U; M- x9 ]. C, Z
{
/ q0 F% z: y2 t- S8 ^ if (IsUsingItem(pItemElem))
- B- ]$ |$ R4 l' `* P# U* ?1 C4 o {
$ A9 _" Y3 t s //这个道具无法移动,跳过
, {( p6 ]+ S- M8 R f continue;
5 `3 h4 L! K/ N) D5 u% @$ X }
: M8 c; M: F" Z8 e- s% p }else{: A3 h, y6 A, i, D+ e; m! g/ ~& n4 M
//空位置 不用动
- j2 A0 r' p5 w# F. m1 u5 j continue;
; _. j0 I$ c/ A% D }4 V& N/ y7 `5 o( ]
//////////////////////////////////////////////////////////////////////////% N& F$ ^" u6 i8 ?5 g+ N
//开始移动/ X& J7 p- q; c8 c
if (nSrc == nDestPos)
$ h/ T! W3 z% A7 L( f {
* }6 n* R; ~' `) U- b6 E$ v$ \ //原地不动. h( ^ e. [1 Q) c3 k: e3 V0 h
nDestPos++;
4 c$ C" P" Z6 a" Y6 E+ x continue;
2 i% F2 r5 {# n; _, x7 ^ }, b- t* V0 O. d" o) `# |
pInvSort->MoveItem(i,nDestPos);* p2 q. n6 R- V- I5 V* k7 z8 z/ q* Q
g_DPlay.SendMoveItem(0,nSrc,nDestPos);* _* O3 Z1 n3 ~0 V. p
Sleep(5);* k$ H$ X; G2 [) C0 A. `7 ^3 D4 [/ @
//Error("移动 - %d->%d",nSrc,nDestPos);
8 ~ I4 f- ?2 x8 k- Y6 a% j! z nDestPos++;; \2 d0 m& Q' ^9 o2 R/ ^
}7 ?% n) v. \, o C& F5 X8 G
//取第一个元素的信息
# M \& W; \! r7 H' }/ P /*
, [+ s, p% r# m5 n- S N if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)3 V4 M& Y! ~2 ~. d9 s" ~6 R' H' s/ ?
{
' {' M; f( _7 h; l6 W( V Error("Move - From:%d,To:%d",vItem[0].nIndex,x);5 n0 g% b6 B3 X+ h
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);) [+ ~. Z$ `3 W4 P, m$ f
}+ I* e( i( |+ p
*/
- z6 @9 x6 J" j8 y /////////////////////////////////////////////////////////////////////////// r: k4 I4 R+ g
break;
6 ]# R+ b4 v5 E% a& K1 y, {5 H }+ \- G+ o% V: v7 o1 d" O# K
}
! w) |( r0 N/ E0 ^$ ]}
: s3 N9 X% ^3 U) ?) Jm_wndMenu.SetVisible(FALSE);
3 [" t& l! F! @1 A e: b; c; |+ |! D5 X5 P+ n2 C- _
--------------------------------------------------------------------------------------------------------
1 x6 G# i5 s$ j: a7 X0 ?' w搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)9 @: E0 k+ p& S7 H3 |
{7 C/ Q8 o( y3 |8 w/ c6 Q) k
BaseMouseCursor();
2 R5 \+ P, I9 b, y}& |6 Y3 Z( x4 A; N1 O
在其下添加:
7 w: w0 K7 x3 W; ]; X# qvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
# v8 f% Q- n0 W1 a{
( r$ ~ p: N& v2 t8 y$ _m_wndMenu.DeleteAllMenu();
2 U1 d7 ^0 x+ Ym_wndMenu.CreateMenu(this);; w9 s5 \. G7 d3 w
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");$ n; l/ O1 @" X& T' O
# z: e2 c: `2 V6 k1 A+ Lif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
; w6 f: S% M, A# o0 u{
& [7 ?/ {- g$ ?' P! A //P以上级别才可以删除所有道具
: o* v) k$ v6 f2 m; x! ? m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");3 o9 r* Z9 r# M0 a1 k3 y& r' J& {
}
/ k5 f1 _( S5 ?5 Ym_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
2 `# p& w7 [6 ~. G3 qm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );% c0 V$ ~+ m0 z. Z
m_wndMenu.SetFocus();
- [( W& }7 C3 H: F5 a8 }}3 y# Z7 A2 i7 @) |3 C
------------------------------------------------------------------------------------------------------------
/ b( |: L: r3 c A* p) w5 C/ N*************************. c& ]) p/ U. U4 O" J+ l8 ^
WndField.h文件
! s, z, S1 L% j* `( ~0 B) P*************************: X h+ W: j1 d: o
搜索:BOOL m_bReport;- x# M3 a3 J& z1 `# `
其后添加:
* S4 e% \7 B) y. p2 i1 K [CWndMenu m_wndMenu;
|4 ~ w2 x9 R; Z' u9 [$ x搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
. c, d4 E# d/ e其后添加:
/ g2 J7 f L5 q- C7 ~& {* Kvirtual void OnRButtonUp(UINT nFlags, CPoint point);5 K* N2 W& |% W6 |3 w' `
, Z; c* B' B7 T5 K: e/ x3 p5 b- z
. P% j( O0 f; R |
|