|
|
源文件中_Interface文件夹下WndField.cpp文件
( e. S6 q1 E9 a8 Y3 F* _8 U" U8 C, I搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )% J D; W0 w, u) J, w) t% W
% b- ^! u8 I& v- J i. o7 mstruct sItem
5 h3 s1 B( W9 }{- E( v) K! M* g( |5 d+ p9 K
DWORD dwId;; V% {: ?, z; g
DWORD dwKind2;
8 i$ z% g1 l- A& V. J) \9 s8 BDWORD dwItemId;
1 a; C. Y ]: K7 mBYTE nIndex;
2 m" _1 V1 u* M5 ~ r/ qsItem(){* D% @4 o3 E# D/ U U- i [
dwId = dwKind2 = dwItemId = nIndex = 0;
& g( e* @! t" _8 s- l' {}
9 v. G% Q: c1 n! mbool operator < (const sItem p2)
0 `3 j, I* i- t; z$ c- Q' I{
3 _; |2 O) a8 x9 [- t3 }9 D if (dwKind2 == p2.dwKind2)- c' x3 [* z$ L u
{
) {$ T% }; e0 m9 W( u% ^) Y" f return dwItemId < p2.dwItemId;+ \9 B& b9 b. m7 J: r; @ B1 ~
}else{
, Y' g9 s2 p! ?) i4 f" x' \6 I return dwKind2 < p2.dwKind2;9 D- B0 d% s* g. u
}
- D+ c7 \" g5 _& p; d' B}
* a- b/ l6 E5 {};- \- n8 Y/ r3 O) E0 r6 n3 q
class CInventorySort
; p! ]* `; i3 t+ P3 W- _{
6 Z! D/ C Q9 q7 H' C6 {public:- s f5 B% E1 ^: h9 {8 p7 R
CInventorySort()+ X/ G- C+ J' H
{
1 _0 i+ i+ t4 h. ^ m_dwPos = 0;
/ E6 b( G+ Y- g8 V3 V* @}7 D: t( i1 Q8 P$ g l( y
~CInventorySort(){}
* f, R& R' ~8 T' Wprivate:
; Y6 A- b/ d8 c' i) WsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
- [: }# @; `0 LDWORD m_dwPos;
& [, f! X1 z, v) S! Spublic:- c1 Y5 p* w& `1 m& `
void Add(BYTE nIndex)
- N# z- q6 X+ Z# ?) n+ z{2 K2 n5 ]! c) |% Q" f
if (m_dwPos >= MAX_INVENTORY)
+ B3 I6 r2 x8 T$ b, X {
. p/ A& D# A; {2 f& J/ T: s return;& _1 s- M% D: e
}
# m' A7 V8 A) j5 M } m_Item[m_dwPos].nIndex = nIndex;1 i% F; [4 L1 X/ C2 S( g \
m_Item[m_dwPos].dwId = m_dwPos;6 }! Y, C+ U, A) X
m_dwPos++;/ R, b4 T, a/ b0 v, ?
}8 E. C. ~& C F0 J8 \" Y
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
# e) ^: T/ ~8 _5 f( A{
- K/ M6 A: I4 M for (int i=0;i<MAX_INVENTORY;i++)2 f7 C7 \ Y7 |# u! ~
{
4 W3 S" p# t# u0 A. R if (m_Item.dwId == dwId): G: T0 J ^; M4 L& M" p
{' V/ ~: y o7 h v' J$ S
return m_Item.nIndex;
) d* l3 J3 |. M$ W, f }& C/ Z6 v+ [5 Y
}
4 r1 A3 S5 G6 |7 r. F2 @8 I return 255;
: Y+ N" D2 r9 f: c}3 V7 _: F7 u7 s( H3 b8 [3 I+ W: P
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
' F: U8 F% A' C{/ h! \: @: x* U+ a6 a, r. s, [9 R2 n
BYTE nTmp = 0;9 V% n7 i( B/ \- s: i) R& z
bool bDest = false,bSrc = false;2 X! t5 C( i" b/ r; X5 t
for (int i=0;i<MAX_INVENTORY;i++)
2 Y2 Q- G: m+ h# x5 r) n {1 `$ H+ p) `) x. |; O: Q2 Z, J
if (dwSrcId == m_Item.dwId)+ A* Z3 y- r# h/ ~; {
{
9 h( V( s5 x" P- U5 X //id相等 则 改变对应的dest和src
. c3 i8 \3 y5 M" ?0 I. M) U6 U nTmp = m_Item.nIndex;
7 i" a' _+ y& c }5 L m_Item.nIndex = dest;) l! |4 c" U/ j6 Q2 l% N, H4 p
}2 E. _) S: V8 D# D* Y) T) x3 F/ D: l
}& `; g1 n- @$ D/ i+ ~( T) m
//临时数据保存完毕,交换开始3 f$ o0 A- ?4 V G7 {3 ]
for (int i=0;i<MAX_INVENTORY;i++). g [) O3 J' z! q
{( ?3 U4 C6 A! v. V" {* K
if (dest == m_Item.nIndex)
/ d8 K8 ]" W0 h9 d' ~ {( ~% V- ]+ A, u
//id相等 则 改变对应的dest和src: G9 o) S" J- M4 p
m_Item.nIndex = nTmp;
5 K8 K+ k; }! ^* [) D' S/ N }1 z- F" Y% k! w7 T3 d9 g
}* |7 d$ e+ i; n
}, ~) I9 [. ?$ y
};) E* ^, G# K* Y+ Y! f
-------------------------------------------------------------------------0 d5 ~( B* P. q1 d, n7 i% w5 |! N% ]( C
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )+ f! a/ \" C3 R% }9 j! I/ B
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);$ ]6 S9 N$ R& b9 ^# f! s- V
紧靠其上添加:
' d( u* `* g; G" z9 p# E; i( \ sif( pWndBase == &m_wndMenu ) T$ @8 q% Q- N: P2 i8 z1 b
{5 P. T& k. I& T. S8 \: b
switch( nID )# K4 I: k) ?7 n. q3 b/ t4 }
{$ l- l! _7 U) `' X* `( M' a3 S
case 2:
9 O! F, }- W. l) _ z& g9 S {8 ?$ B/ }5 U$ N- V! ?; {
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
4 F' J1 t3 j) l4 ?1 a, }# N- A: t- g if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))% x7 A- M+ o4 p8 |* L. g. Q* B
{$ n) _% N$ [$ h; s3 ~8 y& d
break;% D; t# y, w. K+ I( R6 b
}9 H) u& k2 u$ b/ T4 x9 ]
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
- {6 s& s$ K7 h5 t: P& t {
+ y" d; g4 Z+ |: X9 ]0 A CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
. Q4 K( u8 T- r if( !pItemElem )
1 r7 D$ V; i3 q9 Q9 Y; ?5 j3 J l continue;- @* s( e' X- W
if(pItemElem->GetExtra() > 0)# i u n$ t& u5 T$ ?# M/ |
continue;/ v' ]+ Z; E' R. Q1 q* v5 G
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
* R2 h0 W! U: c* o continue;/ c% x, N' H" r( o( l
if( g_pPlayer->IsUsing( pItemElem ) )7 R$ P( F- T9 Y8 ?* o0 G
continue;
+ V/ O, o; G% q, Y( \: f: L if( pItemElem->IsUndestructable() == TRUE )- V; `# I& ^* i6 @8 V
{5 \3 l# j3 S X' _& y5 T8 l X4 e
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
! L+ c+ i" r" c2 [! g2 U# F continue;; y v4 w3 p" C% S1 G! Y
}
- n% p! e' U5 G) B: V g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);" T6 `( t3 V; o, ~# E/ R
}% u6 N I$ r% T; d% n% g* s, i
break;5 ` {0 X2 J! @' s, v" X! m
}
- z; A- i2 I- I2 |0 F( m' { case 1:- j- j1 H! j- `" z4 i, e
{' F# k- Q* i; v9 |7 X
//整理背包
6 n" S# R- d& g7 d5 q2 { //////////////////////////////////////////////////////////////////////////
9 d) b2 M+ w6 u" ~ //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );4 q8 v1 G) X, u( M& N4 H" ~
//////////////////////////////////////////////////////////////////////////
- O& w8 E p! a) r: \8 Z //////////////////////////////////////////////////////////////////////////* O, p# _2 h8 J: Q
CInventorySort* pInvSort = new CInventorySort;
/ @ q+ N, s4 a, h0 g! d& d$ Q vector <sItem> vItem;: E0 e7 E. x" y! H- b
vItem.resize(MAX_INVENTORY);//初始化大小/ y5 v9 M( N" r" F
//////////////////////////////////////////////////////////////////////////
( F- `& s+ C0 h# n# G+ K c, O //填充数据 o$ a7 t8 ^7 U
for (int i=0;i<MAX_INVENTORY;i++)
$ {3 Q% `+ W" J" J" s @ {
4 @: ~ v$ y1 n5 ]$ [% @" n8 z' q CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);0 D) }+ A* G# s- z
if (!pItemElem)
) y$ M8 j- ^6 I; |% v8 }3 ^ {+ W- V1 v" D; j0 a% v( r- X6 _9 S5 x
vItem.dwKind2 = 0xffffffff;3 i( g k4 m! @( B
vItem.dwItemId = 0xffffffff;
/ p4 H& U# a, n8 \3 G) s9 H, M' d vItem.nIndex = i;
' L- Y/ |! ]. B# o. Q' p }else {+ n( I+ y5 ?* S
ItemProp* pProp = pItemElem->GetProp();
7 i9 W" m4 ?, x' U vItem.dwKind2 = pProp->dwItemKind2;6 v5 i3 f5 g+ A( z( F5 v+ X% H
vItem.dwItemId = pItemElem->m_dwItemId;" }0 Y6 a4 }* C5 k, m
vItem.nIndex = i;
8 m m6 _0 ^) m1 T5 i5 d. o6 m }
: W# M9 S/ E3 j+ T) m //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);9 Q; H+ t- ?! S' u( B p7 Z7 V
}
0 |3 |; ]. A. s2 I //////////////////////////////////////////////////////////////////////////* s; p+ V: n2 [ Y1 I3 g
sort(vItem.begin(),vItem.end());//排序
8 k# L* x) a% |4 Y/ f //////////////////////////////////////////////////////////////////////////
2 T w" f) S) p) r //交换
% |8 X4 X: j' U; P- \9 q for (size_t i=0;i<vItem.size();i++)$ O" h( F8 ^+ Y8 L; L1 r, a* t
{, \. w- R2 j$ k
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);( u# _6 l& a7 U' V9 {
pInvSort->Add(vItem.nIndex);% e3 p5 C1 K$ f: @; Q. W
}* d% {9 d4 D0 d0 c. q
BYTE nDestPos = 0;# \; r- y- ]" ^; r2 \: I! W: ~
for (int i=0;i<MAX_INVENTORY;i++)
9 d# E" t% J1 |8 | {* B" T8 X) @1 q9 u0 y/ t! M
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos); b9 M* i- K! A+ h) H' t7 l
if (pItemElem)+ g( K1 C. H+ k6 ]
{
5 W6 z$ E* _3 [ if (IsUsingItem(pItemElem))$ N5 S3 ?+ n$ }- X5 H( s s
{
# _; i; y* y2 P4 u //这个位置无法放
) X. C4 L$ _/ a" M* G2 ?* H1 v/ d! [8 @ nDestPos++;
' I3 T9 @# A& ]$ H- K }
. E- \" U. A- q4 r2 ~ }6 @ K6 e' Q6 T( Y
BYTE nSrc = pInvSort->GetItemSrc(i);
9 E/ P7 w- j" J5 S: b W6 Q pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);' S! }$ U" \9 V
if (pItemElem)) G. o7 G0 c/ I6 m) ]$ u
{
0 q/ {$ `* R: I3 h* o! [% D% m2 n, O if (IsUsingItem(pItemElem))4 |8 R/ B, O& i
{
" c! z4 Y- k5 P7 m1 y# B //这个道具无法移动,跳过
' G w3 t2 N# e continue;& w1 {7 w" K) Z6 `- L9 m F) z& ?
}
9 |, R6 v1 m+ c k7 @+ D }else{7 h8 X1 V, d' a+ z w
//空位置 不用动
7 c" i0 H: V: U: e& a. |' n5 R continue;
6 @( _% D, T4 P }3 s8 j# x7 x$ T8 L# R
//////////////////////////////////////////////////////////////////////////
v( `) o, M0 e) v4 w$ S //开始移动
6 c9 L3 |3 k5 _( N! |5 ~ if (nSrc == nDestPos)
4 g p; o* J0 |* @ {
S( M$ _: ]7 M( Z //原地不动
y$ i0 p, c$ N9 [) W8 @ nDestPos++;; `. g2 X& R# }2 S8 p- p
continue;
% ^1 I; J$ |( j$ P! a8 B- [ }
/ _8 I: ~3 R6 m! ^6 ], o e pInvSort->MoveItem(i,nDestPos);
3 b1 H; L) C9 y* P. m g_DPlay.SendMoveItem(0,nSrc,nDestPos);
$ Y) @" k, r3 R) { c& Z" X9 ] Sleep(5);+ Z, E; [7 N1 ^% Y ?4 ~
//Error("移动 - %d->%d",nSrc,nDestPos);" R. H+ f- v% j
nDestPos++;4 R& o( Q. b; m/ b
}( J7 T: a B$ m# r7 d1 h8 [4 n( O% D4 Y
//取第一个元素的信息
( O7 g5 i/ Y5 |# i; [7 H /*' [: z' c' y: Y2 H! }" L# w7 i
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
+ x) k7 C' d' k) M {4 \& {2 l5 l: ^4 z. S: d4 s
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);9 ^# J+ J+ y- r, k- G
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
5 T0 n V, [4 p8 f; [ }/ K, ?4 ^( o: r) [6 \0 {* N3 k: N
*/
5 k, `* c$ R, | //////////////////////////////////////////////////////////////////////////
0 W% `8 D( M# Z7 o- b& S break;, L' i+ N& j5 y' r+ D
}
' N/ d4 q; }- k, x' o" M } 3 _ Q) L) c" Q) R5 B) G
}( u2 r: Y) V" \2 A
m_wndMenu.SetVisible(FALSE);
" [4 V& A( z; I' c$ O8 t; ]3 e3 |, V) l
--------------------------------------------------------------------------------------------------------4 r+ j9 P6 _9 g: p7 Q
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
7 a9 I: @3 H: j# G9 y# y* H/ {{
6 R+ ^# o+ w3 x0 `BaseMouseCursor();
. F; n- u0 _# \; U0 u2 l}. D9 h6 y$ v+ K# U, W- t
在其下添加:; V) k5 [+ i+ X& U. `! O5 s
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)6 _7 q; I* F+ a: Y- T$ }4 v
{1 a! k9 g3 O+ U3 `0 V+ G' [
m_wndMenu.DeleteAllMenu();; Q! ]' \# P* e
m_wndMenu.CreateMenu(this);
$ k) a- V7 t: J5 a5 jm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包"); {$ c0 g* H1 r/ b# W. [; M
# A7 [; u4 E6 c& I$ u$ O( C
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
6 c" G9 z4 n( E, I5 N# T5 g{
+ W+ s" I; e' g- Q5 P. U //P以上级别才可以删除所有道具
- M! e" `* r# g u m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");7 O' Y9 W0 A1 U3 m4 [
}. w% y$ L3 a t
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
8 o) v! }* R( G" L& ?m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
0 A) a) e7 C4 Q5 u. f sm_wndMenu.SetFocus();
# M) x' f) v* d- t3 I9 n3 z9 z}
1 d; K/ c, |0 g------------------------------------------------------------------------------------------------------------
9 A V7 L- p t4 I5 {4 L3 r2 f" W M*************************3 X0 N9 a( l; I+ N
WndField.h文件
& `9 f. ]; E0 k2 S$ ^*************************
: \% e+ s8 `- G, Q! q2 p+ i1 B) k, M搜索:BOOL m_bReport;2 T0 H4 k7 w% |+ W$ y- m' F2 Z+ X" S
其后添加:! v/ a1 W! _6 P9 G, j
CWndMenu m_wndMenu;
# g0 b L0 ~& O0 |& A2 R搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
% G7 \8 T+ C+ r3 ~* }# G其后添加:
/ C6 B3 v# ~, |' K. P* h; g9 |virtual void OnRButtonUp(UINT nFlags, CPoint point);) e) \- S) m s+ {2 i" ~7 x
' J! x* `- Q4 ]& H! ]; q+ B1 P, f4 {# s0 d. e% a
|
|