|
|
源文件中_Interface文件夹下WndField.cpp文件/ |, I3 [$ S, F0 ~" I/ x
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )5 ~8 e/ z* w% E9 Q+ x) }, M- A
% ^/ Q3 k( N8 z7 _5 h3 E3 @! i, T3 C* Tstruct sItem
( ?& J* Y. H8 K0 n{
; ^3 N4 I. |/ Z3 }+ u* PDWORD dwId;& c) J _" E# r; Y1 V: _0 ]
DWORD dwKind2;
& G z3 L+ X# Q* xDWORD dwItemId;
! H; A+ {: A* D$ F2 HBYTE nIndex;
- q/ [% [( x7 F3 {- ssItem(){
. P2 l+ U1 }/ s$ @0 G dwId = dwKind2 = dwItemId = nIndex = 0;6 d' u& {4 }, r& T4 ]# \
}3 f, U+ V3 |1 }6 H3 n
bool operator < (const sItem p2)
: }) ~* f$ k" n{
! |/ _6 l! S( @7 ~ if (dwKind2 == p2.dwKind2)
6 a: B0 N+ H! z6 W R {& ]( T9 p3 @7 c3 A; X
return dwItemId < p2.dwItemId;
1 j5 S+ W* ?4 Y( X }else{
* G1 z l! N% @: f return dwKind2 < p2.dwKind2;
5 {0 {/ a V* A) a: U }
/ U+ {/ s; `7 Z9 e, s/ `4 x0 j% v}
5 ^/ O7 E/ o ~};
! H* Z3 Y, z7 I$ Z5 Oclass CInventorySort
v% \: E8 |& i# f% T{
, A5 ]: O7 e' l8 kpublic:0 l( n. x' ]' [: V# k( ~7 }& ~
CInventorySort()
0 V6 `! e% u1 E{
: C: D( ]) Y( I0 E0 X+ n% S! g m_dwPos = 0;9 K) D9 K' d) \; {. i/ M
}
! l; p/ R/ R* }; M0 D~CInventorySort(){}4 q% {$ H8 ]" J3 U
private:
& F6 s6 c/ Y' s2 B5 R0 R3 WsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
4 |7 n, e7 T: d% d0 ]# NDWORD m_dwPos;
% m$ J- k7 f( @3 ^: i) G9 vpublic:7 X+ I" ?8 X! n- {
void Add(BYTE nIndex). o: [ Y, G$ J' u- R7 O+ a
{+ }# ] W& ?3 N6 ^0 s+ D0 y9 L+ e
if (m_dwPos >= MAX_INVENTORY)
5 N4 p) |, p7 o- H: e {" b2 k1 D+ `! @: m+ O
return;
5 u* i/ y8 Z4 [; R+ f/ N }
' |' T+ ^/ Y0 ^3 v) Q6 n- T4 L# y# o6 \ m_Item[m_dwPos].nIndex = nIndex;
8 X. z, }* A6 L! i+ r# l c3 e m_Item[m_dwPos].dwId = m_dwPos;
, W" O3 r. N* g* C' V m_dwPos++;- {8 R+ {3 |. |5 u4 o
}
+ l# C; S3 ^+ W b! }BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列. R# I; Q8 D5 i( l( b, S
{
5 ^9 U* |: [1 q' ?% w! ?# ]* A7 P for (int i=0;i<MAX_INVENTORY;i++)% K& `7 X' P) e) [ C
{
. ?, A; J. A6 C7 I) F if (m_Item.dwId == dwId), S8 ~4 R: {; S6 B. k0 ^7 T$ b
{ D3 ~6 Z7 ?0 q$ T F
return m_Item.nIndex;+ T% o2 v/ T7 Q' y* X% l( I
}# ~# `$ \ P: f/ y
}
0 x S; i! q+ Q& l; ^! ?3 l return 255;
% K6 S6 O% ^* ~1 ~}
E, D$ p& d/ L: Qvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
$ i& y7 A- t: [! q4 N{
) M" C9 c! A/ O* S- y BYTE nTmp = 0;
?5 f! u$ x: B% X9 H5 } bool bDest = false,bSrc = false;
0 S0 D/ m& K) f0 n6 e for (int i=0;i<MAX_INVENTORY;i++)
/ |( [" j ] h {
% V$ p: l7 U3 _) G. @1 A; b8 a if (dwSrcId == m_Item.dwId)" `3 x! D3 e% z, I$ y7 J. E0 x8 P
{2 @/ z9 c, B; L: ?+ |6 u
//id相等 则 改变对应的dest和src
4 w% @! z/ H( m# n nTmp = m_Item.nIndex;! U! T, O) h3 ^% j
m_Item.nIndex = dest;1 f& {( M, m& T9 f! v) I4 K
}8 T% u" N# ~9 h+ R: @
}+ ^. C+ D. W- L+ f' Y
//临时数据保存完毕,交换开始9 r4 i1 b$ c7 O' C9 u) [+ x3 M9 c
for (int i=0;i<MAX_INVENTORY;i++)
+ U6 r/ G/ a2 i* w {$ J. t0 b. n: X% a0 U& k
if (dest == m_Item.nIndex)
# t k# g' Z, `' ^/ ^% D$ V9 R {
6 A$ m5 ]/ p) u5 ~5 E //id相等 则 改变对应的dest和src
( |1 e9 L0 |( J/ j1 k7 B+ d m_Item.nIndex = nTmp;: X: [" B' p) c9 \0 Z0 s: z4 a
}- q* d% L2 u9 ?; O8 x7 h
}
6 P$ K" ]# L: \' P7 o, {. K}: L' {: x9 b5 ^. b; |/ g
};
; ?. s) c* b& j* y-------------------------------------------------------------------------! L4 b" P# ]" l2 p7 L
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
+ c/ [4 x+ K# Y3 t* M搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);& }/ n8 b. c, C) L" K2 V
紧靠其上添加:0 {' K. K! z# q' a5 I; P5 t! x
if( pWndBase == &m_wndMenu ). u0 |0 o9 b& M' \1 ]. c" N- _$ r
{ S! I/ a$ |) H: {& y. n( M
switch( nID )& Q3 A" g2 v5 ^/ }$ @; t$ Q+ ~
{9 Z0 P4 } N2 r" V A. C
case 2:$ ~) Z; f2 r8 T( y
{9 `4 f8 ?- F# x
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);) h) b* F! y! w1 `0 F P
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
* V9 i* U; L- O4 M& e {5 I+ ~: B$ w' Y# L7 i
break;8 [6 W7 w! D2 k9 I% q* H, }# T: I
}! q( M# b0 B3 i* I; ^
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
2 b5 x G7 W0 M4 b) S* f {- I( ~0 \2 u% g' `; `7 K; R
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);% _' d: T# V6 c; x9 s' \2 r
if( !pItemElem )
# ^5 P2 w' ~' E8 H; Q. f continue;/ a+ L! ^8 A7 H! V5 K( e2 u
if(pItemElem->GetExtra() > 0)2 Q+ S( `6 w0 i2 k
continue;
* u9 P+ |6 Z' \% _ if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 0 Z# o1 T% p& U. w h" R" U
continue;
( B) Y2 c; y8 f& m Z if( g_pPlayer->IsUsing( pItemElem ) )5 E- s4 V3 M* A% n" n9 ?. N
continue;
# P' Z9 q7 l& p& w8 ?. |7 Z if( pItemElem->IsUndestructable() == TRUE )
7 H5 D- T6 f3 s$ v/ M u! A {
+ B% |1 y: }2 F g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );* L' Z' y) w& `+ G4 J+ e
continue;
/ I* X" U3 ~+ E( P- U }
+ e# _" _* Q- K0 ^# c g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);8 `( i) h+ M. P5 _3 u, Y# B
}- r' R/ t H, }4 W( m4 z
break;$ @) n, P/ y+ ?* `. O5 A* \: Z
}# G6 J/ x0 r" @% s( I. V
case 1:+ [) n0 A! B1 g
{
5 O. w$ T! r. O7 \" T2 z9 e //整理背包
4 n" `/ S) ~4 f! T //////////////////////////////////////////////////////////////////////////- Z7 ]. E" h, i) n! b6 p: ~
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );0 y/ L5 u, G' _2 B2 }* r4 |8 |. Q
//////////////////////////////////////////////////////////////////////////& H* f; T5 Q0 Z# B
//////////////////////////////////////////////////////////////////////////8 Q6 P+ u. E9 q8 L6 Q+ m- c+ C
CInventorySort* pInvSort = new CInventorySort;
' Q& {$ B) u/ a4 M7 v7 w vector <sItem> vItem;
# e& n! {8 N, e8 Q+ e vItem.resize(MAX_INVENTORY);//初始化大小
# d: z3 V% s9 Q9 o' U+ Y' `+ J: _+ C- f //////////////////////////////////////////////////////////////////////////" t, _ d: S( a8 S/ f4 ]& ]
//填充数据1 g6 P/ a: _. C
for (int i=0;i<MAX_INVENTORY;i++)! @7 ~ o( c. r4 n, ?+ {4 [* }
{
7 Y6 y. x% ^" z" ` Z CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);; D1 r2 I) s( o* Y
if (!pItemElem)) ?- e9 j: M, A: K. L
{7 y2 J5 V6 ] T) _3 ]( f
vItem.dwKind2 = 0xffffffff;
! }2 r% p9 y. B7 C vItem.dwItemId = 0xffffffff;
1 U' n! J4 J# N vItem.nIndex = i;% ~3 x8 i; F6 T$ Y! h% `5 s' l [" g5 Z
}else {
7 I2 `5 ^( Z/ w6 j) \, m# y ItemProp* pProp = pItemElem->GetProp();1 k' ]1 i8 p3 b9 E4 e
vItem.dwKind2 = pProp->dwItemKind2;7 ?' p9 m& m: Z4 ^8 \* n4 b; O
vItem.dwItemId = pItemElem->m_dwItemId;
1 S% x1 U" W' h; B- p vItem.nIndex = i;# [- B( Q1 k4 s+ E% S7 f7 `* ^8 [
}
' |& w @ N. o2 R+ R- `, ~- Y //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
' `: J" E* D0 a# A# h0 [ } t- h: u1 M5 r2 ^2 P
//////////////////////////////////////////////////////////////////////////) o+ i/ w5 E+ [1 B" w& B
sort(vItem.begin(),vItem.end());//排序% y! |! ]' V% R. W- D! g x, h
//////////////////////////////////////////////////////////////////////////: W9 t! n8 [6 c! L3 x+ {6 C8 |; l3 b* X
//交换7 P, ]2 T% R7 @6 H9 u, l
for (size_t i=0;i<vItem.size();i++)
) @* t) E$ J4 \. Y6 C. g9 O {
6 a9 W( n0 g d: g3 G' R+ d //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);. H2 N, H. N& U+ f
pInvSort->Add(vItem.nIndex);
6 A8 I6 j) L9 O) _* M2 o9 L }
8 n8 f7 }( B& \# t: m BYTE nDestPos = 0;
7 A" D: Z+ q( q' L! R9 K for (int i=0;i<MAX_INVENTORY;i++)
# d: `9 G2 L( l) m {
/ x; M& t% \2 f7 Y% { CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);( A& }% ?# s' s( z* r. g
if (pItemElem)
4 S8 n9 M, G8 ^8 i {. X6 y _8 B# V: A5 v9 R
if (IsUsingItem(pItemElem))
4 ^+ F7 ?+ v0 u1 c1 L, h* M- J0 Y4 F. X {5 t( W. A1 K8 t/ h
//这个位置无法放
" h+ T/ a- V3 D* n' H0 N) J nDestPos++;. N9 i: ~+ g1 ]
}
; q n$ U [" }+ {6 j+ U }
0 H8 B' |1 P* \6 ] BYTE nSrc = pInvSort->GetItemSrc(i);
5 r8 [0 O2 g# A6 s! E& s* }- C pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
7 ^) L0 l& B% w! E if (pItemElem)
+ G2 ?* L# m9 m4 M; c# h0 r- G( ]& I {) L" r* w" p6 D+ H
if (IsUsingItem(pItemElem))+ y9 k6 `0 e3 r- U1 r& T
{
' P- [6 t+ R/ P4 g; S //这个道具无法移动,跳过
7 v% y4 H% e/ q- B! y: Y. r continue;
( I: Z6 A. R/ f4 F) Z }
3 N0 L: Q8 @/ _ }else{
0 H8 p' p) S5 }6 e; q //空位置 不用动
$ R7 i8 Y! ^- T: S0 h continue;
, \" {7 S) s' {! K3 [1 Q }* x/ {% ]: x" L
//////////////////////////////////////////////////////////////////////////
9 d* B+ h t& b# [ //开始移动; G; h' F( m( M' T% X
if (nSrc == nDestPos)! t0 G* T% j0 e+ r. T) L& _$ M6 N! U
{
( p( E+ ]& X- }" y1 L //原地不动# g" }8 m$ ~7 [
nDestPos++;2 Q! s+ b, @4 m
continue;
6 T9 z/ {$ n$ ~ }
0 K$ N1 U/ i- g6 n" C. L. } pInvSort->MoveItem(i,nDestPos);. u2 ~+ u; N( }3 d A) w& i
g_DPlay.SendMoveItem(0,nSrc,nDestPos);7 l* [* p+ Q! X% `' }
Sleep(5);! B9 \! H b F+ C. K
//Error("移动 - %d->%d",nSrc,nDestPos);
- ?* ?# z: A4 g V K4 z, i nDestPos++;
$ O; H! }0 V% w+ j- n9 a; W+ V }: o! \0 ?* W- n4 r
//取第一个元素的信息, q$ _7 W7 v1 @, m2 c8 y# A
/** P) ^$ X) @3 w0 ^, ^4 {3 `
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)) @' P' I/ W, q& F: x+ u
{
% G& e) t% [- l7 x0 ~! k Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
% P2 d9 I; S0 y1 L$ \, P g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);2 i- x! Q6 f& e4 W# z+ |( ?
}6 S; l) P8 W( W5 Y5 m
*/
. |. G) c( Q# q //////////////////////////////////////////////////////////////////////////
# T3 m& p. }8 \: ^# j, u break;" F8 L" J1 s" v; { d& e |+ o1 a2 ^
}$ l( w5 v _( y" G
} * q) J7 O# k ~- }6 O B, y0 \
}7 h# i% `- y# P) K2 O
m_wndMenu.SetVisible(FALSE);
6 T; `, K5 U6 C1 T' C9 P- I9 _% \4 z8 H; _, h8 Z) u* b
--------------------------------------------------------------------------------------------------------9 x& F& D& J4 H, B) { V$ \ l
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
6 J- l( L. V% c' d{; z! R: ]. ~2 z
BaseMouseCursor();6 S5 d, K5 Q: m
}
' O+ ]; C6 M+ |% i; [ B在其下添加:
! s2 ^, J# P8 `" J+ Rvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)1 K, L/ A9 A4 d1 j2 w* G' P4 a
{
0 L& C& H0 p8 S2 v- `7 lm_wndMenu.DeleteAllMenu();3 X" W( v6 g2 w3 v
m_wndMenu.CreateMenu(this);
1 q/ d) g4 `7 L% sm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
5 D& Z+ y |& c
M6 n- }* s. y: W) b Xif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
, t3 c y! o* z; a* b1 J{
- z7 y5 A/ v9 q+ ~7 U //P以上级别才可以删除所有道具
) |0 s1 G( m7 g2 d5 _ m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");3 t7 t/ q) D- d, [$ S
}
7 _- \) |3 n vm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );! X2 F1 y# e* w/ f+ P* X8 l+ J
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );1 l/ R! _, e$ e$ C- V0 b/ c
m_wndMenu.SetFocus();( e+ H3 e) @4 K" d6 T3 L! F3 A
}
9 I2 C" v. F( |( H------------------------------------------------------------------------------------------------------------6 ^/ M- g. h9 W: O) m; H P: C$ D0 \
*************************
4 Y$ L+ n" g. R( x. C5 UWndField.h文件5 K! a6 G- i3 x" B0 O
*************************3 a6 |; ~- K* u
搜索:BOOL m_bReport;6 p1 l* Y% [6 i
其后添加:
. P! s4 W# e3 I2 @0 J3 LCWndMenu m_wndMenu;) g. ~9 ]0 ?( ]9 S6 z! S3 n
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);, d* ]! ^" `, L. x7 _
其后添加:
: F( X+ O5 E. V0 U6 pvirtual void OnRButtonUp(UINT nFlags, CPoint point);/ ]' v7 Z( H: p% V8 l
2 N) o6 ~$ l& t6 P4 w f4 `# W) q8 |
+ [; r9 M1 I3 t
|
|