|
|
源文件中_Interface文件夹下WndField.cpp文件9 J: }( Z" O7 n s
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
6 f* {, ~3 v4 \) a# X. e/ o- u2 D& E# ]9 F
struct sItem
' n0 W/ ] L7 l \: N( T{9 b3 I: N. e3 l% ?
DWORD dwId;
' M: C( c' B/ H, @: i# s0 y U2 `# ADWORD dwKind2;
- m" x4 |# e6 H# @DWORD dwItemId;$ ~; W( c7 J6 l* M! |
BYTE nIndex; ^# p& r; W' b' x3 \ h9 G1 H
sItem(){
5 F" {' y ]& L: Z+ _5 u/ K dwId = dwKind2 = dwItemId = nIndex = 0;% d9 x. L- J4 n3 _4 ]; }
}
0 R( X5 y8 n4 @( _7 W& pbool operator < (const sItem p2)' x T2 ^0 ~- ?% _' Y
{; Q G) C. X6 @. L$ o4 E+ q. d
if (dwKind2 == p2.dwKind2)
0 Q0 O: @5 ]4 z) i$ d {
8 R; A) [6 {& G) f( T' X' @ return dwItemId < p2.dwItemId;
) M f- M$ p5 R. T* ^, g/ S }else{
. r, H# y& P( T5 r& e* V return dwKind2 < p2.dwKind2;5 @$ c. r4 V* P
}
9 K, N, ~8 ]1 \, b# I}- F) o2 [" V$ O+ n0 ?; N
};3 g9 L0 Z1 H, |
class CInventorySort
( k+ @4 I! v3 G{# i1 m. a% s( c
public:
# `) L2 X! l$ R$ O5 ?CInventorySort()
9 I. _+ g/ M' T" B, `" t{7 R0 y% k T! G. w y+ q
m_dwPos = 0;% g6 H$ @/ W8 [1 R
}' G1 z" l& P( g! G% I& i
~CInventorySort(){}) \1 O `7 e- } [' x) Z- s
private:
+ `: i2 Y: y) ~# U4 `9 PsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息6 q! Z$ O! b: u/ I" R: v3 d0 ~. Y
DWORD m_dwPos;. \5 I, \; x3 f
public:0 `- q! U+ t. h( f3 F6 z
void Add(BYTE nIndex)
0 c1 U v2 w% j) V+ O{
% A5 Y( }1 I7 o& k0 ~0 K if (m_dwPos >= MAX_INVENTORY)
; c7 W( T+ _( b6 @" F0 t {* r5 E Z" J3 X, t
return;' e2 S" L. v- Q- x4 N
}8 {) G# f* N O0 x
m_Item[m_dwPos].nIndex = nIndex;
! C7 M. I+ l8 d+ D# S5 h' G$ [) H m_Item[m_dwPos].dwId = m_dwPos;
2 S; W. X! }4 x) h' Y6 ?4 [& J- W m_dwPos++;
4 z' W0 z9 t- d% z}
% Q" _, I9 M+ T8 T1 D T" \: @) P5 J& ]BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
) J" y, R ^) }- H7 K{2 [/ J7 S6 Y% k& N2 Z! M" e- m1 h
for (int i=0;i<MAX_INVENTORY;i++)
* i/ J0 n5 C; W {1 m& k, @5 }/ V' K) }
if (m_Item.dwId == dwId)1 e% a3 Q( {( e
{
# z- h+ q3 N+ @; y7 _2 m% A return m_Item.nIndex;, M- j5 o' P# Q% m3 x4 G8 f. _
}7 _0 j! ^/ I3 r, I
} F1 Z) L' P8 t/ u& E
return 255;9 ]% _ O1 G- w' C& J4 P& L
}$ A7 i4 X0 [4 k
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
" B5 D+ o- R! O/ ~, |{% e9 q( ~% M6 g& G
BYTE nTmp = 0;
# a1 P% \# U6 M. [0 [ bool bDest = false,bSrc = false;
7 N4 A6 j3 ]+ N; ]% t for (int i=0;i<MAX_INVENTORY;i++)
6 k: ^0 I w$ ~" V9 D {
2 h5 c7 K5 a- C8 \ if (dwSrcId == m_Item.dwId)
& `) T; m2 O6 L. e& u, P) f( M {
" J( T l1 J5 j: t //id相等 则 改变对应的dest和src
2 }) w- x1 n$ J nTmp = m_Item.nIndex;
0 @) |; }# q- L m_Item.nIndex = dest;
) O2 H, b6 |( f* \ }
& V: Z( ^- A8 h }
1 V. }! i" W1 |$ E) \" A1 u //临时数据保存完毕,交换开始
# W& o9 r" X4 ]( s for (int i=0;i<MAX_INVENTORY;i++)
: u4 V, m$ }5 |( k; w, v9 n# } {
+ j' ~ C; Q: d) | if (dest == m_Item.nIndex)9 ?& t* c& K3 o5 v; Y
{
: f* W4 \% V. E9 @2 X //id相等 则 改变对应的dest和src# \$ b4 Y* Z% Z. t' [2 I" W
m_Item.nIndex = nTmp;
a: b4 E4 Z2 s% C& ^3 j0 T }& w. j: g0 e; \ i b1 y. s
}
. h) Q# E( v; ]# P. D; y}1 P! n% [0 }9 c. B) O. Z8 O
};( q" a# f; ]/ z2 l3 \/ m
-------------------------------------------------------------------------! U+ C* W* ]0 Q9 e
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
* `- \* n* d7 z7 m" `搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);) L4 v8 |$ c6 X+ g2 B2 Z
紧靠其上添加:
4 ^' s; v) v- f7 O4 Kif( pWndBase == &m_wndMenu )0 r! c. a- ?2 F T& j
{6 n$ P u1 n7 L. _
switch( nID )9 [$ N5 I7 m8 X3 `
{
# `- X4 d" j0 M* f. p) R case 2:
8 n8 l G1 a ?: ?1 ~/ D {2 a3 } q6 z- w2 Y; M" x1 G2 y
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
6 G: U1 g0 H2 I7 j7 J if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)). S; j! t& ^, d6 [" [4 V+ g% N
{
* d, ^, ^* k0 v break;
; T! A! B1 `" F. M v2 W. G8 f) s }
7 e! x( G& A5 y, x' j/ w1 L for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)8 V7 F8 I- J/ W% ^9 {4 p
{9 z3 W9 l d% C* t8 e
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
$ m- f0 K0 E* h, Z5 j if( !pItemElem )% ]+ Z1 R9 {/ n: R- \ p
continue;
n: \% o, g3 q0 P- B. k if(pItemElem->GetExtra() > 0)% H) _7 b+ ~! N6 J# ?# Q8 C! c! d
continue;
* P8 W6 h( R4 `1 E5 C% m if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) " Q. [, M. U0 _
continue;3 F! P' T. W- \% S: n/ t
if( g_pPlayer->IsUsing( pItemElem ) )
$ | i8 | z( `6 b, l" L continue;9 ^! o% C9 m7 {) H$ ] ?
if( pItemElem->IsUndestructable() == TRUE )3 I; L* \2 f/ ]9 C
{5 o. `) p& N' u+ ^
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
, F7 s/ C1 ~" w ` continue;
! V& E. R, Y/ X7 O2 ]6 B* u }# z4 ]- H' k U \; ]' x5 T
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);# ~0 I: m+ u$ W- Q
}
, s5 @8 C; y# n3 ]- V5 x0 X break;
3 ]- d1 p6 o$ U5 e }
+ r& V3 L* h4 I& u* W0 ^ case 1:) [: e! R# U/ a# V! V/ F6 e
{
* U- g& e- @. {! a$ x& e, p //整理背包" t, v# @) K+ X4 J5 G) p$ K7 b
//////////////////////////////////////////////////////////////////////////) ]: g9 o- x J3 _5 s" C% Z
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );8 F! I& n! m) r" }( Z0 J, o
//////////////////////////////////////////////////////////////////////////% a) K# R7 L! `2 T0 Z7 y0 K3 N
//////////////////////////////////////////////////////////////////////////9 |4 U; H) q/ }2 Q, `8 s
CInventorySort* pInvSort = new CInventorySort; U7 D1 b2 `" n1 M0 C
vector <sItem> vItem;2 u" q1 t6 E* ? l' N
vItem.resize(MAX_INVENTORY);//初始化大小. X0 Z% A5 V1 s" |1 @: \; H" g
//////////////////////////////////////////////////////////////////////////( O1 `% p; g- `) Q7 d% ]
//填充数据
) M7 ?4 y+ X2 z: r9 M( L for (int i=0;i<MAX_INVENTORY;i++)* h: ~ x# Q5 w4 F e6 h1 t
{
, }& f5 E4 l* o; r( s CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);& g$ A: h& M3 j" `" P) Z( |# \
if (!pItemElem)
$ n" Z5 j2 W' R) p) l* X7 U- l0 k9 I, | {$ |5 { ]; v( ~, t% U( Z
vItem.dwKind2 = 0xffffffff;
l6 | H1 `; }- i/ O vItem.dwItemId = 0xffffffff;5 x8 }- U6 m: o* d
vItem.nIndex = i;
, k- O2 r4 d7 i& d: n& _8 c# U }else {
5 a" A: V. B: T* H& J ItemProp* pProp = pItemElem->GetProp();
) S. I' W' p# z6 s! I& L; Q* v. B vItem.dwKind2 = pProp->dwItemKind2;
# c" H! i: _8 N2 @2 v vItem.dwItemId = pItemElem->m_dwItemId;
; z7 W; i7 k: t vItem.nIndex = i;* s8 h* u6 x6 X1 p+ Z3 A
}
6 u# A8 Y6 W- G+ g1 [ //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);! ?' Z0 [9 ~8 h n& P4 a9 K0 t& e5 g
}( l% y# \8 s) |! L5 U% k+ e
//////////////////////////////////////////////////////////////////////////! C& W: W3 r, y+ U" k
sort(vItem.begin(),vItem.end());//排序
' o3 w4 p0 Y5 C //////////////////////////////////////////////////////////////////////////0 t7 p0 }4 b5 z+ V& l: L( ^
//交换" S" R6 N- ~$ L/ M* R/ r
for (size_t i=0;i<vItem.size();i++)% y" F# B+ n1 J3 l; N7 C( ~
{
7 A' L5 p: ?3 ~6 ~: L //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
( d, `6 ?/ N& e pInvSort->Add(vItem.nIndex);9 F: s3 D- Q4 \% D: p1 H5 o
}; H0 a5 p% p5 G' Q& C
BYTE nDestPos = 0;
! N" K# ^) L$ N' A# o# n for (int i=0;i<MAX_INVENTORY;i++)
# Z1 t; U* r) e {
2 p: [& Z/ z6 M" N, D6 X% y1 ?1 L3 r CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
6 G4 c: L& p2 N' t) i if (pItemElem)
' r r6 j1 |" j! _( c3 \ {* L7 y1 V3 P: u* O7 M8 W
if (IsUsingItem(pItemElem))6 F; n, u9 N h4 s0 [1 _
{1 }8 i* Q4 n, ~& _/ B# g( l
//这个位置无法放$ H L2 [' v, j2 l- ]: q# \! H- j
nDestPos++;9 K8 Q9 O' g3 Q1 c3 S' G
}% M4 Q0 w! ^, k) [' U3 f
}) I. L( A. }& E: ?, e# d' H" ^. Z
BYTE nSrc = pInvSort->GetItemSrc(i);
+ J* I# L! e) p' M pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
3 r5 j) h* z' A& v3 u1 J; R- ~' C if (pItemElem)6 R8 }4 q6 n. ?6 i5 g! s
{
; X, |1 r% a: K/ V2 O; k1 Z# q if (IsUsingItem(pItemElem))
$ O$ _! S! x# r) d# J {
8 L- c1 Z" {: X5 Y //这个道具无法移动,跳过) X6 m& T. D& Y R! p* a
continue;
. @7 E# L* ~" H* ]6 b1 q }$ E1 Z& b0 Y8 d4 h( x* ]
}else{
5 U9 Z# K8 M2 x- x" o+ J" N //空位置 不用动
3 u; O# G: @* k4 H1 \( S1 T" V continue;
4 Q8 `* K9 g' ^7 X3 \ a }0 V9 A+ Z8 P+ m5 z- n* M0 d$ b
//////////////////////////////////////////////////////////////////////////0 @8 m3 g! T+ r5 K+ ^# N
//开始移动
+ H4 x$ n! T+ Y if (nSrc == nDestPos)
i2 H+ v$ ?0 k: t {* C1 x5 L1 H$ B3 [6 c$ o) P
//原地不动( Q5 S/ |8 q7 a- `5 L5 ]
nDestPos++;
* q8 r4 e) }* M0 y' x continue;% O5 A! D: w' k! y$ G6 Q: w1 m
}3 g. M9 m8 q) F3 |) z
pInvSort->MoveItem(i,nDestPos);5 g, V# C% g- O* M
g_DPlay.SendMoveItem(0,nSrc,nDestPos);. I3 [. O( w. C' L& S* y
Sleep(5);2 `& \: e! O5 L
//Error("移动 - %d->%d",nSrc,nDestPos);0 r9 W0 i; l; ~* d* N; _1 ^+ ^
nDestPos++;
7 O) ~% s4 l) D4 F }3 P$ {/ `+ U5 n8 m6 U- M- J0 P
//取第一个元素的信息
% K& S0 m2 t5 o5 c0 c- d /*
& A8 r+ g1 N6 ^# D: z if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
c5 t; }2 f' {" T$ X1 Q/ b. b- S {
3 e4 O4 P9 c6 L2 p; G6 ] Error("Move - From:%d,To:%d",vItem[0].nIndex,x);& P# h+ A4 l/ M
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
) b* A, P. f- A2 X& N }# {/ b4 x! d4 z5 M. c
*/
+ O! ]2 i5 A6 g- l) b7 Y //////////////////////////////////////////////////////////////////////////
7 s( [, S! m& R2 o- j/ G+ Q9 k& |/ h break; X/ O' a; y) Q1 G
}
" g1 ?- o0 J) Z2 c6 k7 z. w& ?, C4 m }
& p7 [* V$ d' \) z( P1 K0 G}3 F0 z4 G1 @. {; r( q, s
m_wndMenu.SetVisible(FALSE);% s9 K# N" \* r$ t! _4 [, j/ i
0 P6 T. i( r1 L, {0 q: G5 Z: H" i--------------------------------------------------------------------------------------------------------
, p( z$ O/ [6 k3 r& ~: Z搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
}7 f; ^' ~5 r- H G. w. K{/ M% O- B! j+ e7 z
BaseMouseCursor();
' {. Y9 y7 J3 p x- y4 Y3 b}
% Q% n' X; [* ^- P在其下添加:& {% z- Q( ^1 ^; w4 `
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
! n) l. i+ G; \3 k{: T9 ]& p% Y4 N) n9 }, r
m_wndMenu.DeleteAllMenu();
$ n- @8 @; v- {; X. W/ Nm_wndMenu.CreateMenu(this);
' L9 m* t3 J5 r9 @m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
( t/ f# Z4 `9 J) ?3 Y; j* `5 ?1 i' }, B+ G. b% a) i0 a
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))" m6 ~! M- Z0 ^. e
{
' \) J4 o& U- i, x+ F3 `2 H6 y //P以上级别才可以删除所有道具
. B# u; p, g+ W m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
7 v3 }6 y' S) A' C& C}
# z3 ~* e, c7 h2 g' w0 Q% s4 J1 ^m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
9 @6 H. D* R6 X3 km_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() ); m" f4 D& V. Z% s& M+ g" m
m_wndMenu.SetFocus();, o o/ c: V- a, {5 y0 ^* s
}
( y& @5 N9 |8 r! z/ f- h------------------------------------------------------------------------------------------------------------
+ y* z3 |8 ^- P+ Z$ m*************************4 w9 d8 d3 s8 \
WndField.h文件
# @% k& c( X3 f6 [# ^*************************
3 B7 w. l7 }9 W7 {6 J3 B8 \/ H搜索:BOOL m_bReport;
4 l, u6 t1 d$ ^3 X其后添加:
+ t$ H, X8 w, Z7 h I! ~6 TCWndMenu m_wndMenu;+ f6 S# k- U. |$ j
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
- x8 \' |0 S8 {; @3 N; a8 Y( y6 S其后添加:& y; j/ I y5 F9 i8 V# ]
virtual void OnRButtonUp(UINT nFlags, CPoint point);
2 k/ k1 s5 `9 \# W" }. {
+ f2 k! Y, v4 R, f- Z/ _6 G% _, M/ c8 I& B( Z; S; @0 U) F
|
|