|
|
源文件中_Interface文件夹下WndField.cpp文件+ v, q# b7 x" p
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )' c; t1 m& _9 L7 [
, ^2 _' q" ]3 N3 L: p' y H8 [
struct sItem
; H- \. Z. `8 n: ?" e- \. b{& q* `+ d B6 n1 J2 X- z
DWORD dwId;2 [( o$ c. V4 _! T2 |; L5 {2 h! Z
DWORD dwKind2;
W8 y& Q" D/ e* t4 TDWORD dwItemId;
/ u; D0 S1 F; P( m8 p- X# EBYTE nIndex;
$ y/ C0 |: R1 i0 {4 VsItem(){
. r$ t& h+ T, y; b: ^8 J dwId = dwKind2 = dwItemId = nIndex = 0;
( Y/ }3 u- }7 c, h Q3 n6 N2 @2 {}' _' \; a, _7 `2 e; V/ p
bool operator < (const sItem p2)
6 H% d/ ~' o$ ~, h{
& m1 [! J2 h& d1 U- Y! M8 F if (dwKind2 == p2.dwKind2)* t) x' r4 `3 M3 ^$ a3 A% ?( ?2 ]
{
- j1 U/ c* x" L$ H0 c return dwItemId < p2.dwItemId;
& \; e5 f" P& ?# c }else{. {' S* j' U- [$ X0 d
return dwKind2 < p2.dwKind2;
3 F$ W; u9 U& |, P }
2 A' I& b9 G' m' B3 S r}2 s' I6 U k/ D7 n0 B
};
( W9 Y2 e! g F! M9 Kclass CInventorySort
7 c! ?6 H, M" J- ~4 Y5 J0 e{! A+ |8 C2 h% J6 {5 `, k+ S; z
public:- g# u2 m% `, f% u% ~8 o: k* A4 P
CInventorySort()5 v: R& G% G" Q0 K$ ^' q8 C) k
{
9 t- J9 O. Y' l* L: i m_dwPos = 0; a {* B1 v$ f1 A" ` ~4 Y% k
}
: h& T! h. L+ F# P8 |- c g: G* o~CInventorySort(){}
3 c. y( _: c4 L, h% D1 hprivate:* e" x3 ]; [2 _. c( \1 Q- w5 Y
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息& U _& Z$ T# C1 X
DWORD m_dwPos;
- h& t: @9 @3 G& u7 r0 Upublic:
7 ?& j2 g& [# {! K0 S, ]void Add(BYTE nIndex)
5 y! l; h+ |- i# [4 s! H9 h6 {{9 m+ q, |/ ]! C, G
if (m_dwPos >= MAX_INVENTORY)
+ ~% q* ]: N9 B {& m ~* Z* b5 d# e! V# i+ y5 c% G
return;7 z' ~; @" Q- ?$ \9 @2 ~
}* [; F9 r) Q: ?, W8 u' J
m_Item[m_dwPos].nIndex = nIndex;* b6 ]: N! M% K+ {4 r$ j4 @
m_Item[m_dwPos].dwId = m_dwPos;
7 V0 M9 [! W# u" b* h m_dwPos++;
3 v4 U% [. g- U' y1 O$ O}6 n* ?5 Z6 v5 d9 M: O
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
! L: S! d6 K# O ?* B/ ^4 o6 x{
# a$ n- E E2 p4 K6 h, \ for (int i=0;i<MAX_INVENTORY;i++)
) J' K+ l( i3 u8 b3 C {
$ x' |- {7 a; z( Y/ q+ O if (m_Item.dwId == dwId)
$ ^" s. {! Y0 u% Z1 W& E3 C {
$ z2 f9 [: o* w4 v7 E3 a. p) f return m_Item.nIndex;
0 ^( u7 j; h8 y- [+ d }
- F5 c* V8 S, n }
6 r' r' R! Y4 f& `5 O return 255;! ?. u T( q2 p! }. K6 D
}
* y. c/ q5 T% \/ {9 Qvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置- w* `4 j a' a4 X
{% \. S. e3 B) d$ ~- v8 M- Z* D* Y2 c# M
BYTE nTmp = 0;9 V& Z, H6 E6 c/ l1 I5 u
bool bDest = false,bSrc = false;, C& H+ S9 M! s8 n7 A3 b O# d
for (int i=0;i<MAX_INVENTORY;i++)6 Z8 s& G( j- d$ ?5 j5 K E
{
# v3 B0 c, T* `. T( ] i if (dwSrcId == m_Item.dwId)3 f8 D0 ?* `( ?
{0 {7 {. @/ p. Z( q
//id相等 则 改变对应的dest和src/ h$ e4 C6 w: ^& ]0 h3 I
nTmp = m_Item.nIndex;
1 _- c- V; X: W m_Item.nIndex = dest;* a- a* \7 t1 w
}
. s6 y: u d! U' [* {- b }
6 q Z& }8 T4 C3 d* r& p/ { //临时数据保存完毕,交换开始
/ s: m1 z; [/ l for (int i=0;i<MAX_INVENTORY;i++)
7 E* m) L7 P' a; K- m2 J. d* L: o {& \+ E9 p1 `' }3 X Z8 }
if (dest == m_Item.nIndex)
0 _$ O8 G1 m3 A/ g9 H; m {. p$ U: z+ M$ Q- y6 ?9 @
//id相等 则 改变对应的dest和src; C3 j c2 `0 y9 w/ Z+ ]8 W4 L9 I+ e
m_Item.nIndex = nTmp;4 {7 b8 Z3 J [) `/ R
}8 F, D' J; `% `4 w( q8 E( j d
}: U% d3 o9 U% U+ @
}, p! F+ V+ i3 m5 y4 A) H
};9 s$ J& a, D5 T' p5 [6 l
-------------------------------------------------------------------------
* @7 ^& h7 }: U, T5 T( {$ W依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )8 Z% [0 n* c9 G
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);/ }/ L% Y9 E o* d V( Y
紧靠其上添加:: G4 m4 K4 k. l
if( pWndBase == &m_wndMenu )2 O7 I2 J8 j$ }
{9 k- x2 U1 O3 @, Z4 w# f' o q
switch( nID )
- ^/ T( @% ~0 v/ }+ X {
( q0 m' U& ~3 f, i: h case 2:7 V+ t6 J, C7 O4 ]* @5 j! p
{
) \& _5 k1 o% @% g( q //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);8 E3 o/ r5 _8 L) h9 Y% H$ A
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))& t: \7 D) g. l
{- H- a( v3 e4 H/ L6 o' U! g
break;
% i. z& y8 ^" \ }
' U0 d3 |: c: G' V {. r& ~3 C8 H for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)( G& R# R3 F' k7 @
{" h: Y1 f6 R3 e& j/ b
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);7 _6 O" Y( J# U
if( !pItemElem )
9 M! J) |! u; ~! K continue;& }5 \/ x y; L* u8 r& }
if(pItemElem->GetExtra() > 0)- q( w) N; k. m, C2 F5 l' ?: o
continue;: } s2 W. j* I' _
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 8 W# @' y# w/ C) A R5 H
continue;
+ v3 Z% p3 B3 E4 R# f1 _ if( g_pPlayer->IsUsing( pItemElem ) )
) }7 Q3 D( r5 }% B* \ continue;1 }" F! ]) L2 _2 ?. C) ]4 B! G& g1 I& I
if( pItemElem->IsUndestructable() == TRUE )7 ^% i' A& ^6 y4 g
{% o; L/ F5 }; a3 R. ^
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
5 Y; U6 D# {" b continue;- `# ?, r a4 t2 e9 E
}
7 Z) }. \$ W# Q. X) `& f g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);1 v- [% ?$ `+ B& Z* T$ ^
}6 ]; ?. g, M5 f# l: O
break;
3 i5 N9 P+ c! s* w( W3 t5 u: \ }
. a; s: [4 m' q% ^' `) z4 J case 1:3 P$ `. D, a2 e- F* n) [
{. ~: t6 c/ ?4 z1 l: R
//整理背包, y( @0 u' t4 C' Q% N2 j$ H
//////////////////////////////////////////////////////////////////////////
; F6 Z \0 A0 V1 I1 [5 h //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
8 d( Q" G5 |& Z" c //////////////////////////////////////////////////////////////////////////
" N% S% }5 V+ f2 Q //////////////////////////////////////////////////////////////////////////
% [) {0 K. X2 c. W CInventorySort* pInvSort = new CInventorySort;
6 z1 Q3 P% O# F, n* M1 b vector <sItem> vItem;4 V& h9 r' k& ]: g9 t! {7 [( x
vItem.resize(MAX_INVENTORY);//初始化大小' A! ^+ q9 i" R/ j
//////////////////////////////////////////////////////////////////////////# M2 w& `5 b; x' u
//填充数据
. L1 Q! _- \7 O& b, O; i5 ? for (int i=0;i<MAX_INVENTORY;i++)1 _* ?5 m; E: s/ D* W5 J
{
% A! E# J" ~9 k! b CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);9 d4 o: t% ^3 c$ s. }8 i
if (!pItemElem)% H/ i" I1 T6 X3 ?) z [
{% h8 D5 N) t$ @
vItem.dwKind2 = 0xffffffff;1 f3 ?6 m' d! [
vItem.dwItemId = 0xffffffff;
' }+ x$ j' t7 W) }" C# a vItem.nIndex = i;
6 M j1 l+ C( v+ J N) P }else {9 |. T1 S1 [6 x( G: ~
ItemProp* pProp = pItemElem->GetProp();( v/ o" T5 |3 a' {$ @$ d, @- k- e6 O
vItem.dwKind2 = pProp->dwItemKind2;
- j9 U- z- D* }% X/ m9 J& I vItem.dwItemId = pItemElem->m_dwItemId;" j, ^. \2 t0 T1 Z; a' R/ n
vItem.nIndex = i;# u. k$ h3 b/ B; s% x+ p$ k$ A: U
}4 J) O6 r! N! }2 F6 ? ~
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
, K+ e+ W: x+ G }( r! h9 e X% e) U9 V& {, @- x2 b7 z# _
//////////////////////////////////////////////////////////////////////////
; R4 \& B9 q$ Y3 X3 t& C4 Y% L sort(vItem.begin(),vItem.end());//排序
- o% w( g6 c0 \: R2 m& s5 l //////////////////////////////////////////////////////////////////////////1 S0 `+ H7 ~5 {" j8 a9 ]
//交换
: E& ]& S9 h* |0 J for (size_t i=0;i<vItem.size();i++)
; c, {) @! v7 S {3 o$ Y+ t5 J3 X& m
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);% [) n: W0 |. S2 C: G/ w
pInvSort->Add(vItem.nIndex);
) p _# b! o/ e) M- c }
: f7 v6 Q0 |2 t! P. L6 ?/ L m BYTE nDestPos = 0;9 h, p8 a6 c x5 F |( Y
for (int i=0;i<MAX_INVENTORY;i++). O' p8 m/ o8 v8 s4 U* V1 I
{; Z1 B |# U0 ~8 L& _- ~
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);7 I# ~4 A3 A& [ |0 g
if (pItemElem)' ^+ b: a- m& a+ A A6 a
{5 Z. v0 Q1 M- J+ W2 n6 I1 s
if (IsUsingItem(pItemElem))8 J9 ^- _, B7 v
{
" Q, B; C/ {( R* ?4 O' T //这个位置无法放
( g5 w$ v; j# Q* ?. f nDestPos++;
5 l4 T* m6 H: S; M. F }/ z( C* g$ V: C3 g; o
}( ?0 M) B9 R# R- d8 g8 W
BYTE nSrc = pInvSort->GetItemSrc(i);% n7 L8 [7 i: G8 h" R/ Z
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
6 }: v3 C* @& Y! k9 g- @/ n7 ~ if (pItemElem)
% f2 T: X6 N& |6 ] {
, ^5 H. J- d" ~+ \; j if (IsUsingItem(pItemElem))/ f {& O% T1 @/ c( G `
{* |$ j- `' ^# r2 L" t5 _
//这个道具无法移动,跳过
9 E' U/ h. T# t continue;6 g/ ]/ A% i- L) I8 L% C& a
}
# ?$ |* m& X9 D- v& O) X }else{
2 s, ~/ Y. { H3 y( M6 [7 M3 M //空位置 不用动9 r6 |: n. t3 H. _. l, g: a; M
continue;
* @" P6 Y. \' P* a$ U }
1 J" L; @' f; P/ ?3 n& k/ r //////////////////////////////////////////////////////////////////////////
+ c, l" V% A6 z, b //开始移动
, K( f. e' q; [% ~ v) s if (nSrc == nDestPos)) _2 k: a$ ^, u/ j$ l
{
1 O, e6 F1 }) |/ X! n: o //原地不动+ e& L( L8 r$ v2 ^
nDestPos++;- ^; ?& B5 O* a" O* @1 Z. V) u
continue;
9 t. Z% r: \( }0 @; @% ~+ @4 h H }
5 C$ R* u0 }2 \* G! \ pInvSort->MoveItem(i,nDestPos);* z7 j4 h/ @* b) s! {8 R
g_DPlay.SendMoveItem(0,nSrc,nDestPos);! x$ f; T, |8 F3 [% s
Sleep(5);' ~9 k/ b/ w7 p8 [
//Error("移动 - %d->%d",nSrc,nDestPos);. U- B5 [% s4 D( E- b# }8 Z. p
nDestPos++;+ p# G9 k4 |& m6 j) i
}
3 ~: C2 a) W( c" T. @ //取第一个元素的信息
+ @6 y" e9 r7 I' Z) n1 B /*
; @9 W3 W* S3 F5 ~ if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
! U) h! W% `% }8 L0 i* h2 w {
& E0 ?$ L' s6 Z/ h7 X Error("Move - From:%d,To:%d",vItem[0].nIndex,x);& h3 o" l" ?% O3 z; L( }' }
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
% F$ X0 ] _7 W; a, H }( ^( N( c* ~' L. H" j/ B. M: R+ E1 X
*/
' v; e+ b, t5 z/ X! v# N0 L( z5 k r //////////////////////////////////////////////////////////////////////////6 n4 y; v+ N4 X x
break;3 D/ s5 }2 U4 |
}
3 h' `$ E) n' B2 {2 \ }
4 p0 p$ H& P6 l4 F. C}) ]( j5 |8 A1 w
m_wndMenu.SetVisible(FALSE);
0 p1 Z7 }( V8 G+ d4 Y# [7 o" l2 ~8 \% Q* K# \- u) |
--------------------------------------------------------------------------------------------------------- U1 w" a& P; l. E5 o, Y- r( Y
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)/ |, \! Y& W& K; P' t: K
{
! n# x2 ~* z; t6 [; E5 RBaseMouseCursor();
$ l8 f% O7 M& y}
* a+ m1 `9 m- Q* @9 M在其下添加:
2 p* d- o' K7 d6 K$ Dvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point), g5 T7 ~# a# `& s) }4 B/ J
{) g4 \4 ?) O( [
m_wndMenu.DeleteAllMenu();
( t+ u `/ g4 e: o6 C4 Rm_wndMenu.CreateMenu(this);
( I8 ?7 c5 V9 ^+ [' f5 Nm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
1 _& y5 I* |' ^4 B7 T. [# O# I2 y9 {) S
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
1 N) t8 U$ ~! c! \+ A{
9 u2 c) a( `5 ] //P以上级别才可以删除所有道具. N) A7 A$ `% b; ~5 l3 v
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
! C/ r8 Y0 {* p! G}4 Y* O& ^" S/ `
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );3 G+ y2 w. c6 C0 }# [
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
! |0 F6 X, `. H% w, d7 D+ k# sm_wndMenu.SetFocus();1 ?+ R( y' K" U
}
p* C/ @0 @3 h8 u7 K5 [------------------------------------------------------------------------------------------------------------
) u* E2 ^9 |, K$ h*************************
L" O: x3 z$ }9 h7 G- jWndField.h文件
3 a+ V I9 Y* w& T& s6 G*************************: L. b$ g; O) T9 w1 Q: f3 a- }
搜索:BOOL m_bReport;
" H( c7 n# k8 j6 t- ^5 H* P其后添加:# e; }2 N) _+ R; g
CWndMenu m_wndMenu;
) n0 v2 F/ [6 j+ W搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);" [3 e" [9 o# J8 }; Q x9 A, H
其后添加:
' D) P" \; u' h9 Dvirtual void OnRButtonUp(UINT nFlags, CPoint point);( G4 d7 O o) ?
5 P3 R9 N6 L; u- K
" x6 Y H2 W5 H% O4 D3 G |
|