|
|
源文件中_Interface文件夹下WndField.cpp文件
3 z- k+ W p, U. t; [7 X5 A9 Y8 f搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )6 z1 A3 |8 A% D5 v8 l) H
% U( B# V" t& @/ |3 q; d+ v+ {& B. O- y0 A
struct sItem" Z0 Q6 S* E2 ?: K& ?
{" l! q% {1 z$ K1 |/ G
DWORD dwId;7 j) U9 g% R. U) U% V4 G$ I' W
DWORD dwKind2;) _1 t6 t5 R6 V. V7 m
DWORD dwItemId;7 h. I* r8 J& c2 }$ s' g. W
BYTE nIndex;- T0 @* M0 v5 F
sItem(){
: m( R( K& }8 R- m$ m, \ dwId = dwKind2 = dwItemId = nIndex = 0;
7 j2 v/ i& I& E7 c5 p}
# m$ X- f! ?# ], K/ q% l8 q# gbool operator < (const sItem p2)
: x. s4 Y* D4 g7 ?" w. M{3 `' N- i% ^+ \' `& k/ K
if (dwKind2 == p2.dwKind2)' Y7 t( Z7 i5 P2 F4 _$ K: R. S
{
5 m+ z& B2 @0 C6 w$ U return dwItemId < p2.dwItemId;
& {! R/ i- @0 G( D }else{3 q+ G! o' ?6 e% b, L
return dwKind2 < p2.dwKind2;
1 F5 i9 D: g1 Y; B4 r }
6 u, `& l2 S" r. D5 J u9 `! M' m}
. k6 j+ S) N* u4 z};4 C" w3 x) X8 v
class CInventorySort
* O/ s3 a: ]4 w" b: Q{
7 f( K3 l$ h/ ^* P4 ^. m% K8 g& fpublic:
+ {% k/ p. |# ~9 ~/ P6 k* zCInventorySort()
( m# e1 I9 l% U{* K' b: C6 }6 I" \- u$ w
m_dwPos = 0;2 }2 W3 a/ x# v. S+ ]& i
}
0 [* w! {! z9 ~ Y+ q6 F, v~CInventorySort(){}
8 P; j. }, s7 C% z$ ^$ w+ wprivate:3 B J, d+ b* a
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
4 \# D5 J& R. n; h( o0 m/ N' dDWORD m_dwPos;4 E) @1 F$ ~8 M: w! x* |6 U
public:
0 ~5 e) j- j. k' A/ m; \3 X& G5 U: Svoid Add(BYTE nIndex)
% N8 y; ?) P3 a; n0 t{& j! p; @1 W8 c; P3 v, }
if (m_dwPos >= MAX_INVENTORY): g, n! m$ E" c& w7 N1 X% [
{
: G% ]( p, \1 N# b1 ^ return;
6 q5 D/ E3 E% ]) S: _! B) k$ ]. [. }+ H }
$ I5 D) q( p1 W" C o7 h m_Item[m_dwPos].nIndex = nIndex;
- z: b7 `( Y% m; n m_Item[m_dwPos].dwId = m_dwPos;+ J, ]6 C8 h( b2 J# {4 W$ `
m_dwPos++;: T) I# V+ C" u- u/ v8 _
}
% ^+ a9 j2 H$ D! G4 P) o% x3 eBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列 T7 N# P- G5 k z
{
6 j# {) D, U' K9 E& D, p for (int i=0;i<MAX_INVENTORY;i++) [% {" W. i# _, H- p
{+ R/ G% N& e: K2 W+ M9 f4 ?0 C
if (m_Item.dwId == dwId)
2 X' A( b& x1 F+ ~5 v {4 i0 z0 E" }& V8 H' f( T
return m_Item.nIndex;7 o {: E9 Z0 U+ _. N% H/ G% s
}
$ l# C0 u/ ?/ ^0 d; t, n# T" T }
1 R# s& d! {2 v5 \" b& | return 255;' H# r+ e7 Z1 V4 X( T1 A% m. x5 [
}
* N" m9 m( c6 Z' g. tvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置( }8 O _/ }+ \9 X" C; b
{$ n4 [9 q7 v X3 b3 y
BYTE nTmp = 0;
( V/ S: X4 f. _: \! R- h7 F) e4 a% a bool bDest = false,bSrc = false;1 t) j2 i: ]+ N, z
for (int i=0;i<MAX_INVENTORY;i++)
8 ?. T+ u- s& K8 c {
* }) C) L3 L* }9 p% z5 j if (dwSrcId == m_Item.dwId)* {- ?1 f5 I) Z0 g9 s
{
1 y" i2 ^3 Z" h0 @9 l, w" x //id相等 则 改变对应的dest和src3 x5 K2 c; _1 Z* j5 i& `4 w3 ^9 C
nTmp = m_Item.nIndex;1 T/ A# Z8 Z N- i0 Y
m_Item.nIndex = dest;
! k- ]; k1 E/ I+ I @* I2 i2 G }& a0 _. L3 x- p% [1 t
}
W+ r- v" X; p //临时数据保存完毕,交换开始7 Z* `; ~ r! a$ m( l
for (int i=0;i<MAX_INVENTORY;i++)) P: k2 t2 b6 M7 ~
{
( Q0 m9 F- }& g2 e' S9 | S, t6 A if (dest == m_Item.nIndex)
6 }; L1 ~ e9 C5 G {4 y6 {/ c0 g0 g) @* m# R& }
//id相等 则 改变对应的dest和src3 w7 F. t9 }6 l9 B7 ], a5 X) q
m_Item.nIndex = nTmp;
- s$ E. @! I- {& r5 W+ y8 C }0 c% e* B* X3 Y! i. @7 K0 p" W# @ y: M
}( o) y. H+ p* M% y
}, [7 R9 X# p+ H o/ d; x# \
};
7 O4 p8 w) `' f2 o' Z4 P4 s-------------------------------------------------------------------------7 X8 \( I) y% N$ J& }/ G
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )- H$ c0 ~4 v- y( j f, L
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
0 i0 J8 |5 `& p4 _- T3 _7 W y紧靠其上添加:
4 \8 f' l7 s0 Y- @1 @2 C7 oif( pWndBase == &m_wndMenu )
, ]/ F" M% @% b{5 v5 o2 ?% M" p, L6 |2 G
switch( nID )
0 j7 ]% G, h! t& P9 a8 l& [& b1 J {+ m. x+ ~- s1 D
case 2:
+ h! |7 A2 k( l {) H% W, P% _4 @- `- ?- W5 R4 t
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
- R; U: z# X/ h if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
2 z4 |3 O% |* ^& \. C& Q {% ?) V& h6 g2 O6 f+ H& D
break;
4 ?* l. Q: F9 ?9 W }
* i4 i9 q' F6 b# w% ^" o' D for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
+ g& x- O# n+ j: Y( I0 z {. y; D$ G0 V5 n0 [& l
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
+ s8 f% E+ x) P: W9 O$ m if( !pItemElem ): _+ n0 E. g" F4 J
continue;4 n) D0 w4 g* S) A
if(pItemElem->GetExtra() > 0)4 }9 G+ V, X5 e" t1 M. K
continue;) X) a' g2 n0 K3 ]. l2 [
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
: v, m$ R, q) H) u, q0 |' y! _ continue;
0 \1 ^! Q4 G2 E5 g/ h if( g_pPlayer->IsUsing( pItemElem ) )* t1 c" e- a# C. y7 ~ a' K
continue;
. b$ ?$ |' n" l C' u if( pItemElem->IsUndestructable() == TRUE ) ?! n4 r) T g2 a* M7 V
{
. G# H- @8 y4 c0 \' {4 p j! g# ?% z. w g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
e* G8 Q# W t/ I# ? continue;
( \& y1 X, J$ Q }* V: }& q# Q( I+ f) V1 {- z
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
' U! i- n; [2 M; q2 c1 V }0 O# D0 `3 x. A% n. M2 c
break;! q8 B: F/ @" P9 C3 B2 J: ^+ H E
}7 x; a+ f! A3 {% ]
case 1:0 c/ U. j! j$ i( @3 p
{4 i1 [' S2 ]2 @3 w4 z |( B
//整理背包
/ F+ \/ a) K6 ]+ L( U9 k //////////////////////////////////////////////////////////////////////////7 J) G# O7 b5 E. G/ H
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );* i# `; W) u+ K: Z5 p/ ?( Y
//////////////////////////////////////////////////////////////////////////9 _0 e8 S0 m/ R" l( l3 m% y
//////////////////////////////////////////////////////////////////////////4 f$ c2 i" ~3 q2 ?! W% [
CInventorySort* pInvSort = new CInventorySort;
$ c0 ]4 r7 Z/ x) a; Q0 }) b7 ~* b5 W vector <sItem> vItem;+ C4 m3 w" e) ^: B9 Z4 ~
vItem.resize(MAX_INVENTORY);//初始化大小
+ {4 g# W- N- G" F8 Z6 F- W //////////////////////////////////////////////////////////////////////////; d# t' S- B' p7 ?5 {& m
//填充数据
$ ]( R W! I+ i# W9 | for (int i=0;i<MAX_INVENTORY;i++)2 |5 W) {/ x% B; H8 ]$ V
{
; }5 v$ f9 t8 O* X% G4 ~' f* ^ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
N8 f( i# P9 \. e" F5 r6 c7 { if (!pItemElem)
+ u( m5 {! [2 L4 K- C {$ X, T. ]/ W, F- P! F4 w
vItem.dwKind2 = 0xffffffff;& s0 p6 v- G+ Y; U# M$ |
vItem.dwItemId = 0xffffffff;
' b+ U! A! d% j4 N& B vItem.nIndex = i;3 l' x0 B" P: e6 N# d- R& z: L
}else {: T5 Y4 Y7 n8 j+ C* _- P4 u
ItemProp* pProp = pItemElem->GetProp();
3 J7 @% a6 i. E/ l- Y vItem.dwKind2 = pProp->dwItemKind2;6 D) h9 V7 }7 u% t. P# c
vItem.dwItemId = pItemElem->m_dwItemId;
5 T2 J' n& N) m vItem.nIndex = i;. O2 _' w; u, F6 y: R, i
}* r5 X/ }$ S9 a4 |! n$ s4 U
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
9 d# r2 X) \4 [6 I4 v+ e }
, {: n3 K+ M9 t" j3 b& v0 h) R //////////////////////////////////////////////////////////////////////////
( e+ A: Y+ T& H5 P7 U. i! B sort(vItem.begin(),vItem.end());//排序+ @4 l+ r K1 ]+ a2 c" G8 Z, r7 U
//////////////////////////////////////////////////////////////////////////, D8 l$ i" D) X, ]$ ]
//交换9 |: z7 X0 D# T) g+ P7 k( J
for (size_t i=0;i<vItem.size();i++)
$ \6 v; ]) f( G6 Z' R5 Z2 K/ {2 \ {
@0 p3 ~6 A1 ~& n. a //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
3 r3 W9 K$ e( A; l pInvSort->Add(vItem.nIndex);4 f9 f! X) g" N, j& C8 x* Y- |3 r
}
5 _) s: T. w2 o, A0 Q4 d+ y BYTE nDestPos = 0;! p/ g6 l2 a( `6 ^/ H+ p
for (int i=0;i<MAX_INVENTORY;i++)$ i, G) k: v! `
{
, J! v1 C f9 _' c2 K CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
/ L' k. h% d7 n, h j if (pItemElem)$ v) j. y/ O5 M% q+ r( {9 {( Y
{
+ ^9 H8 |4 f" W- Q( j, z; f if (IsUsingItem(pItemElem))3 X3 k9 B: @0 M1 v N. w" x
{
+ f0 p7 m& h' z5 E, \6 @ y S //这个位置无法放+ l! Z7 ]! P$ B6 r" p
nDestPos++;
- ^( K$ f h/ ]$ ^9 Y }
8 Q5 P" Z2 O: t2 O V& \ }0 w$ O& ]! h( ~7 m3 r$ `. A& e
BYTE nSrc = pInvSort->GetItemSrc(i);
7 Q8 C: w4 B) f6 B8 _- X pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);1 A/ T% B. U) @
if (pItemElem)
: E0 v% k* ~6 O {& p5 Z) J9 Z6 v. g Z
if (IsUsingItem(pItemElem))
0 Z! R' N. a Z5 x% w {8 T/ c- i A/ T7 O& I9 ~- R
//这个道具无法移动,跳过% }' q* w9 i8 {2 `% @
continue;" N$ _* W2 g% Z% N: b+ U9 F3 R
}
3 F" r7 e+ d+ d, g! ^ }else{4 F, v1 |( v$ B' l) y7 M1 H% R
//空位置 不用动
: R1 ^, p; a7 }7 T: N1 C. H' u continue;
@7 m N) l2 P) M- |4 A* q }
& k$ Q0 B" u- e( J8 B# g //////////////////////////////////////////////////////////////////////////: j3 V1 s [( x8 M# j" g
//开始移动9 c4 i) k5 z/ \+ Q6 n9 ^
if (nSrc == nDestPos)( y. t' y9 ^9 ]+ ^1 R
{
" N2 `1 U3 I2 k$ @ U //原地不动! S2 l, K6 N2 A8 ?, ?9 x
nDestPos++;
! O! b- o) w6 B3 Z) x& I continue;
0 g! ]0 h9 C) Y' ]8 N) Z, p }
0 H! F8 e' Z9 z6 q9 S8 L; Z pInvSort->MoveItem(i,nDestPos); }/ h" |4 l- Z" _5 l) ~
g_DPlay.SendMoveItem(0,nSrc,nDestPos);, [" c' l1 E- p: X6 ?% e5 Q# k, h
Sleep(5);( H# T+ A! M; b& ~$ B
//Error("移动 - %d->%d",nSrc,nDestPos);
6 r/ z) B1 P* ^2 g3 ^& | E: {2 r) _ nDestPos++;. m) x( X: ?# A8 T- n5 T
}
, R. t7 E& X, j //取第一个元素的信息
: P0 b" q1 U0 U5 F /*
( M4 J+ n3 Q0 g. h& b if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
- }3 p6 v4 d2 [! V( d {
6 n& y3 m% |% V7 C4 V6 _ Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
6 b! a; a ^( G P, O% i g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);- f7 C. }" ]/ \7 L
}
C' {- J$ f1 T) h4 E+ K */ b6 F4 O# y# _6 f
//////////////////////////////////////////////////////////////////////////
& f; b1 J! [5 b7 d- i break;
4 ^& y5 i( K, }! T }4 Z6 j. b0 i: ?
} , U! H* F; I) w. V4 s$ `$ K
}
7 N6 h& x+ K4 J+ M' R5 J1 jm_wndMenu.SetVisible(FALSE);1 b8 W7 m5 [; E$ V9 A
" p, g. v) O. I% q' K# j--------------------------------------------------------------------------------------------------------4 C W6 }2 M$ d) X8 t- l$ b% b7 Z1 F4 Q
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)6 }7 d" ~ l- i, b( r1 g: ?
{$ z0 B- B7 Z& u% P$ c& ?0 ~
BaseMouseCursor();: m4 `2 b2 }5 M3 J
}5 W- K! \4 D2 x3 X8 j
在其下添加:
* ?; I5 ~* z# M' T" K) }4 t: Qvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point) O+ `* ]& b( G4 Q3 z& i2 v7 ?
{
' Q; m. U( j' x! q; ~* m0 a" Lm_wndMenu.DeleteAllMenu();
: |+ z' m3 ~. G7 a) t) v; Zm_wndMenu.CreateMenu(this);
( c1 I) k( ~ }5 n5 z1 ^: Hm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
/ W6 {! d4 w4 w% l: U- f3 E; p$ a* u
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))4 Y# o- p6 q+ H$ a! y- e
{! D* k7 I3 g7 Q# w% n
//P以上级别才可以删除所有道具8 w! ~; i3 r: b% s" p7 c: ^
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
}. R0 }$ ?- g& ^7 w$ i}& l9 D5 f; y6 \4 X
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );6 {# s- ]; g* J
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
# I E3 U7 e9 h7 Sm_wndMenu.SetFocus();
# C! M' H/ J0 L7 h}( r! _3 R; ]+ p: S l& t! S
------------------------------------------------------------------------------------------------------------1 p1 v2 R6 S( ], @$ a9 J
*************************, |+ o8 F1 S, j5 T1 o0 Q$ Y
WndField.h文件% P4 X; S3 {5 I; W* \+ h/ D& N
*************************
$ _$ L- R+ \3 C搜索:BOOL m_bReport;( ~1 b, R2 B8 w
其后添加:# x3 B T) p* r" w9 p3 x3 b( C
CWndMenu m_wndMenu;
4 b6 i9 \. c# Y$ D1 P8 D# F- A( h搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);- {( l$ I) U h
其后添加:+ V+ M# T4 f2 h2 ^
virtual void OnRButtonUp(UINT nFlags, CPoint point);
% X. J7 Z2 t3 W( j- r. }6 h2 `3 T8 i4 e3 E/ t. i! f0 [
9 }! z4 Z! {( ?9 X# W I |
|