|
|
源文件中_Interface文件夹下WndField.cpp文件
1 S4 M$ ^0 X& f' ~7 ]% m搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
q. V. ~9 u0 n
9 f" g. g! |+ o( wstruct sItem1 I5 d7 L$ o0 S+ P2 J
{
2 W p- z7 j* R" i7 HDWORD dwId;1 Y9 i8 I) n x7 j I6 U* w) q
DWORD dwKind2;' x! J8 ], d3 X+ g
DWORD dwItemId;
6 W V; }2 m) r" c: {5 yBYTE nIndex;
) M- O% x" r) M- x: s; q2 B+ |( J, KsItem(){
2 T9 O; V) \. x8 o dwId = dwKind2 = dwItemId = nIndex = 0;$ Z, j% ]' g- l' H* [) _6 c
}0 K% K m4 A; Y6 P
bool operator < (const sItem p2)/ D: ^0 `# s( _
{
. u) u) a! r) P5 D' \ if (dwKind2 == p2.dwKind2)2 r9 r8 Y* q8 v# a
{; r4 @8 u; G4 y% v1 z, `
return dwItemId < p2.dwItemId;
6 k, H& t1 s: J/ S! Z+ l& M9 @ }else{+ K$ {1 B1 c4 F |
return dwKind2 < p2.dwKind2;6 I. {, @: l. H6 D ]
}% \- O& `6 }) A% K
}
5 N9 p* R% a. T. I, c5 H};
8 v$ P0 K. ^4 A3 P( C. Zclass CInventorySort
- J" `5 B* d1 P! S1 J1 X% O2 D{
' u' [5 {/ C( y7 o# Cpublic:
v0 [6 ]4 D1 r) pCInventorySort()
! M0 {% M* i0 `{1 Y' @ R1 A6 k) e5 D- j
m_dwPos = 0;( t& U$ H: ~5 h& d
}
) e/ O/ b# G) I% B* b) a~CInventorySort(){}
% t2 ^! ]. N6 U3 d0 `private:
' a: A( f3 f1 J: s. R& Z1 g9 N( T0 r% xsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息' r7 _* H. l$ n+ Y' z: `9 w5 o, C
DWORD m_dwPos;
e2 O. q8 ~/ tpublic:
# y0 n$ I P! p& [+ cvoid Add(BYTE nIndex)
4 M4 S1 M' @ R, v1 ]{
& Z4 U' R8 _- ?" V4 H if (m_dwPos >= MAX_INVENTORY)
( [2 l# h" `% x7 q+ V {
9 @) P: w# |6 D6 m% z return;0 p6 l. G( }; K* I, f
}
: r3 K: b3 Y! d" U m_Item[m_dwPos].nIndex = nIndex;
# }$ C, ?0 ]8 R% F5 E m_Item[m_dwPos].dwId = m_dwPos;6 s3 a' c0 ^! h
m_dwPos++;
) Z+ x' m1 p: L9 }) e/ S: P8 _}
& J! @2 v0 O/ F, ^% D3 xBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
9 a# l9 M8 @, F% t% @' ^{- m9 J; ?' N0 i5 `: C* C
for (int i=0;i<MAX_INVENTORY;i++), X. F8 L2 T- p6 e# d+ ~ M- U3 K
{
. P6 Y) p& T; f% I' y, I; o if (m_Item.dwId == dwId)- ?# Q6 ^8 }8 l+ |
{
; |" y2 b/ Q0 A5 C8 } return m_Item.nIndex;
3 ]& [$ P8 n8 O* f7 c% j }# V, j$ X) {- L* {) A* z
}
4 w0 |- }, \/ b return 255;
# n9 \$ |* ~+ E6 D}
" |! ~1 P) ?1 ^, Kvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
B# e+ O) |- V1 {; Y+ Y2 ~$ z{
% t* i+ k0 p- @ BYTE nTmp = 0;. i7 r' n' i# \0 @; O+ x
bool bDest = false,bSrc = false;
, ^: B7 ~2 Z& ~- p4 D" v0 G for (int i=0;i<MAX_INVENTORY;i++)
: G9 G( Q8 Q( @% i3 r# T {2 v2 F: T* q& L( n( F' k) U" j
if (dwSrcId == m_Item.dwId)
2 ~1 r& U2 R {9 W' n4 v8 | {
% Z4 J# N( k, H: n //id相等 则 改变对应的dest和src
5 g' T4 M8 H& u" P/ ^& P nTmp = m_Item.nIndex;
* ]2 H W3 d7 P4 p" g m_Item.nIndex = dest;; Z) I' u" J& s5 q1 Q4 v
}8 p4 D% h9 |4 R
}5 C7 f& V( v' ?2 H
//临时数据保存完毕,交换开始# `7 O# f% J' {9 {% K7 }
for (int i=0;i<MAX_INVENTORY;i++)
- B- N c) X1 K0 E2 S, ?+ Y, V {4 S! g; U& j5 p: p
if (dest == m_Item.nIndex)7 ]4 t- l' g4 ]5 e
{: ~7 u1 q0 W; o
//id相等 则 改变对应的dest和src+ n% H( L A8 l
m_Item.nIndex = nTmp;
- I o) J; v: c; H8 M+ O4 A; P }
: E+ Z4 J' i* J# r/ n* e }/ y; Z" C0 _1 t" `
}2 B1 Q5 V1 ^* c/ l4 w7 z
};! w- a; r8 q& y& w' Q6 ?' o
-------------------------------------------------------------------------% a* y# P- R+ H- p/ c
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
7 z0 x1 Q; `$ P8 [搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
P" W) ^" w# |" {紧靠其上添加:
# H5 l+ J$ h6 W# J+ D' o% H! E) _; _if( pWndBase == &m_wndMenu ): |% d4 E& t% m( T8 t
{" g- a5 _3 s& m% T
switch( nID )! e( n9 Y% s# S: T8 l- ~* V2 l. a- I
{1 J- Q2 z+ q7 M/ u0 a
case 2:$ C U$ u+ e/ r7 {4 B- J
{
, B( p+ n% \* n% U, D3 i: t ? //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);! Y' }. [- C k8 ^, r- \
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
! E( \" }. N! v1 v$ S7 D! g7 b" s# s {1 b/ b& A) I) |9 k* y, ^/ H& i
break;* i7 P2 m# R; t* r7 P4 N. M
}
$ V4 \; `# C1 X2 h! Z* _7 K for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
/ R" i0 I( }& Z9 f& I k) v% j2 g( ` {- i- |/ C9 g Q, D& a
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
3 x, w: X/ h. j$ H; e$ o( ^! J if( !pItemElem )
K6 |* m7 f3 i! h, G continue;. ]* V' d9 [" ?
if(pItemElem->GetExtra() > 0)8 K" T! u5 Y4 J4 k
continue;5 }' L' B! N5 Y4 a( g
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 5 \& L3 f4 v: f1 Q
continue;
3 n* |6 e9 h/ J# x4 H# @3 p if( g_pPlayer->IsUsing( pItemElem ) )
. z8 F5 G: Y; ^( g. A, \$ [- H continue;
+ s/ G5 o8 X( p( z( Y if( pItemElem->IsUndestructable() == TRUE )
! ], P9 {$ T$ P5 {. J' m+ Z {
8 V; P2 B" C' ` I% x: W7 | g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );' ]3 n5 h: O6 W- o# z; A
continue;
0 G8 f( Z. Y+ U } G) l0 w3 d/ ]6 J F
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
, Z$ z5 B* h* u/ Q! [$ f: w }- H0 B7 ]! S6 S: }9 X
break;) [! _. N6 k/ d6 {0 I- k
}) a) L% |1 x" I6 e% L9 F1 O
case 1:
1 W4 l8 f7 f; W3 c {, K( D/ y* x8 C q6 O( W
//整理背包7 n% t' [% h- p. |/ e2 q5 o
//////////////////////////////////////////////////////////////////////////
5 Z# U. E; ]& V3 N4 j0 ^ //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) ); { i! {4 W6 J6 t$ H Y& u
//////////////////////////////////////////////////////////////////////////9 a" B9 X* t: @4 L- C
//////////////////////////////////////////////////////////////////////////
# G4 f0 J2 n8 l$ i CInventorySort* pInvSort = new CInventorySort;
' I( ?$ a$ |) }- o; w9 l4 ^ vector <sItem> vItem;' A+ f; o$ r' D: g9 A
vItem.resize(MAX_INVENTORY);//初始化大小
1 D+ e5 R, c% s /////////////////////////////////////////////////////////////////////////// w* t5 `4 e. h0 X! _0 p# n* E* x) }
//填充数据1 c: l, Q5 {! M: D
for (int i=0;i<MAX_INVENTORY;i++)9 ~( k" g/ z, U0 _
{
: Q, k4 F/ q" y2 H' L CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);( l. Z, h0 A7 `$ r ~8 p! K
if (!pItemElem)
- Q7 W, {/ p0 F$ Y {
0 [8 D N/ P1 R! ^1 v vItem.dwKind2 = 0xffffffff;0 j* @* [! N& {
vItem.dwItemId = 0xffffffff;
' h& ^/ R- o* x* R! f8 Q4 C% [ vItem.nIndex = i;' ?$ d2 C; S/ k- o+ k: V Y
}else {4 c9 N, b9 O( _3 [) @/ ?7 A
ItemProp* pProp = pItemElem->GetProp();9 _' L7 A( A3 |6 p: R8 G
vItem.dwKind2 = pProp->dwItemKind2; K- [1 n" u8 P7 J7 g
vItem.dwItemId = pItemElem->m_dwItemId;: a' E$ q' G6 Y
vItem.nIndex = i;7 a: f8 N/ e( U2 F9 r; I. @7 j/ O
}
6 u5 g% g4 g4 q: h# U //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);* R2 U: o% E5 k' [' j+ s
}% t+ C7 j `- e" g/ e% z
//////////////////////////////////////////////////////////////////////////0 F9 f9 c2 d( e( X$ \# J: S
sort(vItem.begin(),vItem.end());//排序
: r0 N0 y! S o //////////////////////////////////////////////////////////////////////////
4 G" n; f, w* D2 l/ x: q; k. g: b //交换% r+ \% ` m. c0 G7 u2 R
for (size_t i=0;i<vItem.size();i++)& t0 n# m' }) S7 T f5 `2 k6 l' c9 A
{
3 {' ~' O" W9 w, H- r% T: T //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
+ ]0 g* c: e4 p. j1 b pInvSort->Add(vItem.nIndex);
1 `% B; |. `; O7 }! A, n& r& K }- b5 \$ b9 u+ i3 j o. f f
BYTE nDestPos = 0;. o8 b4 X9 ?4 X( a/ B/ s
for (int i=0;i<MAX_INVENTORY;i++): |8 G9 f0 |6 r) f T$ I
{
4 W) H. u1 }8 W: ^, o CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);! R3 v" X7 c `
if (pItemElem)
; }# u/ m5 `* M3 F {1 _: _$ M5 u) y! z
if (IsUsingItem(pItemElem)). ?5 N' L9 G+ o0 J4 u2 f+ H
{, R) H& p) ], n! ^' n: M0 H
//这个位置无法放
}' x$ x0 ~& S, B/ V* g nDestPos++;
' N, S3 `8 @( c" g* C6 h }
0 p+ F, C s" J& ~ }5 I/ H, E2 `1 z
BYTE nSrc = pInvSort->GetItemSrc(i);
0 X: s* @/ K! f1 [0 q pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
. o, ^4 b! |& r; K e' w if (pItemElem)& B% h- N8 L7 M) T/ a
{
5 C. C& `# ^5 B" p if (IsUsingItem(pItemElem))
$ y! f7 k+ l5 L* h# S$ k {
0 d) T. \4 b' n. d; e //这个道具无法移动,跳过' O2 d) q0 f: }/ I% p+ i8 D
continue;
/ |# z& Z* n3 h }
. d1 Q8 m) j5 s- a }else{
- P9 _7 t h; M" [. ~7 H //空位置 不用动' G% z+ F7 g2 S9 `
continue;% g' x' ?& W7 ]) r* L# k ], ~
}
5 y, \1 A \8 n //////////////////////////////////////////////////////////////////////////$ ], o$ {7 ^, I# p& s2 w4 [( \( u
//开始移动1 T% R7 r! I0 H A3 `
if (nSrc == nDestPos)
8 g% W* q3 v+ Y4 R9 {, `) B, m- m {
9 W8 o( z& C' r$ V0 i' H+ z" z //原地不动
/ b- _( M! g, n nDestPos++;5 A4 P( g7 t y. k% e1 n
continue;
9 S# P6 u% x! }* M4 O* i9 w% T }
! G% N9 L% _. q( P. Z, u pInvSort->MoveItem(i,nDestPos);7 A1 ^) K# q$ u1 H8 s2 `
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
3 w, s; r- m; h Sleep(5);
' @8 x Q" B$ z% L //Error("移动 - %d->%d",nSrc,nDestPos);
$ Y3 c) ?3 J, @" s nDestPos++;3 s8 X9 ^0 L- G
}6 H' x3 h* @1 k! f0 L W7 g# V. h
//取第一个元素的信息
, Z1 f$ R. {/ | /*
9 d( \9 ? h2 v$ \ if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)8 \0 I: c- R/ n, j
{8 \; [! I/ o+ E( u/ d+ q R
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
& y( u# m+ Z4 x0 ?% a! m# U( ` g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
9 ?( \$ H" [& |8 D+ r$ S }
G3 f; C% y$ H% o+ r N4 q4 \ */
; D: @5 E4 f9 U/ s0 l //////////////////////////////////////////////////////////////////////////6 [4 O, F2 I5 w
break;. t2 P6 r& b6 S! i' |' W
}5 E8 p2 t& |8 t& w8 [# P a- i# X
}
3 Q- M6 l# P) X0 L% m}$ h: [1 C3 r. R: K; \; H
m_wndMenu.SetVisible(FALSE);9 `! z5 S% _3 x: V! {1 c- b0 [ F! C1 L
6 k; F# |- O U/ w# @--------------------------------------------------------------------------------------------------------
* r0 Y( X c6 I% i+ g8 x; B6 z0 V搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
7 N* e5 h+ L+ T; N+ a{* V# K6 ?0 E! c9 T6 }* q' d
BaseMouseCursor();# T9 C3 T: \7 g7 C/ N, G
}, p/ m z' \3 h& O P
在其下添加:
0 H: w2 F6 S5 W, _+ @& Ovoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
" J8 Z0 `+ h: @7 ` D{
( x0 D+ Y, n4 X9 a* Xm_wndMenu.DeleteAllMenu();
4 }: A6 Y0 A3 G5 Vm_wndMenu.CreateMenu(this);
4 n: M4 C/ _0 vm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
. v& G) _# D' ~/ Q; j1 m
" k+ K" X* t o- T, r8 oif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))8 u: J& U# U5 _
{( w ]+ B( u- r! j7 ~( R
//P以上级别才可以删除所有道具- p$ X5 p* B3 q: Z' S
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
. E; r8 `2 J4 q}
5 A* S/ f$ C: nm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
, F. v7 Z) a2 H- }9 N& w2 q( zm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
/ d/ j2 g* O, B9 F% Q- om_wndMenu.SetFocus();
3 a! ?+ L9 O: M+ K' @; P4 [' ]}
$ t1 a; c; b; }" R7 \------------------------------------------------------------------------------------------------------------
) C% z7 {" S1 [: v, n*************************
3 k" _9 {2 Z6 {2 | H& [( W+ DWndField.h文件 p: B3 G9 w. G! m
*************************
! [% l1 x Q/ }2 @" b" ^& J搜索:BOOL m_bReport;
; C& W+ V. n/ l/ t" p其后添加:
: c2 ?( \( I# MCWndMenu m_wndMenu;' K: X0 Q% e6 I4 w1 e: \3 z
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);9 ~$ X0 G# k) m$ n
其后添加:6 t- N7 V* u' M7 V/ h
virtual void OnRButtonUp(UINT nFlags, CPoint point);
) H# V- |8 }8 A, q+ C! g0 ?# L( Q! o1 x
! i' q. i' _+ `6 |
|
|