|
|
源文件中_Interface文件夹下WndField.cpp文件
8 l# A& q- \, B( {' [搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )5 _7 d3 I( i- r/ S# O- P
, _, K$ ~1 Y7 _
struct sItem
# V( K4 K3 G2 G{
" b- q& H" T! E: ?DWORD dwId;* n% E3 h# X$ e1 P# v, ]1 ^' q! N
DWORD dwKind2;
g" b3 G9 Q4 {" NDWORD dwItemId;
# c) m. c/ J! p! w1 IBYTE nIndex;
- t. \7 }8 W# ]sItem(){
$ P) ^1 l# z$ i; ]- Q8 @/ X' Q dwId = dwKind2 = dwItemId = nIndex = 0;
& Y0 l% a( W0 o, }) _# \}7 Z9 d! J% A+ e/ F, l6 H; e6 ]. O6 e
bool operator < (const sItem p2)
7 O& M: l' l! L+ \! {{1 z" f1 Z5 V4 b/ I
if (dwKind2 == p2.dwKind2). @0 X. f: f8 w# q$ t6 s
{
6 y0 F- d) Z8 \5 E7 e5 `& K3 i return dwItemId < p2.dwItemId;
( V4 A1 r+ |0 X$ ]- ?- K& ~ }else{/ C) U+ O; P1 c5 V( C L
return dwKind2 < p2.dwKind2;- r5 a- A7 O- z; d9 C
}1 D, N# I$ a( p* F" ]* n4 c
}- }; n3 m6 [' K8 [
};6 i( C" l! h9 |7 [* K) w2 l
class CInventorySort. h$ |& ~* L/ G
{
5 V4 B! x, N# I% ~' {; Lpublic:
% |; X3 B* Z0 O" {3 v$ OCInventorySort()
& x6 \- Y, r+ Q$ t0 R{5 p$ s5 K+ i5 N# z9 b: X, S
m_dwPos = 0;8 @& @5 S/ D: c: i
}, U% y" S: w) k) v1 g7 l
~CInventorySort(){}
# E3 r8 _; b# z! fprivate:
( j; v3 u! i/ ^0 j+ u* L& X' DsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
& r2 H1 Q. C" pDWORD m_dwPos;3 r8 p+ }$ v- q) E
public:! H% z* {( _2 w+ R* X
void Add(BYTE nIndex)3 N z+ A6 N4 d, b5 ]. D6 `; ^
{
7 @, W/ D' N4 f. n9 R3 d if (m_dwPos >= MAX_INVENTORY)
5 _2 }$ `+ e( G0 F0 ?6 z0 u {
7 [, H" M$ t0 A) i return;
2 R' H! L# x% ]* V' e8 A5 p }' y% D1 V# k: }& E
m_Item[m_dwPos].nIndex = nIndex;
7 t! W5 ^- b: b. M m_Item[m_dwPos].dwId = m_dwPos;
* @! F& e d& T8 @& X m_dwPos++;1 N' ]+ e% h5 ]+ o
}5 c2 a% }& \4 [6 Q9 Z$ a; ]; d# K
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列 T& j7 V7 u: m
{
, C& W9 l( S' z7 I: f/ K for (int i=0;i<MAX_INVENTORY;i++)1 x- m2 p$ N( y* r" R0 s- S
{; w2 N* U6 E2 y, }( _" X
if (m_Item.dwId == dwId)
8 z: r) o9 P3 ^6 ~4 I- b {! T0 |# T4 X% y( |6 z
return m_Item.nIndex;
9 U& X3 x; q$ ^4 x }
9 p2 b" ?4 e1 [ }6 `' [( M( _2 f d: p8 G' C. ?
return 255;
6 J; E" u/ R8 K* v}) H3 `% ]( Z3 |
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置5 H7 n/ X; a& J9 y* |
{0 e, l7 U; c. Y7 s* o! n4 S
BYTE nTmp = 0;
) j' J( ~; C9 H* C; H. q9 E bool bDest = false,bSrc = false;
2 _9 S) J( [& [. p% j7 r for (int i=0;i<MAX_INVENTORY;i++)
% t8 l+ {0 X- F. F' z4 R% c2 c% N {" G/ U( z7 f) f# t
if (dwSrcId == m_Item.dwId), O) U+ G' J" E+ _7 J$ p0 q! ?1 p
{
/ f/ A% E3 N7 s& Q% t' c //id相等 则 改变对应的dest和src* S" R+ b9 E1 h' P
nTmp = m_Item.nIndex;
4 r8 h2 `7 ?) K1 t1 \& h7 Z5 @ m_Item.nIndex = dest;
6 E% v. F5 V( \! ~% V }7 A5 U/ [1 E( C* k: D ]1 V
}
9 G, _- K2 A, ^# y4 G2 x //临时数据保存完毕,交换开始. e# C' Y( ~9 E/ E
for (int i=0;i<MAX_INVENTORY;i++): n1 i8 _9 ?& s. h0 u2 R
{
" M) W$ Z- [& Y2 ~! r" @ if (dest == m_Item.nIndex)( A8 m; `, i) h, H- I( k1 G0 u
{+ `2 N. U5 D$ o/ b
//id相等 则 改变对应的dest和src
! ~1 j8 I' J4 T m_Item.nIndex = nTmp;& [8 m3 t4 P, `
}
2 r. k% U2 W5 {5 ?( C0 V g }
% T# T- v! p/ V) F}# p3 x9 r( X6 i$ U6 N
};+ z% y3 q1 i. _# c0 g* z7 o9 h1 I
-------------------------------------------------------------------------6 `1 T/ Q2 w# E/ E: q
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )1 a p3 z/ `1 N. ^7 D
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);2 Q6 v# \8 t. q: u/ ^$ E4 U
紧靠其上添加:
- E( J, h3 o* y% i: Fif( pWndBase == &m_wndMenu )
& j7 O. l& t' N9 C( u, j6 K0 O. `{: Q5 }0 \ }# X" B+ L& f1 E
switch( nID ) C; Y; O" f% t, R2 {8 u
{
- c! k. q& t; D2 n+ c case 2:
: \, ^5 C- N3 P x5 ?" r5 j {, h( w% i# k. N Z
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);" C0 M% I. C; x) d" x5 [) k) Q, J
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))! F: p$ {% X; C1 B, b2 P# }
{3 {7 Z/ N u/ p6 }
break;5 Z* c A0 |" z. {9 B& Y& [
}
$ y+ {) q7 r5 a% S- T7 C for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
5 T( c4 I$ L; F {! i8 \9 C* w# T9 n; z/ \
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);1 v: p. {- i! M. l
if( !pItemElem )* y" d( z* I$ Z/ a% z
continue;
n' R6 N) ~4 m! ^, I8 [: ^! h if(pItemElem->GetExtra() > 0)
! i! {$ o2 B8 N3 k$ W: q" `4 D! P continue;3 @, p7 k4 d9 i5 w {
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 6 M. s) R, n2 l1 R- k( l
continue;+ Y" s, V) W9 z. K* @, e& b
if( g_pPlayer->IsUsing( pItemElem ) )" j6 V7 z6 p+ f. T
continue;
5 d% g* k3 }( Z# l3 q9 e if( pItemElem->IsUndestructable() == TRUE )
. i& c0 E5 N. W/ B9 m+ R2 e {
) `6 q& b% c0 x0 Z6 g' L g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
% _# i9 I; Q( T" S" R continue; j$ z2 V" J, n' M2 }3 t0 m
}" t; Z+ i1 x G; S
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
C, d, x. \6 d; ~7 u }
* n% C+ ~" S4 D! L% K7 c9 q; f% _ break;
( N$ f) F. O/ K6 `6 ~; m }& Q+ e6 z1 P% V
case 1:
/ k7 ?2 v" ?) U# Y6 Y$ H {+ |2 m7 i# ?! W5 z
//整理背包
; v) D& Y1 p5 d! Y* Y* w //////////////////////////////////////////////////////////////////////////+ \+ u' p/ k( X& g% n
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
3 [1 {* `8 T9 w6 Z( B9 Y/ p //////////////////////////////////////////////////////////////////////////
- `# Z, ~! B: V: b# T( m6 w //////////////////////////////////////////////////////////////////////////' f" R3 Z* t( U. A0 B
CInventorySort* pInvSort = new CInventorySort;+ D( t' I5 ^( {
vector <sItem> vItem;
* }1 k+ h$ x" V/ {- A# @' N vItem.resize(MAX_INVENTORY);//初始化大小4 `6 r: ~ a3 P! U
//////////////////////////////////////////////////////////////////////////" X" v/ f9 I' `! R O+ @
//填充数据
4 f) I$ a( K4 _0 ]' t; L# n for (int i=0;i<MAX_INVENTORY;i++)
* t# w2 ]: T2 r5 O: ^8 d9 B' ] {) w5 d2 ]& P5 m& S. G
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);0 R, W4 U- P- W$ {6 N) t
if (!pItemElem)0 x/ g5 s u7 `- {. h$ V( G E
{9 V0 E& |4 `8 J6 j* ~5 |+ s
vItem.dwKind2 = 0xffffffff;
9 n# ~1 }/ L" S% u3 y vItem.dwItemId = 0xffffffff;
3 o" ^ c/ g. G vItem.nIndex = i;; O5 L- L" W# c/ f& f) V0 e' |/ k. ^
}else {
: q& Y/ ~0 r! p4 N6 P. D ItemProp* pProp = pItemElem->GetProp();$ {& K! a/ k/ S
vItem.dwKind2 = pProp->dwItemKind2;+ f* c0 j3 }& j
vItem.dwItemId = pItemElem->m_dwItemId;$ S4 K% Y/ D) D( g$ A; m% K
vItem.nIndex = i;! L. u6 \" E1 m& j, J9 h' K
}
- d6 Y% \0 T! ?8 u: _& D" t4 v& s' q: x //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
9 \. m0 T G) j! h }$ e5 h2 K4 K4 O: [$ o
//////////////////////////////////////////////////////////////////////////
0 D( o# c' O, O( _$ L, J( i sort(vItem.begin(),vItem.end());//排序
0 w8 X- Z2 B' Y //////////////////////////////////////////////////////////////////////////4 h/ e1 p7 `% a! A! B$ o' z4 W
//交换; b3 v& \2 q( _6 G8 q5 e3 T8 e
for (size_t i=0;i<vItem.size();i++)% N( q) |1 w' I4 t7 X4 ^+ [/ m$ g) p
{! \, w; Z) C7 }$ T \
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);6 C7 o, F1 l; ^2 ]
pInvSort->Add(vItem.nIndex);
7 G* Y( Z {2 [6 ?7 V5 e J9 e: T2 y/ e }* G7 _; R4 m2 L8 V2 L* t
BYTE nDestPos = 0;
% |! s" ]7 U) a+ q1 c' H! W) Y. h for (int i=0;i<MAX_INVENTORY;i++)5 O9 W6 T0 n) n' E- o% N
{% R9 j0 Y8 b/ l. m, |& d4 i" i4 z
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
, t( }1 h+ Y( A4 I if (pItemElem)$ \" Y1 f5 p! ?" E
{
$ A& g* i6 S# W5 X6 m1 ^ if (IsUsingItem(pItemElem))0 C: L, N' Q" y, V# e
{7 H) B5 J3 p) b: p( D: u+ Y! i
//这个位置无法放* I( H1 F/ Q5 n6 v# P1 j% R/ ~
nDestPos++;
5 l: ]( m, j4 i; o) }% `+ M3 @ }* B' ]; F) C! F |1 t( d( r
}
' W# [. I. y2 A3 }' h Y( [$ ? BYTE nSrc = pInvSort->GetItemSrc(i);' F$ p* H P# d6 a! Q% ^) v. b# c- i
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
/ ^" `/ i' r: q5 ~) o if (pItemElem)
5 c* U& r( Z' T" S3 S {
1 F, f& d+ r: |; @ if (IsUsingItem(pItemElem))
( p- }/ D8 ^ g {" J; ?3 N7 g0 P$ G0 V: [
//这个道具无法移动,跳过
* i7 K/ {$ `5 J- Z! [: [' F continue;
% K! a# w0 `% G1 _ }4 n6 f7 N4 L: z8 T; w D* E$ J
}else{
; T1 ^' }1 L) r. @0 I //空位置 不用动* g; ]1 @7 D2 _, ~
continue;* U4 h, H1 M1 P4 {- }
}# t) b1 @6 M$ ?2 \( ~
//////////////////////////////////////////////////////////////////////////
6 w. K: A6 k4 m- `3 \6 J: Y, z* O; m O //开始移动( N. y! }* ?6 f% D
if (nSrc == nDestPos)
0 ` n: H: d- k% c( t {, `, u0 ~- ^* I: s6 d4 W8 U( r
//原地不动
( |* H# b. q+ Y0 u4 F; W+ y( U nDestPos++;+ ^8 t* q6 \2 ?5 I
continue;
' h& N# `; D$ ]+ m+ B- l }4 _ V( J$ U! T- s) T3 W
pInvSort->MoveItem(i,nDestPos);
7 d) R o. N) z7 q3 H g_DPlay.SendMoveItem(0,nSrc,nDestPos);. N ?- S, C( I: L% q9 q
Sleep(5);
& ]( m( d# G. x# J* v //Error("移动 - %d->%d",nSrc,nDestPos);2 p7 V( W4 W- Y1 L+ c: d; {! [
nDestPos++;
- R/ e! H" o! D9 A }
1 U# e1 z+ j3 w7 Y/ x* I //取第一个元素的信息3 l/ {& R0 E$ s8 z3 W% r
/*- W9 m8 X( ^" i. k q
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)* B2 A# E6 I) Q! G
{9 Z5 }; V# C$ t; V' q
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
. h8 g; g4 H$ _" m g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
2 k$ U- c4 l* n: k }/ I+ j8 x! @- J- U" b4 R' U9 l
*/
7 k: l4 c+ r5 r' x //////////////////////////////////////////////////////////////////////////* E( A5 n- t1 O0 P- O8 I5 [
break;1 h0 w3 m4 d9 P4 w' `5 J
}
% F1 q" z `) C8 x } 0 B& `- Q( f+ G/ B8 a4 D
}0 f) P, ?3 _0 e9 i, p
m_wndMenu.SetVisible(FALSE);1 i( b$ i5 P' r! @
) X" x" b" M0 V5 S
--------------------------------------------------------------------------------------------------------
2 N X+ m6 r7 P, S2 _搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
2 _$ l0 k }) z! j{( v8 n6 T) ^1 h, u; A* y M
BaseMouseCursor();' U) R9 x- d' K0 d3 y1 d
}
1 @" n. P4 a# Q! v v* ~在其下添加:) \% ~' A$ R, U$ [- K# y3 [8 _
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)# l5 G" C# q) C' @3 r5 X4 j
{9 M# F) T( j. h8 z) n2 E- _
m_wndMenu.DeleteAllMenu();
# J2 p" R% U& t0 G4 l+ @2 Z/ @m_wndMenu.CreateMenu(this);
: B! e8 g8 _# t4 ^0 f4 dm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");1 t# M) G. v: Y9 p2 d
1 D: s) b& s3 [" [" @% s; ^% S7 `if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
7 J- b; k( Z2 X9 v) y! @{
8 J6 b9 H- `# _5 p7 ~7 L5 b. A //P以上级别才可以删除所有道具
6 J" r! s h; o m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");4 [' g8 U/ |8 \* k5 S) g5 H
}: R+ t' T: I$ N- p5 O
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );+ H0 u: B G8 o! @% Z5 B
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
+ P1 [" _( }# o4 V* J3 G/ Bm_wndMenu.SetFocus();7 c% [' T+ {9 ^/ e) T
}4 w) @$ f- S3 H1 u$ Z, i) N! K
------------------------------------------------------------------------------------------------------------" D6 z6 ~* K2 `; f3 o3 k
*************************% M* c' j: z5 c9 ^3 a0 ?" G
WndField.h文件1 Q& K4 J% o; W" x3 k/ Y* Y B
*************************
1 x9 Z7 Z3 H6 R' G搜索:BOOL m_bReport;
8 \) s8 G- U6 q8 M9 W3 Z5 I' w2 }其后添加:
" ?' X* Q+ {: U1 C8 Z/ g: b( [9 eCWndMenu m_wndMenu;
0 Y2 F) S' E4 M搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
- q6 k/ G. M& b! u其后添加:4 u$ [% s& { [, e8 w" q
virtual void OnRButtonUp(UINT nFlags, CPoint point);
, M1 \- o3 g' }. D) X8 W7 p) g4 k3 V1 Y" G: u; r8 m
* e8 v# X. |+ Z& ^" Y |
|