|
|
源文件中_Interface文件夹下WndField.cpp文件! A8 P% Q( ]$ F9 G" I/ G' k
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )% ]- k; [) Y) L
9 Q, b2 n. j# `1 i
struct sItem& V& v& X$ R+ u9 J! C n
{* R# D: {. a8 M( J, j* X
DWORD dwId;
! ^( l+ q: M. U; H& n! uDWORD dwKind2;' @; m' G8 ?. F+ D% E
DWORD dwItemId;
; S& k) Z9 D7 N1 f" W$ HBYTE nIndex;3 ~- Y) w! B& S! r% _
sItem(){
C% x$ K, S- E* M dwId = dwKind2 = dwItemId = nIndex = 0;
( w. t; h8 W, F+ G0 G5 x9 R}
' s8 O4 r* O5 D5 R) \4 Z' B& qbool operator < (const sItem p2)5 G/ \0 v3 E! v9 f* _9 E# i
{
' Z; s9 U. z! V; y3 d _5 X5 |, p if (dwKind2 == p2.dwKind2)
; x% r: O8 h9 x/ |% ` {+ k- ~ N9 G0 Y( ~0 N
return dwItemId < p2.dwItemId;% m- }; c+ ]1 a7 v3 x* i0 V
}else{, Z: \; D6 G3 T$ ~
return dwKind2 < p2.dwKind2;& m" Q1 f4 J1 `+ z
}: {9 Y5 Y7 p2 ]/ c: z% N
} P8 y4 {0 Y. e. s/ ~$ s6 e9 x
};' c" N7 D+ t/ c" I: f2 s
class CInventorySort+ T6 C! W. Z C5 C& `' a) a: B
{
5 m7 W# G9 E8 f$ E2 J( v+ @public:% B6 G2 P) X9 {- q
CInventorySort()# ^+ o; M; ~' h7 [) ?9 U$ Y4 P
{/ ], b% f2 n& P% ?: g" E2 m! Y2 G
m_dwPos = 0;% @# z- r5 X" b+ n. Z
}
) t' T3 C( r; T~CInventorySort(){}3 }4 {. |5 H0 n1 A/ j' q: |
private:
1 o, D. [- v; F4 L; [* ]7 m2 C/ s( vsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
9 O- ~5 D" Y/ [8 ~DWORD m_dwPos;
# z( g# B- j: ~public: D4 q# e1 X2 d# i; W1 F$ m; k3 y
void Add(BYTE nIndex)
6 M" Q- H( y# t; }$ O{
5 O9 }; z% ^" @ if (m_dwPos >= MAX_INVENTORY)7 [+ q# G: T2 ~
{
* g/ l3 i) t5 x1 [( P3 Y return;7 j" y- c2 l5 `" Q! Q5 I( [0 S& p
}
( S* _% x: b+ r$ i3 d0 ]6 h m_Item[m_dwPos].nIndex = nIndex;0 ~6 V; L. r# q
m_Item[m_dwPos].dwId = m_dwPos;
: _0 Y* m/ A! L5 ^ m_dwPos++;5 P# v$ s+ E% i% v l. a
}) I8 E4 x- t3 o& J; p# z. B
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
# a9 h) \9 s# o8 r% q7 F{+ s- Z* ^# W0 c1 J& h; O
for (int i=0;i<MAX_INVENTORY;i++)
8 G3 E3 r$ m( N( {9 }+ ~$ u, S8 A {
~) V# V0 N2 }8 J3 z; W0 u0 \0 ~ if (m_Item.dwId == dwId)- F/ J- [& B( k. U
{
# L/ ?2 Q# L! B) t8 J* X return m_Item.nIndex;
! S* a0 l5 u- o! Y9 U) B) F- \ }
+ A6 {6 f3 i5 r! A: M }2 P! \! t6 ^; w! Z. B6 G; O1 U
return 255;' F$ }5 I$ b4 q8 t- ?
}
" U1 `* b h: b' x3 |' U0 svoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
8 d; b& N2 s9 ^8 D& c{1 D6 U! c' {' r) s5 Z3 i
BYTE nTmp = 0;
1 v$ c# w2 `+ [ bool bDest = false,bSrc = false;
* | p" c+ I4 _; {* R9 O for (int i=0;i<MAX_INVENTORY;i++)
9 e( A, y5 v! _( } {
8 Y, `4 D0 w0 V3 G$ M7 K if (dwSrcId == m_Item.dwId)8 P+ G+ Y3 Q5 H
{4 {7 |3 a0 Q0 J, h) W
//id相等 则 改变对应的dest和src3 a+ C1 ` Y8 M u
nTmp = m_Item.nIndex;
0 [0 U4 L9 f% `5 I m_Item.nIndex = dest;1 d; m8 [/ e, A- B
}
. ]5 i! g( F% o$ _) f }; v% M% }/ V: f. q4 x
//临时数据保存完毕,交换开始( V7 c9 A+ Q6 d7 J4 H! g
for (int i=0;i<MAX_INVENTORY;i++)
; M$ L! P- x" D" Z6 M0 @ {8 H6 t ?/ [2 A o [
if (dest == m_Item.nIndex)
* _7 {8 e" \3 q$ b* p {
& j+ ]& Z' L" G% U( u: F //id相等 则 改变对应的dest和src* l' C8 ?, W9 ~. \1 C% S& e5 I
m_Item.nIndex = nTmp;0 w ?+ A" T3 [' n7 E# y" x7 ~
}8 X& n6 m& _$ O- O9 A. R/ d: o6 ]
}
5 I0 r; p2 i5 L c3 P- [/ p}
( u# Q% m( j" ~1 z/ v9 n: P' W};
' N% }3 H2 f' R' U-------------------------------------------------------------------------
0 k% R) L' N( m依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
+ h F1 j) {9 S$ l搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
1 J* T- [' }' P1 v- [- h紧靠其上添加:. X3 n, {& D. `* A
if( pWndBase == &m_wndMenu )4 \/ a9 o( |& W
{2 D# S/ M/ v) t& |, V# S) l: [! k7 ]
switch( nID )
3 K5 u" y; A* T% q1 F {" j$ s) D' j3 r
case 2:( ?* s4 s. y' v/ ?9 c9 a
{
( D* p3 B! A2 g/ o2 n+ S4 i3 \ //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);; u9 V0 z' f1 l6 B
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
! }# }* p+ q3 `1 w4 |) [ {/ x7 E* G/ A, g; z0 G
break;. p# g% J- S4 z7 V
}0 m+ Q0 p' `# c( @2 W! a3 u. Z
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++); E, Y$ {2 G. M; r& T9 f
{5 I3 F: L$ i1 R. U! @ }! F
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);, L1 U% C9 {& d
if( !pItemElem )' G! V6 P/ D6 l; D. j3 B4 L
continue;
8 O2 C3 }1 S, i if(pItemElem->GetExtra() > 0)
$ ?( [/ Y" q4 E9 d, r continue;+ R) C" p( w$ _! j" S
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
6 [( k7 y; g$ Y& y& ^9 o6 M9 z continue;
3 Y% O8 ~. w! V0 G9 j8 N; J if( g_pPlayer->IsUsing( pItemElem ) )
+ F: X- f# J& D% k# Y continue;" T7 c" x/ ?5 C, e3 e7 l
if( pItemElem->IsUndestructable() == TRUE )
3 x# w# v9 s2 L( f' H6 Y {. g: H+ A) @( S! [/ |
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
( N: i$ r) ^! l* o- |% m) C continue;
) B$ K0 d6 D1 F" h: d4 u }
- X- u) t- O6 p0 H g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);6 I! A; u+ u8 F% B* t
}# g, ]1 h r1 t9 f+ P
break;' h' h3 }; E1 w# w
}5 v5 d) s" q% U z8 y- l6 ~
case 1:
9 c; {3 U3 p3 a6 @6 m3 y+ y {8 M; Z0 V! Q+ u# b# a' z) L+ p
//整理背包
5 J, u9 U: x8 \: z //////////////////////////////////////////////////////////////////////////
: R" d ~0 @5 _ //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
7 V! P* d( A0 h4 C2 c //////////////////////////////////////////////////////////////////////////" b7 f6 _0 b2 \. x# B+ t _
//////////////////////////////////////////////////////////////////////////
# a# n+ Z9 M9 p- M: k d" [" k CInventorySort* pInvSort = new CInventorySort;$ i( q1 O. Q, T* z2 \* ?7 s
vector <sItem> vItem;/ z. D7 u& ]- V+ ?" v
vItem.resize(MAX_INVENTORY);//初始化大小
! ~8 A0 p* l6 T. m //////////////////////////////////////////////////////////////////////////
& b U9 S1 c* |' t9 b/ e //填充数据7 c8 y( m9 o5 |& W4 O4 p+ q
for (int i=0;i<MAX_INVENTORY;i++)9 I( B' P, N, d
{+ p& }+ @- n8 r0 l
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);4 g' o6 I/ }7 F7 U% t# X, @$ _
if (!pItemElem)
( }! Q+ N$ A n( R* T# |" D {0 ?0 p: K' ~' {' u s4 s
vItem.dwKind2 = 0xffffffff;' G- Z/ X5 V; E
vItem.dwItemId = 0xffffffff; V8 n M t9 E# z7 B
vItem.nIndex = i;
% ]* o( ?+ R4 i. A9 r4 Z }else {
3 ~" i/ c A1 @/ |! S1 d ItemProp* pProp = pItemElem->GetProp();$ M' {7 ], l% G! ^& s( F* @
vItem.dwKind2 = pProp->dwItemKind2;
5 f- I R/ F# m vItem.dwItemId = pItemElem->m_dwItemId;
9 P5 M, m3 p- l! R/ d vItem.nIndex = i;$ G, ~. f* K+ m4 J) M! {( |6 f
}
% @! U. ]: j; N/ G7 `# ? //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);2 g. u* n) h/ f% m
}7 H* I3 v$ Q+ N6 O! s: `7 U
//////////////////////////////////////////////////////////////////////////
2 F' [% y* [8 G2 T sort(vItem.begin(),vItem.end());//排序- K, ?; z. b/ v6 y7 [0 _3 h0 _6 Z
//////////////////////////////////////////////////////////////////////////! V5 g! M: D) E) B. ]5 ?7 S
//交换/ Z0 M# h: ^% V
for (size_t i=0;i<vItem.size();i++)
- [ u# T! c& p; d6 Y5 f {" h) ?6 D) s+ ~/ ~: V T" T2 R
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
5 n" P7 |, Y7 r; S pInvSort->Add(vItem.nIndex);
9 z+ v5 \# K* n0 c, E$ m. g& u! x }6 b* Q! y: s4 k- e
BYTE nDestPos = 0;
! e: {/ e$ H, c3 v$ c3 g) O for (int i=0;i<MAX_INVENTORY;i++)7 k- R z' ]" ?0 E5 H+ T% j
{
9 R( h8 a+ Q. z- Q: P( F1 t CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);$ Q" C$ l$ [0 \- _, h
if (pItemElem)
2 j( O, x8 ?& Y& a& y+ v& p4 H {
. ?0 V ]0 e3 |. l; q e ] if (IsUsingItem(pItemElem))
k3 E% Y$ _9 j* d3 J# @3 S {
# u( V% p2 A( ^2 q //这个位置无法放
1 J) {7 B$ y0 g nDestPos++;
: |; O2 w3 E: t1 b& ~1 w }
3 ^0 |& I0 K4 s4 h4 D$ f0 R, ~ }# x2 r# i: u' e" V- g+ Q
BYTE nSrc = pInvSort->GetItemSrc(i);
5 ^9 S9 l4 Y' S% | pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
5 e; w( I$ H4 E7 l; { if (pItemElem)
: l* C& [& c$ P" n {
, @7 Q( D; I! a9 T3 z/ z$ E4 v if (IsUsingItem(pItemElem))( A9 G6 n5 I; J( {! h
{
5 I( a+ ]* s1 M } //这个道具无法移动,跳过
" ]- [6 d% o: L) T3 c* l! z+ n continue;/ O$ S# R$ z0 k0 N
}
* t2 G" ^7 z8 u! ] }else{
- I: z! M$ m. ?: V) Z6 w //空位置 不用动) h6 c1 F% X. C& X8 q( u! p
continue;
: R r: h) s5 J2 Q% x" ]$ ?8 [9 m) O% a }
0 p. v1 e- \+ A //////////////////////////////////////////////////////////////////////////. Q0 _1 m: }: o) f/ z
//开始移动
- Z7 f6 }4 ` S* }8 g+ @ if (nSrc == nDestPos)& C6 q" A" |& t2 o7 ]8 P
{2 J4 b: R0 \: ~1 J6 o+ X
//原地不动4 m2 v* {* g. L: g" I
nDestPos++;; \) X% U/ T+ k9 M) k
continue;& f9 m5 ^! U6 a4 S! ^
}; Z5 X' n# T/ `5 S( r2 Q: G
pInvSort->MoveItem(i,nDestPos);% l0 v& W z) q. B1 Z# e
g_DPlay.SendMoveItem(0,nSrc,nDestPos);3 Z7 M# H$ p a% @- x- G4 g) m
Sleep(5);
$ V' N! k, _1 H' r( N% D //Error("移动 - %d->%d",nSrc,nDestPos);
( ]; \- N' I( l/ H% d nDestPos++;
+ k4 H& k9 O3 M }9 D, \3 ^/ s! F) `
//取第一个元素的信息
S0 k* L% p# N( @( m, @, q. b+ ? /*
, P+ ^' |" f% e if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)9 a" y+ D" Z2 Z
{" y9 N, L2 v, @- M, \ ~, g
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);: h; F: H' V: I
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);1 D1 l5 e6 H( u0 j
}' y. z$ \0 x* W! |
*/
) O# j, M; y( R& j! H //////////////////////////////////////////////////////////////////////////
|# d( f0 q V6 M0 w break;3 n4 c. |$ N; f7 e2 b8 f
}
X" W9 Q$ ]( a1 s2 y( d3 T }
3 B. F9 `" Y( ~* v7 S {5 ^}( U, G+ w$ R$ U: H! l3 B# ]
m_wndMenu.SetVisible(FALSE);1 R ^: `" K' E: s% P
* o! E) `$ Z: ^
--------------------------------------------------------------------------------------------------------: m/ u9 W3 z! m9 k
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
. B% a) v! k/ y' j1 I& V- g{& f Y# ?* y5 I* k- M
BaseMouseCursor();$ ^7 U6 g3 D: s* ?
}6 B2 U Z, D- ]1 D: Y* u- N# C& }
在其下添加:0 m H1 j% V" l
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
1 d4 e6 \8 b4 ~8 ^# S- G/ g{1 ?+ t1 D; e" g4 i+ I
m_wndMenu.DeleteAllMenu();
' v+ _' Z J; ?5 \- \m_wndMenu.CreateMenu(this);$ M9 t! O; t6 p: U
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");! y. Z5 t" A$ J( w9 F3 r! o4 A
* e# m5 Y2 m6 W- P d! c
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
k2 Z* ~- `0 q" J! H, b{3 Z) |+ v, g% n# N0 M' S2 c) w
//P以上级别才可以删除所有道具
0 M! n' p0 _# Z m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");+ C6 S% g! e z& b
}
3 A, F: d, J7 |# A4 y7 x( I& Am_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );* {6 D+ S! Z* ^2 C2 c5 d" o
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
2 Y" g& r7 }5 p& i3 Q2 Nm_wndMenu.SetFocus();
6 Z! T, w/ M1 y ]/ N}
- r6 ?" \4 r# V/ m) z. R/ ?------------------------------------------------------------------------------------------------------------
@* M) m9 p* m4 {4 y( Y*************************
% V* A2 ~& \7 W8 @/ WWndField.h文件8 s9 c" T- e4 F$ q; ?; E. S$ J
*************************
* m- y' G& E( g* n V% K" _搜索:BOOL m_bReport;
# [- I4 Y, @$ ~0 P* W0 k" D其后添加:' O0 K' T1 t( g9 t$ i
CWndMenu m_wndMenu;% m5 U$ L2 d' R1 w5 Z' O5 y
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);4 l4 O) J/ Q6 y2 W" P$ a( L
其后添加:
4 T. }" q* u- ~. P' K1 hvirtual void OnRButtonUp(UINT nFlags, CPoint point);
9 o7 B/ U6 I; f9 Y& ?% X# r# G
" O: N6 r( e' P% i" n; D( F4 o0 ~3 L% n& E. i$ Y% k8 U
|
|