|
|
源文件中_Interface文件夹下WndField.cpp文件
1 L, U4 {- k" u$ ^6 |+ Q8 a搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )3 G' _" u7 T" a9 x+ M
+ P7 X1 R H1 ~+ e3 Tstruct sItem
7 s4 q) l7 v( R, f: r; D+ c{
: C7 v! r+ n3 T: W0 V! ]" QDWORD dwId;1 k3 M/ G% Y% @( V+ o
DWORD dwKind2;: X$ x1 m k: p, R( }
DWORD dwItemId;$ h6 h6 o9 L1 l7 K
BYTE nIndex;
& i- p3 {$ X! x; @sItem(){ c {$ `: A) s; I& V7 @& v
dwId = dwKind2 = dwItemId = nIndex = 0;/ Y8 R) W7 ?9 o3 n$ }6 U3 \
}1 j3 _3 t8 [3 k/ Z
bool operator < (const sItem p2)
, c9 c7 I! i9 ~{, T& ]* `# i; G# `7 z0 F# _' H/ U
if (dwKind2 == p2.dwKind2)& B( e/ q+ R/ B8 a* D
{
* X0 a O4 s+ q- @0 q e: X% ^8 G return dwItemId < p2.dwItemId;$ \, {) v- [- j; A% ^6 j
}else{! k" M% o) k9 ^9 v% Y
return dwKind2 < p2.dwKind2;* v+ g" q O0 k9 \- p3 J
}8 Y/ k' G7 E5 E
}
( O0 B- F, Q5 [1 f) M6 K};
# a- f2 c! h- D Cclass CInventorySort Z+ E2 {4 _, c5 C' C
{$ O0 Z0 O1 `& k; l! `4 I2 ^
public:
) s" A2 o- G5 z, w" E& N. x0 uCInventorySort()
) c& q# o* o7 P' H* r5 P! s" r{
, ~/ ]5 D, m9 F: w m_dwPos = 0;, `% O# f" A7 |+ Z3 D6 p
} n' J ?9 K/ `9 n5 V. @
~CInventorySort(){}" i: B+ ^% o2 U" t3 S: M- [- V+ X
private:
" O- Q! y9 {. m/ u3 u8 n' P2 wsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息! d0 o/ t& o8 ~) d
DWORD m_dwPos;9 |: r/ K2 n" s3 O w
public:
- M* H: e' y5 Y" `2 ~void Add(BYTE nIndex)% f) i& p0 H' f) o4 i
{
1 y0 X- i! ^5 K2 Z* G if (m_dwPos >= MAX_INVENTORY)
$ A. r# n/ H+ q/ W4 e {2 Q. I2 p6 ~5 R1 A" s6 U
return;9 _' N. Q$ U- O3 f8 K) _2 i& `
}
* `: x: R$ `3 d" ?1 V/ z$ p8 r0 h m_Item[m_dwPos].nIndex = nIndex;, R0 |5 l p I! K% p% A9 I- \& k) ? v
m_Item[m_dwPos].dwId = m_dwPos;
. O9 {, ]- u0 c! C* e9 w6 N m_dwPos++;
" C1 R/ R- m0 d}4 c1 L# v: O, b; M
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
* C( [& [3 h, B5 ~- D6 ^: T{1 u+ U! V8 V7 n7 V$ s
for (int i=0;i<MAX_INVENTORY;i++)! E- x$ S$ o% [
{1 N2 d, v) s) L- Q" ?
if (m_Item.dwId == dwId)0 |8 l& ?8 K- g- e6 p! N5 C6 p6 _
{
; o* w7 z9 c8 s# A5 b6 u" h return m_Item.nIndex;
% {8 a# z% R: W }
- i3 \6 ~+ `! J8 ?/ C+ y }
3 m# E; K* B6 V8 H) @/ y; g, L return 255;6 `5 C8 h/ N6 S) R
}4 q/ P* l8 t- d+ _/ f: P
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
5 D# i* R0 s3 H" U{
, d$ E1 v% G! j- Z7 W1 n$ l BYTE nTmp = 0;# Q8 i2 n# Y4 T, t _7 d( ?
bool bDest = false,bSrc = false; a% B- P* s; O3 P- z4 G
for (int i=0;i<MAX_INVENTORY;i++)
- ^( @; W# \: M- {1 Q* ?( K {
% Q; w$ z W! q* m if (dwSrcId == m_Item.dwId) m! z. w; }* G" [2 v% j8 ~
{5 s- l# j9 E! A# d- C2 M
//id相等 则 改变对应的dest和src# J$ r% ~( p$ l' X6 ]- D
nTmp = m_Item.nIndex;+ p U+ T- L( f9 g c
m_Item.nIndex = dest;* |) Y4 l" s0 U) w
}
/ i+ b L$ C9 G* o }, [/ S) y0 M: k8 B' N
//临时数据保存完毕,交换开始5 U4 W0 L- O; @( x' ]* x% `
for (int i=0;i<MAX_INVENTORY;i++)0 s7 w+ q8 r# [% z
{
+ ~9 k$ F% l0 A `6 U if (dest == m_Item.nIndex)
, S; Y4 ^6 L+ u6 a; \9 R+ R. p {
% P1 A) D/ @' x. ?1 @7 U; `8 O //id相等 则 改变对应的dest和src
8 x* f4 u/ T& P& b8 I3 ] m_Item.nIndex = nTmp;
( R8 T2 @7 a' o" x" j2 C: m1 G0 Y }, J) ?" x* [+ C9 r
}+ [9 P8 m1 [& R2 v# l+ Q
}
t( u" Y' b ] |2 m};- q+ x* f, |( W2 W) f: C: @5 \
-------------------------------------------------------------------------; D4 @: M- \' o3 n8 D9 {
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
8 E1 g o) G& b. c, a搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
}! H4 d$ E' q/ e紧靠其上添加:3 c. k5 }" e/ V; o% b
if( pWndBase == &m_wndMenu )
% _- N5 c1 V# x d{
1 m" Z) j8 Q5 T8 {- Z* Y O; K switch( nID )/ L" S) J1 g2 b1 a8 E
{. v3 q8 o7 `) H# l2 [
case 2:. ?! v! ]: e2 b L5 H; k" i
{$ v1 v" [, {8 n6 ]
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);7 M# s* F8 z0 s1 w: _$ y
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
6 t4 j/ [5 B8 b) E/ C# G$ H {
/ U$ s! z9 J9 F2 z2 a3 y& _ break;
/ B( g. _2 @9 |% \, }- f7 t }
+ T, k1 y( @; U2 q Z0 I. ] for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
. ^- C* @7 Q2 V& G {4 i. s7 z1 ?* @4 K# V! x
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);! J7 H5 ?3 h; B3 ~$ l
if( !pItemElem )
( k! i' F2 r$ ]/ Y continue;
. P# g( F+ z' M( W5 Z, ?- N if(pItemElem->GetExtra() > 0)
( i* e2 o0 w) O+ {3 `; W6 ?" h continue;- d$ V6 K, v V) y: Y# J; T J
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
! b) s* o5 |. c2 M' _2 Y continue;
6 u# J. S5 y: o( _ if( g_pPlayer->IsUsing( pItemElem ) )
# t$ U- |! f' L5 k$ W" b continue;$ |$ c7 A6 m" v
if( pItemElem->IsUndestructable() == TRUE )
! j [+ g1 Q/ j9 v \ {
+ ]# T4 _4 a8 \+ e; { g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );% g, Z- t5 `% I
continue;
4 u6 H' n, ?$ C) a }
$ ^; Y& w, g1 d' W7 ]1 p) S, r g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);' M% Q+ e; c" s1 p
}
3 H! O! Q; m' ~% T break;
+ y# J. w, D( h; _8 }- `# O4 D }2 k/ S9 a! T! @" p5 u
case 1:
: O5 e* u# F% c {
3 P+ h- r9 N; L5 h$ Z; x //整理背包9 j Y' S2 b) B6 s" S7 p7 ~
//////////////////////////////////////////////////////////////////////////0 P' e+ o5 q4 A1 t: C! h
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
+ t: t* m1 c7 t3 P$ S //////////////////////////////////////////////////////////////////////////" F1 R! l- V! j
//////////////////////////////////////////////////////////////////////////
: \, R, n E0 O; U9 x7 d+ a9 p CInventorySort* pInvSort = new CInventorySort;& Z! t' I" J5 Z9 P
vector <sItem> vItem;- B% S1 G8 [! ?5 P
vItem.resize(MAX_INVENTORY);//初始化大小0 `% \ V! f) X, v
//////////////////////////////////////////////////////////////////////////
, f( H5 L( j' Q, s% y7 G v //填充数据
+ X& n1 j) W' d0 u$ x for (int i=0;i<MAX_INVENTORY;i++)
) E' s, W0 q: {8 Z& I1 \ {: I3 S4 i3 t% h# g' w9 f
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
2 y5 k0 H' w( s' W c& ] if (!pItemElem)
- k5 ^! p. |: | {' f1 g! D* ~ ~9 M4 [
vItem.dwKind2 = 0xffffffff;
6 T* Z9 l! u! Y# r. R! S vItem.dwItemId = 0xffffffff;3 R: Q. M. B$ J9 M8 d: e; b8 A
vItem.nIndex = i;1 P6 t! a+ D7 D# q$ ~
}else {
$ {5 z* v7 a2 R Q* ~6 J7 a ItemProp* pProp = pItemElem->GetProp();
0 K5 G w! B( ~# y vItem.dwKind2 = pProp->dwItemKind2;
1 X. \& d! V. h' e: D& W& C vItem.dwItemId = pItemElem->m_dwItemId;8 h4 b2 I* l4 w# h- ?; d( g
vItem.nIndex = i;
) f) X$ N9 W, e. c( ?, E }
; C% H1 `* S' f; q0 m" y/ e; H# I //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
4 R3 f" f1 E6 q: h }
/ J1 x3 w* L) c //////////////////////////////////////////////////////////////////////////' Q' O8 k$ u: `/ V
sort(vItem.begin(),vItem.end());//排序
6 h$ l' q. o5 }0 W9 ^% g/ L //////////////////////////////////////////////////////////////////////////
' ~5 v) L9 _9 A8 q7 o: O //交换
8 G% ~7 W1 V. v for (size_t i=0;i<vItem.size();i++)0 `5 y I& u2 v' g) w
{/ a. E" J* W! V" {0 ?* n& v* J
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
- z/ w8 C- H" z# X pInvSort->Add(vItem.nIndex);
+ |9 L* \% t$ n. ^ }8 S* f }/ ]8 _) Q6 h0 D! q7 q3 Y
BYTE nDestPos = 0;
" _9 [) U* Y. [0 ~& x8 E* Z5 ^ for (int i=0;i<MAX_INVENTORY;i++)& [4 N0 m, |3 u" e6 b2 ]
{' E! w. \: B7 C% |
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
2 R2 I3 f% G F/ [ if (pItemElem)( V6 V9 M/ Z' J) H6 p+ {6 v. C" W
{+ T% M0 Q* T. [
if (IsUsingItem(pItemElem))
* E' y# g8 h+ m5 ?- w/ ? {
. T- i. B( o/ G //这个位置无法放+ A. N1 Y4 A0 A- l- u. [% B _
nDestPos++;
8 g7 b8 N; f9 w$ s" F }5 g- w R# ^/ b- m6 Z7 n- n5 E
}
2 t6 i" k4 Z6 L9 w4 ~# U1 N BYTE nSrc = pInvSort->GetItemSrc(i);9 ]& b; ^9 S7 G" N( c
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
7 F r- K6 Y7 @2 X1 ] if (pItemElem)
% B; _7 u* z( o6 D, E# g' K {9 N& P3 W6 ], j5 q% b+ B
if (IsUsingItem(pItemElem))% e* [2 F5 D. b; P1 u
{
3 m# T8 B# j+ v //这个道具无法移动,跳过
1 w1 G" v2 H- n& q+ Z- y continue;
5 {( I9 ^6 r' ?- g& I7 X }
; i, a0 H5 q, O" } }else{
, v6 e$ O+ T5 b6 R) h //空位置 不用动
3 ^. d& ~: v' X0 J: V5 w continue;
6 |2 M% ?' T6 O! m! f }- a9 j( v% G1 ^. F. N; }, _
//////////////////////////////////////////////////////////////////////////
0 V/ O9 Q& P! Z P //开始移动! ]( W, I+ }: C* h% |; N
if (nSrc == nDestPos)
9 J" w. _5 { q: Y( g% q8 e {! \5 [9 S y* T8 v% e3 N
//原地不动: |) q1 b" x, ?% ~9 W
nDestPos++;! ]% z4 A. m! Y5 M7 u$ H- D7 R
continue;
/ L8 N" A0 s- j }' b4 z' I, c; y) L* G
pInvSort->MoveItem(i,nDestPos);
% N9 K1 P6 ^6 {+ v7 x! Y: j g_DPlay.SendMoveItem(0,nSrc,nDestPos);1 U1 \7 p9 ]1 g
Sleep(5);
; G3 X P+ n8 X9 X. w; d. K& S! y //Error("移动 - %d->%d",nSrc,nDestPos);7 w* @. m% }! ?# ]. p0 }
nDestPos++;
# U, m# Y8 ~3 x. R- G }3 ^$ V, J) w# Y' S" P/ g/ x5 V
//取第一个元素的信息+ h6 ~1 g' t I0 A3 ]! g
/*
# |% F3 B& m3 T( ~: `5 V1 t if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
, A. Y: ]5 D% ] {/ p8 u* H1 Q2 E9 v3 w
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
# _& P# k C3 v2 I g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);0 E+ `! ^% B, p+ n6 ~5 G
}
" e; Z0 C9 v+ z( X6 @- j" f0 `& Q */% ^+ y8 V; T; }1 t: u$ M: q
//////////////////////////////////////////////////////////////////////////2 G& o' j* B" y( x2 R2 m: d
break;( [0 _4 N4 o6 {; h. X5 s. n
}5 Z' o0 @& i! T/ X: s e
}
8 f0 q0 d# C. [5 h& p' D' D" V}
% }" |9 Q. J2 q# J6 N! |1 o$ P; u4 D9 `m_wndMenu.SetVisible(FALSE);- g( d2 ^1 s2 V" T! \
3 D" {$ r8 h$ C--------------------------------------------------------------------------------------------------------! F5 a: i0 a5 R7 ^; M
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
3 c9 B3 x2 A0 z, W2 f+ s{! [8 m- q* A& v' U
BaseMouseCursor();1 ?5 U7 _- K7 q& e
}6 t( L/ {1 t8 q& e) h
在其下添加:4 Z- [/ x5 A' N, X, E/ D* C
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
% X4 o1 |% F% Q# O2 S{
/ E9 M4 F: b9 O2 {# qm_wndMenu.DeleteAllMenu();% V$ p0 ~. N- G# A, S
m_wndMenu.CreateMenu(this);2 i5 ?1 S8 m: _2 x6 |4 v* t
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
- F# {. T5 U& t0 K- L7 ?* j! v0 d4 f- ?0 u$ h' @ Y9 x0 {
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))! v" G1 a. f4 g
{
1 \7 P' C+ s4 C; c //P以上级别才可以删除所有道具
9 S1 C2 N2 }' c+ W% O m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");$ v( _3 h( Z: ]( W6 ]6 w- n
}
# u2 P0 ^( w- C7 tm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
; R# J3 F$ Z4 _/ E, im_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
7 i! h% R8 Y+ Y6 d" S% h& Dm_wndMenu.SetFocus();" P E. A( d0 y9 L
}
0 k8 y5 J; y# a; U, X% L; ]0 p: p------------------------------------------------------------------------------------------------------------: j' h2 C8 o* C8 |( H
*************************
# X5 i1 B; [4 y9 ?WndField.h文件
: R ^$ L: Y$ ]" b% F*************************& G T* {! l+ V# {( ]: B
搜索:BOOL m_bReport;
( l) n8 J+ B2 e& q其后添加:) `$ p7 x) t- Q8 v
CWndMenu m_wndMenu;
" H' v: E8 D0 V; e. H4 a搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);3 c9 I1 T# l1 K8 O2 S
其后添加:
7 {- B. M; N0 u- Kvirtual void OnRButtonUp(UINT nFlags, CPoint point);
' w: W# }, Q- l! S0 j" r' W7 p4 j0 y1 O3 h% T2 _4 `
$ y( X, Q) g3 ?; L: T5 p
|
|