|
|
源文件中_Interface文件夹下WndField.cpp文件
" j" I' w+ Y% S搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )1 [. g: q8 k+ u) n. O) ]
* ?7 P. H C6 {" s; Ustruct sItem
1 b1 R& n9 c' m{
+ g1 B% H/ b# w; cDWORD dwId;
( |1 ?, x' o1 L3 S' RDWORD dwKind2;9 L ?1 l& M2 y0 l6 g7 P
DWORD dwItemId;
! K; c+ c( k# n" B- dBYTE nIndex;
' c3 n. z/ q- I+ v; fsItem(){
4 o3 K, g) U% t* S) P* l) p dwId = dwKind2 = dwItemId = nIndex = 0;
. E0 A+ R5 ^$ O4 ?}. r5 h* S) ?6 u3 \- p$ v3 {! P- \
bool operator < (const sItem p2)
: C: ^$ m( s9 w* E! ]{+ J/ ^. q5 @ Z4 |0 c% q8 @7 `, W
if (dwKind2 == p2.dwKind2)$ S& a9 ]7 n N' h8 J# x
{
( O5 V1 j1 |8 r1 x8 W return dwItemId < p2.dwItemId;) W8 U6 a9 w( c; T
}else{
! O4 I" a) m$ W+ ]6 G8 V return dwKind2 < p2.dwKind2;* n t; n4 a f# d. Y9 U! c2 q
}! Y" X2 _0 W6 K: K! Z Z+ S+ Q
}
0 ^) T$ P* m3 f7 k/ L! M; F};! C% m1 P* E5 Y, f
class CInventorySort/ |0 v& B0 m5 S. p# |
{( M1 i2 c7 Z. |- F2 y
public:
( V% e- ], F) w) i. jCInventorySort()7 S. Y) K% u" i7 _+ j! F
{
, u# u3 ^' x1 g1 w! j4 f$ [0 [ m_dwPos = 0;
. S" P- ]1 x2 @$ g}' Y: Z" P% |: Q& u4 d5 }+ N
~CInventorySort(){}% P& l! C; l* d5 I, J) r4 _
private:9 k* |; C) g8 v' D* l4 H e
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
, t$ h! l k, ?- EDWORD m_dwPos;- t7 @' s" @" t" V
public:
) |; b9 l0 B' N. |void Add(BYTE nIndex)& y" u0 C3 n$ W, W* Y. A" l
{
7 h7 x# D! u. Z# x+ ]5 I* T if (m_dwPos >= MAX_INVENTORY)0 Q: K4 L# c0 u
{, [+ ^. {# o$ u8 Q
return;
7 _! x/ _, u& L+ l+ l# X }
' R7 Z! H- e. K m_Item[m_dwPos].nIndex = nIndex;/ D# s s4 r8 _/ |
m_Item[m_dwPos].dwId = m_dwPos;( ?9 _) N5 p* Y* O- e: E
m_dwPos++; @/ `! e. I K0 c+ Y# @9 ?( }: Y
}3 L7 X- d2 M* |, e
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列8 J4 p( n5 p+ Y
{
4 E/ Q) i7 ?. E: x3 M9 M+ T, K( z, ^ for (int i=0;i<MAX_INVENTORY;i++)- r- [0 _( S" Y* |+ e- Y
{1 M/ }) n' C$ {: x. e
if (m_Item.dwId == dwId)
4 l7 }/ e& B3 ]% T5 E {
" z7 U' a j% Y return m_Item.nIndex;
2 n4 j. ?) d5 X" f; d# x }
9 a! d" R- _5 c# o/ I2 R& s }
! O$ Q! B0 i, A! E: |# o8 b# w return 255;& I2 l7 t; R, V! [9 c) e
}
$ \; h3 b# U' q S' qvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置- A, j4 D( k; ]( V+ F- N
{. u' t. ]! T4 n( O
BYTE nTmp = 0;' W$ i2 ~% y3 E
bool bDest = false,bSrc = false;
" b6 t& c0 ]/ r- J- j/ B. Q5 B4 r for (int i=0;i<MAX_INVENTORY;i++)$ |+ }) J) N3 `: u y" M
{
4 }9 M+ D" ~2 o4 r; n s( | if (dwSrcId == m_Item.dwId)
% t! ?$ [; S5 l* } {0 \' R8 A% t& Y
//id相等 则 改变对应的dest和src" m2 F7 w2 S2 |% Q W/ U6 d
nTmp = m_Item.nIndex;+ Z+ l8 p7 |# a* q- T7 \
m_Item.nIndex = dest;% Q9 i/ K* P+ M0 w/ ^
}
4 N4 ?3 R0 o( C" H$ \3 D9 o }
o' k _% l6 y C* O //临时数据保存完毕,交换开始
1 k/ s- A6 G1 z for (int i=0;i<MAX_INVENTORY;i++)6 w# U! V6 n7 S: B3 g
{
: T0 p e& ] {( J! N7 i if (dest == m_Item.nIndex)
# W, C% F: F7 c8 v' I. A# c {
8 `1 q4 L2 j- L# q //id相等 则 改变对应的dest和src- u, l$ O4 T+ d& ]# P4 j5 g: A c
m_Item.nIndex = nTmp;# C# y2 A7 l: x8 B
}' B5 V' u- q; O& P n
}5 t& C% y- P; Q* H
}
9 i5 R8 z1 P5 e};9 r7 i. x% f1 }1 F; a
-------------------------------------------------------------------------
, r; |- \8 m% R. T; _依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )* ?) {9 t8 Z' [$ q
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
* v) C! b9 s: J& E9 L' u5 k6 f紧靠其上添加:
/ A' T, l, v" c6 tif( pWndBase == &m_wndMenu )
# C, _, J s, g, h; w# g" G4 d{
O& S% j$ z, u; J( d6 ] switch( nID )0 a, H) s2 F6 K/ T: L% o3 V3 F
{
$ {; P2 `; M2 |* g1 ^ case 2:
. X/ t& n1 v, ~ {
, t" _- Z, C* D3 C //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);$ [2 {. [9 F1 l: o; k% L
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))% `2 m" k/ H8 `* G, \
{
; N) p3 T( i+ P/ x break;
9 Y# O; _4 N6 V8 {9 h$ o }' K) ] u$ s; ? Q! m
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
3 u' u& A4 j2 p/ |4 x( W {( u* A8 D2 [% ~2 ^' Q
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);+ W" R. T3 N! \& B% o9 H+ c% U
if( !pItemElem )
! z1 }1 X2 e; w/ p& q continue;
0 S- j0 N3 A9 j if(pItemElem->GetExtra() > 0)
! V! h3 a/ I" K continue;
8 c I4 E* b* B' Z* d- w% _* x if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ; G- F- G+ B% i5 `- a$ r6 [- T8 G
continue;
$ m6 V% @$ J, b* a" X if( g_pPlayer->IsUsing( pItemElem ) )
- u6 Q: s$ R0 t. U6 `) ]) j2 r continue;* [( z9 \" _7 ~& t( k
if( pItemElem->IsUndestructable() == TRUE )
' d- N- C9 \. H% A1 l+ B& t {! l- W5 T: g) k6 ~& \( ^
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
. l, B" N y* P6 W continue;* Z+ s1 b, u$ f) P) N
}
8 L9 P: q( o# G0 Z$ I, Q6 o g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);2 q8 ` B8 y" w: K E: D
}# ~! L, \- I# b% c0 U' d! f3 P( F- K
break;
* L1 W0 S& p- K% V% Z8 X4 m }
' C( _% g4 G" H; \5 F case 1:
+ I1 P; j9 f1 [' F4 [0 k! q {/ B( J& t4 M/ H* ~* d9 P
//整理背包
; e5 k, {% M# y4 r //////////////////////////////////////////////////////////////////////////
8 G* o0 W& T9 } //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );/ T! J' a8 d1 y% |$ E% m
//////////////////////////////////////////////////////////////////////////* O& w }* ^" Q+ `7 B3 M
//////////////////////////////////////////////////////////////////////////
. [. z) R9 E% p6 T: u CInventorySort* pInvSort = new CInventorySort;, d, t- J/ t3 M8 Y
vector <sItem> vItem;# I4 P b( X1 r$ a
vItem.resize(MAX_INVENTORY);//初始化大小# J6 i* Z1 |9 `$ K- J6 w
//////////////////////////////////////////////////////////////////////////
5 f: O9 n2 g. T7 b" Z5 E3 E //填充数据
. {/ h6 _9 X5 R5 f0 W for (int i=0;i<MAX_INVENTORY;i++)
3 z/ V8 [. I$ ~! {" p5 d" ~ {' j8 u& F \ D" F
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
2 J+ |5 [: v) @! G" c% k if (!pItemElem)0 ~7 E% }" v; e% @: r+ L6 P, g4 t
{* Z: M0 \" L2 N
vItem.dwKind2 = 0xffffffff;
! h: U+ z# f N5 M vItem.dwItemId = 0xffffffff;) H9 A9 F0 d! C$ [* J9 [7 }
vItem.nIndex = i;3 V! p. s3 y- ]9 [& }
}else {
# t/ q5 [, p2 B ItemProp* pProp = pItemElem->GetProp();
% x; h5 G4 O5 B) M& A2 \) d vItem.dwKind2 = pProp->dwItemKind2;
' ~8 Q0 B( f! J* t" {( W4 w3 s vItem.dwItemId = pItemElem->m_dwItemId; I4 e+ K; [: i9 c; y0 ?. Y* W
vItem.nIndex = i;0 J( z3 w: w- X
}
0 I, a3 ]# r1 g" }6 L$ Q7 ]. M //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);' f. A* s: j6 \2 u: K' U
}
0 {: e, u& I. y( R! z //////////////////////////////////////////////////////////////////////////( e) N6 N8 Z; k0 H7 W9 E; m
sort(vItem.begin(),vItem.end());//排序
% @5 |8 {( `; { //////////////////////////////////////////////////////////////////////////
) y- ~& Y6 L$ b4 U7 d5 ? //交换
9 x4 W! Z: N$ f7 U% Q for (size_t i=0;i<vItem.size();i++)
! p1 {4 f: M3 v3 j {0 h3 I1 r6 M; G) ]- \" o7 s# M8 [
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
8 c5 t7 i9 r' w pInvSort->Add(vItem.nIndex);
$ i) q- P" d% z }
a' L* A8 r) @# o" f$ i BYTE nDestPos = 0;
- W% b% |; C0 ~" v0 t- J2 G for (int i=0;i<MAX_INVENTORY;i++)# W6 C3 R5 z0 K% B7 n% S, _. ^
{
1 I6 z4 Q u9 ` CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);! o: t1 V& ^/ k) H. J x
if (pItemElem), \8 F' v. }- B* M1 Y- Y6 P4 z; A2 {
{6 Q) H5 Z0 {! V7 m" `/ B% R
if (IsUsingItem(pItemElem)), [2 e+ u, `: [- E
{. ?- m2 k* q* r7 a* n
//这个位置无法放9 d1 I8 c/ _$ Y ]+ d! V
nDestPos++;- Q$ B. e* Z* {
}
6 W" j: h9 t$ s- O/ ` }+ k8 c+ U7 s9 ]- Z6 z8 E
BYTE nSrc = pInvSort->GetItemSrc(i);
* B+ i6 _ E3 U pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);4 U$ Q4 M7 \! r2 K! |' B l
if (pItemElem)) _6 c& X: J8 A% x
{
" Q% ?% z" L0 O0 N# ^ if (IsUsingItem(pItemElem)) D2 Z3 `# E- W
{
" d0 {( P' p4 O: Y //这个道具无法移动,跳过
7 p9 b+ Z. ^0 j v5 x& ^ continue;
% p$ v7 J9 B1 R+ @3 X4 w9 T1 B }0 C b5 h- N5 x6 f1 ~+ q
}else{3 {9 c* m/ R& s; g* \+ h
//空位置 不用动+ u6 p4 w- `5 r- u0 e' R
continue; A# J4 H' f* X8 R- \
} \+ Z' N P g- P0 j- }
//////////////////////////////////////////////////////////////////////////* E+ g+ E- `4 }1 G8 m: W M& w
//开始移动/ E2 D, C5 T) H5 Z4 A! H
if (nSrc == nDestPos)
+ K, \% }( Q, `" I( S {
! ~7 a" Q. r+ T# s' c1 a //原地不动
4 m5 h; J9 Y( d nDestPos++;2 e9 U6 J% s0 B$ x5 G, ~9 e
continue;+ Q8 B( N j0 |2 Z$ P
}, t- q' i6 j3 O: f8 Y( v, h
pInvSort->MoveItem(i,nDestPos);
& _* P j9 w D% Z! V g_DPlay.SendMoveItem(0,nSrc,nDestPos);+ r7 t; H/ w+ [ e o4 n
Sleep(5);
4 B( Y1 r& `# Q/ g0 ] //Error("移动 - %d->%d",nSrc,nDestPos);8 M% n) Q5 Q8 k( y* T% |' _5 K
nDestPos++;
& b* m3 s& `" I: m9 ]6 ?* y# K }! Y: K0 ^8 K; ]' `! l5 I
//取第一个元素的信息
8 ?% U, g& I6 n6 s0 x' ~ /*9 `# ]" K1 P2 m8 f
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff); r' p6 p/ l- C
{
' ?+ [: s6 i7 P" V Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
, J& m3 X% o6 @5 A9 z( a0 \ g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);. J- \( w2 w& B# m; s# [. e
}4 B& c8 F& w1 P* g3 R t
*/3 G/ T/ d* T7 l# {
////////////////////////////////////////////////////////////////////////// a# b; s# l" }1 ^; a! O
break;! [$ d) O4 x3 i7 S; A S3 ?
}3 O! d' k3 Q. V) c
}
; Q, L( H9 X' P0 d}
1 U+ U* w, r8 { @6 z; R: c* Nm_wndMenu.SetVisible(FALSE);
9 v% n0 d3 i9 S% ?0 a8 v
& `$ j& T- {$ `/ g--------------------------------------------------------------------------------------------------------
! C y9 r, v2 T1 Q5 d: J3 d' h搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
+ t; [7 T9 b! w, V. x{: J( R" O, p3 K
BaseMouseCursor();
, u3 h; E0 t0 i0 k$ V3 N}9 o8 g1 k' M# O+ J
在其下添加:
+ U1 J& M+ a* h; H3 a8 P" Kvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)9 ?# M6 D t- @
{3 t3 V( g9 x$ m' W
m_wndMenu.DeleteAllMenu();3 v8 B' g+ ^6 G& r/ N0 I |
m_wndMenu.CreateMenu(this);* a1 B% f5 d. `$ F0 F0 }: J
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
9 D7 D+ n( R7 |0 n" J' L& W2 B, K; h2 N2 G
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
+ Y( D8 F+ L; h8 a{
: ~9 @5 e- M6 }: v+ H //P以上级别才可以删除所有道具
( A8 a u0 Q. @& X# d$ @8 f m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
# w1 ~, T4 m9 R0 R+ V7 H}/ P5 z+ t" b, I1 N; y
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );/ y% k9 k& U: `8 u
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );9 |9 B) v4 V+ s, P3 y! r& l
m_wndMenu.SetFocus();
4 f# a8 k& L9 U% R1 }}
* I* a: D/ i, i0 I------------------------------------------------------------------------------------------------------------9 g0 O- I* u5 K a' Q/ i3 x
*************************
" c; Y. C- ^4 O5 z! X( D7 zWndField.h文件
1 s" b! B# f) V0 m* `*************************
3 j# P+ n5 W+ D) J搜索:BOOL m_bReport;* a$ f4 r/ U9 j/ M; S
其后添加:- p; v. W- q. F/ c7 J+ a
CWndMenu m_wndMenu;" |4 A) G/ B8 d) P' n
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
9 m; V. e; p# {8 b. R- R. V其后添加:& A1 A |' p; R! K! g6 c; T
virtual void OnRButtonUp(UINT nFlags, CPoint point);
1 E* o+ T( d( j6 K
- q) M x5 s A" W+ O1 Q
0 _$ |# [1 J: }' e |
|