|
|
源文件中_Interface文件夹下WndField.cpp文件
+ D S L2 ^& h5 n+ C2 Z4 a) Y# ^: _搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
( w( G* G, d& j5 c) r5 }
' l3 J3 w0 m3 ~9 G- u3 Nstruct sItem
9 r# W0 U) Q) _/ M# M{
/ w- C7 S/ r" f7 [5 y8 sDWORD dwId;& _5 p3 f1 }8 q# H+ Y
DWORD dwKind2;: M0 S# v J% c$ Q k1 _5 ~
DWORD dwItemId;& P: m3 j- a( R; r" {
BYTE nIndex;! H! }% K( W8 l$ u. ?
sItem(){
- ], W9 o. } C5 Z' \ dwId = dwKind2 = dwItemId = nIndex = 0;7 o! v8 Z$ T) ?5 N
}
$ `' H7 z; F% Abool operator < (const sItem p2)- F* i- e6 k p" [
{
# f: F/ D# N- Z# {5 l, ^% Q if (dwKind2 == p2.dwKind2)
; g2 @$ d# x/ D! H, R2 E. \ {, ~) A8 r: k: O+ M0 D5 n
return dwItemId < p2.dwItemId;
% j R2 `: {$ b' G! L5 ~/ T9 i }else{3 F6 _$ u+ a/ d4 L; A- O
return dwKind2 < p2.dwKind2;& Y" _$ S, z) x) T5 ?
}' d- A" ~* t* {/ y- `( N5 a, _: y* @
}' }- D( Y1 |2 m) Z8 L! ]
};9 u& v* d) N" m! o* }, N
class CInventorySort
! u: p+ m9 Y/ Z1 \+ L{
: k& V9 C6 l1 e d7 ?4 p: L$ rpublic:6 z: h" F" O7 O" l7 K# g
CInventorySort()6 {0 v: z6 h0 n9 o/ D) k5 w
{8 [" ]7 `; `! k9 `
m_dwPos = 0;2 E% a' Q, \7 E
}. u$ L* U( Q& G' ~3 B
~CInventorySort(){}
! }! k- h9 |( sprivate:
% N# T' d5 E8 Q$ nsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息, H$ U: X2 y8 L! d3 B+ d
DWORD m_dwPos;" G7 [3 g; l! _; U. {
public:- v' ]/ j e! k, M- U
void Add(BYTE nIndex)
! J% [, t, n; {$ l{
6 b4 P& ]0 J0 }& Y z) k8 L if (m_dwPos >= MAX_INVENTORY)$ T, e+ G6 `$ E) \
{$ t! N, S1 G$ X/ C6 W
return;6 ]* T1 X4 q9 l' |
}# D0 h) G1 f j& D
m_Item[m_dwPos].nIndex = nIndex;3 s8 H# a1 t$ a: J0 ]
m_Item[m_dwPos].dwId = m_dwPos;
- K; O1 S4 h% Q9 l0 N m_dwPos++;
/ _% B2 Q4 _; z6 A. N, p5 U}0 Y/ V; M$ w9 l$ }, E2 i' `1 {
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列8 J5 g, m6 V9 _$ ~! E2 V
{# w1 y: V& d8 ?: O# C0 y
for (int i=0;i<MAX_INVENTORY;i++) q) L: \; J/ h7 d% d, `1 S
{: M/ Z2 q" p: o2 C7 A
if (m_Item.dwId == dwId)- I; y8 I1 p/ j8 y. T$ X6 F
{
5 Y4 Y0 B8 O. O' g; a return m_Item.nIndex;
' y- t7 a5 r% l- l/ k9 R }
* Y0 o' f4 W; R8 Y- u* ?$ u3 S6 \ }
0 s0 |' h9 Z( `0 O; K. ] return 255;
: e. v* j* z2 E}, i% l( [7 ?; N7 [2 Z# ^- V
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
% s! h l! [8 K X0 u$ H' z. A{) x( I* b7 s X4 n- v3 G% J
BYTE nTmp = 0;
5 {" F& U/ \+ O" S# j( y/ G) J3 f bool bDest = false,bSrc = false;
; r5 r4 q0 q% O4 x2 O( h' I for (int i=0;i<MAX_INVENTORY;i++)
4 o" g0 Y1 |4 h% L6 D {2 \: O3 J2 E" U8 z( C
if (dwSrcId == m_Item.dwId)
" ]9 l; K* _4 [. t0 q) _% F {/ P5 Y0 t% S) ]
//id相等 则 改变对应的dest和src8 g$ a# E" x$ k6 ?, \
nTmp = m_Item.nIndex;
; {$ ?4 F5 Z& n8 V: T: S9 [5 w m_Item.nIndex = dest;
# Y- ]% V& i, m) _2 n }( y7 y/ m7 t. F& [
}
# n! q' P' s8 E' h //临时数据保存完毕,交换开始9 U s1 o+ I m' V3 t U/ J4 w
for (int i=0;i<MAX_INVENTORY;i++)) o- `4 U& i* V% X$ b, _
{
! O; c$ p1 v: b" B# p if (dest == m_Item.nIndex)
0 j/ ?' Y: N, H: g {1 f8 L" Q% W9 @( D
//id相等 则 改变对应的dest和src% g. @$ j. x ^
m_Item.nIndex = nTmp;6 p. j/ ?# q& V6 M4 F5 p9 X
}
. a: H) _" B7 h }9 w; Y M+ Y" @7 `. x, q
}
. z. U4 W( X, y5 d% m7 D# y};- u# W2 L2 j" N" H' j- z
-------------------------------------------------------------------------9 Y- |, | ^. z( @9 p
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
$ q# Z! `, P! f1 P搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);. e0 f$ o) U& d4 I( r/ k3 j/ \
紧靠其上添加:
$ }# J# n' r. `6 i+ Y" ~if( pWndBase == &m_wndMenu )( q. z+ |6 p% c- j8 x& p
{! N8 u& ?" x' F8 Z. L
switch( nID )
3 ]1 ~5 C* `7 r& p% L* ?5 p { ?+ ~+ j( G ^3 ~( i+ a+ N
case 2:: W4 e( W- p3 Y1 p- }8 ?
{3 p8 Y* M2 K9 \( }$ ?" y2 c
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
2 a6 r/ |+ m1 l if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))) f! q- R$ O, G- h0 b
{; x. G G) {1 y
break;" N9 B& R) W8 M5 [( Q
}
- a4 {3 z1 @, S: B y! [7 ] for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
+ w0 p( m" F; [' G5 [" z {
+ z4 {/ W& F) E4 N; M0 v" |9 m# ^+ W CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);( ?& b; m/ f: I" ]
if( !pItemElem ), {% r5 D, A j3 p
continue;* D$ r1 ?4 N+ n! q1 `6 S+ {3 f
if(pItemElem->GetExtra() > 0)
1 N6 ~( X4 M0 J" G; e; ~( V/ F continue;( B" c% E7 Z* }; k2 I9 A% \9 \! K, G
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) + r. k6 R: e0 P1 P; h* y0 o& `
continue;
% m$ d& F1 t2 q# V* [ if( g_pPlayer->IsUsing( pItemElem ) )
. c) I6 U" ~7 }" W9 l' n continue;
: c) b) j( y3 M! R8 J7 e6 k' j if( pItemElem->IsUndestructable() == TRUE )8 U4 D$ k# }6 T9 ^. v' E
{
! C! X _' B6 m% e: ^; \ g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );0 ]9 x" G- T# ~; a) v
continue;9 p3 R: R& g, J1 B3 c B& d) ?% _
}1 @* N' B/ ?* }; u m# t
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);' E3 i6 S" m; R: t- n
}
. [" } u& P) \; h, I1 r break;
6 z% K; A3 U$ {+ H0 }3 c }% l. c, p3 O: p: d: }/ i/ X" \
case 1:
& Q, ]( n6 A$ D9 U5 \( B {
" a/ [, k+ S+ Y1 B \; q) W1 F: d //整理背包
! r; B& v) z; ~ i //////////////////////////////////////////////////////////////////////////. D4 A8 c% U9 r" p0 g
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
5 Y; j; q; n: O/ U" Y //////////////////////////////////////////////////////////////////////////( [- [6 v( Y, {. p( d3 W3 n% k
//////////////////////////////////////////////////////////////////////////
* N) l$ [& u# E CInventorySort* pInvSort = new CInventorySort;
+ E: g1 N' s& S8 r vector <sItem> vItem; Y! M8 d4 d3 l+ I7 P5 l
vItem.resize(MAX_INVENTORY);//初始化大小
- c. o. B/ B9 N' G4 ]" F% V+ n //////////////////////////////////////////////////////////////////////////
# W0 }$ |0 w6 R& K //填充数据+ L' `* h- F$ J* n- K
for (int i=0;i<MAX_INVENTORY;i++)" P8 z3 I. i, f' w$ n
{9 Z9 U: g$ T& m$ Q% t3 N, k
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);/ ]- I( Y% r+ p$ X( U6 D
if (!pItemElem)( q' \ H! r( M2 Q: u
{
$ }5 _, x. W+ h; [ vItem.dwKind2 = 0xffffffff;3 O! g& z/ N9 ~' T7 h+ c! F& Q& I' y
vItem.dwItemId = 0xffffffff;
4 F# G" o: j7 z vItem.nIndex = i;) d" f/ A2 N5 G: _3 t) o W
}else {
& u9 N) \$ s% ]. z7 J u ItemProp* pProp = pItemElem->GetProp();
: y/ \ I: ~- G- |; |7 x vItem.dwKind2 = pProp->dwItemKind2;% k; f% ]. I7 u. F8 H
vItem.dwItemId = pItemElem->m_dwItemId;% t% z/ e7 G5 T* \7 E
vItem.nIndex = i;2 O* A6 S2 l8 N; G
}6 ^: V/ G0 S# w3 k
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);, O2 b( A& U! `% x* t- t2 |. W- p
}+ \; w/ L' |6 n+ u2 ]4 P
//////////////////////////////////////////////////////////////////////////
+ m& N3 y3 \/ O# v sort(vItem.begin(),vItem.end());//排序
# F; m9 J4 s% x; \* C9 J' E3 l //////////////////////////////////////////////////////////////////////////4 K9 p: Z3 b2 E7 s8 k5 A# _
//交换
' q1 u: u" R+ x. Y+ H for (size_t i=0;i<vItem.size();i++)# w( y* |: Q0 W+ h) k F
{
! V- Q& Y* m* R' D //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);/ V* x. E0 X. R$ Q1 ~" u
pInvSort->Add(vItem.nIndex);3 c+ z( l# o1 ]% i2 a
}0 E. \& O) Y ~. V* n2 r+ s
BYTE nDestPos = 0;0 L6 _4 h4 X- {5 x
for (int i=0;i<MAX_INVENTORY;i++)
0 Y& x( }4 M9 A9 V7 U$ ^& ? {: `/ h& M, J& J, j
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
9 G1 ]* o0 t+ C( L |5 ]7 l, ?1 V if (pItemElem)# S7 c- c+ }; J4 K4 T5 ^
{
+ y$ ~* L* e% |/ u! i6 W9 T3 {0 E6 E1 a if (IsUsingItem(pItemElem))4 c* l+ d( Z3 M4 t
{4 ^- D, B% M$ K& u, H" l9 F
//这个位置无法放
0 z! G3 K+ n* q% D nDestPos++;; B* E9 z9 y0 T- v
}* K S# v' e- l0 K1 V
}; x: @- H# q6 J- n3 z8 C
BYTE nSrc = pInvSort->GetItemSrc(i);
5 q4 G) s+ |0 V. f. q( [ pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);( U) {6 ~, s% U- o+ F) K/ \
if (pItemElem)
% |! @( `# \4 ^) B4 @; x {
! x1 R! ^4 r5 i% |0 O6 [/ x if (IsUsingItem(pItemElem))- s, k5 j: A$ L$ a) H3 e) d% a% ^ R
{$ o! B6 G5 H. E3 T
//这个道具无法移动,跳过
. s7 l- V9 W, J7 V7 Z; H1 V+ f continue;, p9 y# K8 B8 U0 t4 x2 B
}
8 ]7 u7 E% L; F% e }else{
) P8 b X- x" u //空位置 不用动8 Y% r1 ]3 [ P4 U* y; g
continue;0 c: z+ B+ O; W+ T
}' R9 o7 _0 N5 M6 B
//////////////////////////////////////////////////////////////////////////
/ D! K( k5 q3 F! U) v //开始移动
# n% d5 P/ }" F4 z if (nSrc == nDestPos)" Q9 G, E' y6 c% w1 q
{5 f2 [1 |/ |7 s- N4 u7 S5 ^# q: o. y1 T
//原地不动/ Y8 \% V6 i+ K' g( m7 }
nDestPos++;
. s r8 l# l* X2 ?/ |9 H continue;
' d! Q- A$ e2 [- ? }2 R- ~ L: t9 s# l
pInvSort->MoveItem(i,nDestPos);0 |* L2 u! l) _: j8 d
g_DPlay.SendMoveItem(0,nSrc,nDestPos);) Y; Z! R% d% c3 h/ y# n
Sleep(5);1 B6 ~' ~, U3 T4 n
//Error("移动 - %d->%d",nSrc,nDestPos);& J; ^" D4 v: N: v
nDestPos++;
/ `3 E9 L5 D7 V8 }; M1 U c" x }: w5 \ j' ]6 y3 _$ p
//取第一个元素的信息' R5 ] l. D3 k! v
/*) t* h6 ~- \& Y- z: \
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
$ M& J; e% o2 D& R4 @' M {
! [2 g& A/ N# j/ z- u Error("Move - From:%d,To:%d",vItem[0].nIndex,x);" l% q4 C2 U, _4 H9 a( K" l
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);% m$ i$ a# O& H4 Z+ J! S [& t
}. w+ c. C- P) }
*/* j6 N" i: d* R$ D' h
//////////////////////////////////////////////////////////////////////////
9 a+ N. {* ~6 W/ d7 p& u break;
! Z, Y6 T! H# o2 }$ [7 c% a }( l$ F3 Z5 k8 A8 D- k0 m; m
}
& @: x4 {* V8 F1 [# H9 z}
, b% L' {+ k4 g [7 `% nm_wndMenu.SetVisible(FALSE);
9 l$ X7 T% \$ w3 x% [
0 g, B; Y) y5 P-------------------------------------------------------------------------------------------------------- \6 P' F6 D6 b* D1 y
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
% v$ G1 f' O# x" h{
1 Q7 e; e* x0 @0 `8 i! E% S2 ABaseMouseCursor();8 I% \, V' x; E2 }
}
% n1 _; Z6 c" j: F* I在其下添加:; |. ^5 M4 V& o: T
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)3 F, e. ^+ c1 Q2 O H3 }
{
0 E9 [& Q* m cm_wndMenu.DeleteAllMenu();
: c8 V3 k7 V4 [9 Gm_wndMenu.CreateMenu(this);3 S6 H/ q' P0 T5 ~5 ?! u, y7 k3 I
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
- N( h2 ]$ n+ {$ F- m7 P0 T G' s' U4 u) [) i; X8 ]( y
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))9 E. r) G- s( S& b5 e# a
{- D% Q0 b' u, X0 F6 A6 p8 K
//P以上级别才可以删除所有道具
, y- R# [* Q' | m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");& b1 H0 G; e* }, U
}1 B) g' W* ]4 N0 S( H: h+ A
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );* X6 F: f7 z) ~1 S! d5 j9 c
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
* C' y) R% z, X- i9 w% o+ vm_wndMenu.SetFocus();) e' k' N5 u( |* Y. i
}- D) y6 y- R, q
------------------------------------------------------------------------------------------------------------, ]$ o& O+ I; `0 R. ~+ ]! t1 J
*************************' x" s2 y- b# r# A, z6 Z3 M( n
WndField.h文件3 G/ x" _: h( b$ g9 @; D
*************************: G7 c5 e E" B+ ^1 Q, `2 t# p( c
搜索:BOOL m_bReport;
( P+ M% o" ?# p" Y' P- |其后添加:
# B. C w+ X4 W0 S( RCWndMenu m_wndMenu;
- X2 |& W5 ^5 J0 W# I9 x搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
+ ] Y# q- L6 M/ t- d其后添加:. T& b+ O3 F4 B$ @$ Y* M, A' O5 ]/ c
virtual void OnRButtonUp(UINT nFlags, CPoint point);! ]! u* k3 N+ A
" u5 m0 | f/ b/ s# e9 H5 T9 c5 p. ]9 B% c) N1 U
|
|