|
|
源文件中_Interface文件夹下WndField.cpp文件
, w$ r% P* b0 r1 U) k搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ), l: b8 }2 H% y+ v
+ m+ ]0 g$ x2 C. }4 Gstruct sItem; \# K' a1 F) ~+ b5 i
{
4 @4 L2 L7 b- i/ ^% B$ z! k& ^DWORD dwId;
- O- T, f: X: F9 G% \6 H" ^DWORD dwKind2;+ P i( d0 T" ?0 v7 f" i
DWORD dwItemId;0 ]9 f! i& ? j) Q, ~
BYTE nIndex;; w1 u$ `3 h5 u7 U* u8 [
sItem(){
7 o/ b5 R5 C% M* P+ f6 \% H/ w dwId = dwKind2 = dwItemId = nIndex = 0;
. i( {, ]# _* |. s5 D9 N}$ ` }. K* G0 I: A3 _2 H5 f
bool operator < (const sItem p2)
+ A R9 ~0 g* q8 w- O{
$ X- V/ S' A P { if (dwKind2 == p2.dwKind2)
5 f$ W+ O6 [: w% k/ `2 ?% T {
" S6 Y1 u5 l, A+ R# _: e* J- _0 c return dwItemId < p2.dwItemId;
1 B2 a# f7 \+ m- ^9 m. g }else{8 I T) T- Q8 _; j+ J* n) w
return dwKind2 < p2.dwKind2;
6 n: X' A$ b2 }- m h1 k }
+ F0 J5 Z6 A% N [3 P! s}$ ]4 g8 o3 f+ Q. h* b! E
};
0 U+ G% b* E9 n/ t% l% Jclass CInventorySort
1 A5 j6 @/ k$ e4 D2 [7 w0 C{
g4 _3 S) K) W5 M4 Kpublic:9 v! ?2 b" X: P/ [0 X
CInventorySort()
3 E4 L" F" j9 d" U( W+ q{
$ M: f; Z8 X) b& ~0 V m_dwPos = 0;
* o8 c4 q0 H/ |% [" b3 Y( r}
% Q4 l( h5 a5 P) S# G6 N3 S* M~CInventorySort(){}. d. |( G3 G4 a/ n
private:6 e' N. _1 j; O+ V7 G
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息8 k- c" ]1 F* B7 d% \& i4 _
DWORD m_dwPos;
- `5 Y. @/ Q7 tpublic:0 v q: B Z& B
void Add(BYTE nIndex)! P: O' P( U: r9 u# r) O2 U* e
{
+ O O6 D) N! r/ K6 a# m, P if (m_dwPos >= MAX_INVENTORY)
) e6 B, }, ?. e7 L; f( U2 ] {; q* i+ Q* o! L- ^. \+ q+ l
return;
* P6 y$ w5 c# z# _: R" _3 O6 e }
2 J+ m; i5 V7 S; a( d3 \: ?: a* f% } m_Item[m_dwPos].nIndex = nIndex;3 f) }; N7 `8 l$ g3 N: q q
m_Item[m_dwPos].dwId = m_dwPos;
" Z2 k1 ?' E8 |$ f% V3 I! S m_dwPos++;
9 N5 ^2 L: J) _5 B9 e3 R}' h" l' C" B9 H7 E6 k
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列9 o& O5 d3 J z. c
{5 P& \) R z. V8 l8 k" V
for (int i=0;i<MAX_INVENTORY;i++)
7 q% v* E6 E" S5 a, V {8 q+ p# j# }6 x. H9 q2 J! U
if (m_Item.dwId == dwId)
, S" z" m: r8 O$ A* P0 h {4 F' \9 L O H3 v# ^ {4 J
return m_Item.nIndex;
2 U$ @$ x' d$ A+ e }
" \. Q3 j6 T' ^: H' l } d6 |2 \, n2 S% k/ q& C
return 255;
4 H2 j, A b; |2 P- R! A}; p! {- V( k6 t1 W' s. |
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
5 s# L4 R* N- R3 f8 K- A3 a+ X% g* c: g{
" X e8 _/ n2 x2 ^; p BYTE nTmp = 0;6 ]! g2 e6 ?8 I
bool bDest = false,bSrc = false;4 p& [+ q- X! h7 x b4 o, ?
for (int i=0;i<MAX_INVENTORY;i++)
4 M# g N9 a1 _& N; k/ x1 L7 {+ e% m z {
, ~0 E1 @* m" j1 L# [, ~ if (dwSrcId == m_Item.dwId)
+ X* m6 L9 ~2 r% U' q& H- j0 m- J {5 d# ]6 v: p9 I: ]# u* _; X" P
//id相等 则 改变对应的dest和src
3 s$ |4 I. f4 n3 _: e. I% i8 l c8 {; z nTmp = m_Item.nIndex;
9 G. v# y7 q9 ]/ y' C# W3 c m_Item.nIndex = dest;
Q3 Y8 k( u' | x }1 ]" v2 K; [/ H( L
}0 ^' ?9 D6 z7 B
//临时数据保存完毕,交换开始# h6 H+ _" G& }3 X2 `% h
for (int i=0;i<MAX_INVENTORY;i++)
" g c9 b5 H7 c* D5 k% P x! o" B4 | {
: M6 i3 b& X! \% P if (dest == m_Item.nIndex)
4 x% x/ {. b# `* {+ z, Z {
% D& i, ]$ s. N; I" @ //id相等 则 改变对应的dest和src
9 N5 W" O/ o% m2 W' @0 e m_Item.nIndex = nTmp;
! E# F6 B& R' a8 Z7 O0 ? U4 z0 Z; B }' m/ L. o0 o: L8 e/ V. E
}' O% b. g$ E$ L9 p$ U# Z, c
}
' o2 O: \1 B. ^0 Y};# ]' w! p) q/ x. W# h+ Z
-------------------------------------------------------------------------
; h) |6 c. v/ X% Z7 i* O依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )1 D `, ?0 _( N3 f# ^ ^
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);1 b$ t' J+ `' F8 t+ l: b
紧靠其上添加:
$ {; k9 [4 F: s/ Y8 Fif( pWndBase == &m_wndMenu )
6 {7 U& ?# V+ Y, E+ P{+ X7 c/ S0 A2 @: }: ?$ T
switch( nID )% i9 q$ Y, |2 o8 Z6 b$ D
{9 Y" V# N4 G- m1 Q/ v. R
case 2:
$ L: m& ^3 s+ \ {7 X% z! E( k$ K; X) S7 ~
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
# o: s+ o9 J8 Q( S if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))2 {: b3 Z2 d9 {5 V, `/ l
{3 d/ e5 U2 o+ k/ T, l4 o/ e
break;. e& W* k0 a& S/ q1 \* V( B+ [
}
7 {0 ] v y) t5 t$ H for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)! g/ f$ f0 P5 q4 T" r; D# q
{/ v, l" M( W+ G' F. J9 v1 u
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);6 G n0 X3 b4 d- [; J- c T0 `, ]
if( !pItemElem )1 l8 }8 l3 X$ j; ?! k
continue;# n8 t* R7 U% q' I9 T5 s4 n# `" }0 y
if(pItemElem->GetExtra() > 0)) x+ V$ }$ ~4 ?
continue;
7 U7 Q. n) f7 t- q if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 1 i( A6 U8 E$ j" F: H8 r' H
continue;
! `5 d+ D6 |3 A- Y2 a if( g_pPlayer->IsUsing( pItemElem ) )
Y* D# o3 O" F/ ?( C continue;
8 R# K% L. u2 j8 x if( pItemElem->IsUndestructable() == TRUE )
/ f1 T3 H( F% x" T( j {* ~9 M4 l3 @7 ?3 R
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
; @0 A, i$ R' z" C! Y2 ^1 Q continue;
1 B: B/ B- v5 `4 j }
3 C! h6 X+ ^# L& f) y g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
. _) k9 d" @+ r }
) H E) T2 @% H' _' g break;
) K' p! j; O* z# D T) z }1 r' g/ z" T% `4 c
case 1:6 J* t) b3 j5 b; C! @7 }/ j
{* C+ o4 J6 G9 e4 S, @8 ~5 h% l
//整理背包
9 r2 L% Z" T4 e //////////////////////////////////////////////////////////////////////////1 H; f# u% B, ^
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );3 H% R3 K! j; o/ U6 b& ]/ A
//////////////////////////////////////////////////////////////////////////
3 }: s% [) j2 { //////////////////////////////////////////////////////////////////////////3 Y$ J" \$ S; U" v! _
CInventorySort* pInvSort = new CInventorySort;0 u% x% v2 |$ @3 Q% W! N
vector <sItem> vItem;5 w) x% ], i0 t8 X2 E3 F% `. {
vItem.resize(MAX_INVENTORY);//初始化大小
: _# B K" X6 t% F //////////////////////////////////////////////////////////////////////////! a h3 r: d1 V8 g6 Z9 B/ h
//填充数据
) ]/ v; Q M: c# P8 d for (int i=0;i<MAX_INVENTORY;i++), k" B9 d I4 S: A
{
' ^; {$ K" T; \* J% S0 n CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);* z- A3 N- T. | [4 z
if (!pItemElem)/ ?9 l8 [7 q, B. ~- |5 ^4 {
{
* F3 E( {+ p6 S2 _7 }, Q- j; [' [2 J vItem.dwKind2 = 0xffffffff;0 Y: f% Y: H. ?" I0 a! t2 ?4 R: Q n
vItem.dwItemId = 0xffffffff;
9 t" b U. q# Y vItem.nIndex = i;
6 _ `) G# X7 T6 @0 o" v# R }else {
5 r2 F0 x2 |: I ItemProp* pProp = pItemElem->GetProp();
' U- G; e- j7 ^' O& H# H vItem.dwKind2 = pProp->dwItemKind2;% J; C( E3 L- V
vItem.dwItemId = pItemElem->m_dwItemId;
6 s) s) @. @8 A- a6 W vItem.nIndex = i;/ t6 `; _' @9 C7 M/ F1 x& X
}
7 `# e+ l1 x& _ //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);7 W9 B; T) Z% H; y& q9 v
}
( p& Q" h$ h$ k* L1 M //////////////////////////////////////////////////////////////////////////
! B. d$ k* f( o. H( x [, y. m+ o sort(vItem.begin(),vItem.end());//排序- z+ T7 N! _7 o
//////////////////////////////////////////////////////////////////////////
4 _4 m5 A) r$ [- _ a //交换$ i/ Q9 s8 V1 n0 D( l
for (size_t i=0;i<vItem.size();i++)& {3 o! s; `& {0 B
{4 _8 V% N4 c N% E
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);$ ?! o- Z: S2 s0 w* d n/ C
pInvSort->Add(vItem.nIndex);) r% ~" H+ C* u7 Y
}7 j; E0 O- |- b2 [6 ?0 Z0 N" L+ H
BYTE nDestPos = 0;
' y9 P1 [. B% y, K+ K for (int i=0;i<MAX_INVENTORY;i++)/ O0 b: C, B0 i7 L# F( n3 W
{
3 g' p) q b' n* [0 S" \ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);& t( f+ N, @2 [( {# f
if (pItemElem)
, q% n) E% b4 u" B# G1 [$ e6 J {! ~. ]- k' k9 F3 b! T# U6 V5 p9 C
if (IsUsingItem(pItemElem))
" v( u$ H: U# v! H) [$ V' t* \ {* W$ k, W2 w) Z+ [: g
//这个位置无法放. \: X3 g9 a+ L! c2 k7 \% P8 g
nDestPos++;
9 d6 S' e! y2 h$ u2 m3 C }
^4 @: c! E4 T+ T0 R+ a' D% w }& C# ]8 _3 H% n5 n; y: [; l5 N
BYTE nSrc = pInvSort->GetItemSrc(i);7 w" V9 N; e8 X, w; v6 @; K+ ]& H
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
4 f7 |& w% B- A if (pItemElem)) K7 R7 _1 `. L, G1 j, k
{6 l5 x4 V+ q/ D
if (IsUsingItem(pItemElem))
! K, s3 u( x, j( _( j" { {; A( ^9 u. Z N; c( E
//这个道具无法移动,跳过
5 F1 { Z3 Y* V# S4 w$ L: e continue;
% G# `+ B. j1 a }( t7 @: r+ i- ?
}else{* D# s4 u4 \- H0 }
//空位置 不用动
( J9 y M: `; @( k+ L3 ^9 m% [5 X& L* J continue;
3 l) M4 S% \& ~: ]- Y }( H# E$ v, ?1 s5 ?1 U( R
//////////////////////////////////////////////////////////////////////////* a, t4 ^* b0 I
//开始移动
" o% o) I8 L! J$ J1 q if (nSrc == nDestPos)
2 T( {0 J' b. w7 n( w {1 T2 G9 b" _5 j ^0 ~
//原地不动
) ~/ h7 J2 q3 q& t/ }' u! `" F nDestPos++;4 U0 w' h- H$ P7 [
continue;8 [# r, q* [; ?
}
+ |; x! T. Z5 r7 J1 S! W' Q- _3 a pInvSort->MoveItem(i,nDestPos);
; C1 y9 B6 y4 P1 u- D g_DPlay.SendMoveItem(0,nSrc,nDestPos);# r5 l5 P8 s+ L7 A# P
Sleep(5);: z' o# Z/ a2 Q. v+ C
//Error("移动 - %d->%d",nSrc,nDestPos);
5 \' `2 t7 K- J# k g nDestPos++;5 m3 F9 y/ L1 ]
}# E5 ]; j6 n) c( s
//取第一个元素的信息
" y' {" r: b0 t- k% \- {4 P /*
! H7 b8 T" O& u/ { if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff); U% X+ S H0 l7 X) J" h
{1 \6 R5 L ~5 n* Z' _
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);! z5 [* r5 E; C/ C5 j1 V) K
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);" M% ?9 Y/ J5 f; [. c. S5 l
}
" b% I5 T% ]* |9 Q */
) z$ p0 {" ]$ g* O& u# F' [0 R //////////////////////////////////////////////////////////////////////////
. p+ ? ?% \+ @ v; e0 M4 O* _& @% a break;
/ K3 F" ~- f6 J" Y }3 t) n0 f" p9 E; {6 p$ G4 V
} 7 T+ {+ q. s; u2 l0 W, w! M! f
}; N( d1 s, k; s7 z5 p
m_wndMenu.SetVisible(FALSE);
$ p' N" Y: |, B3 @0 ^
, `1 S8 a$ Z/ U0 _$ L" w1 r6 g( H--------------------------------------------------------------------------------------------------------3 c# ]( V; Z& Y8 u" L Q, `6 M8 ?
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
I; m0 I8 m* W: [0 G+ x* F& \+ j{% U& k( e, o# O W6 N' y% s
BaseMouseCursor();
9 t' W: J7 I2 m: \& \2 O" `; D}
6 Z$ Z1 u2 k& X( {/ K在其下添加:
4 w8 C7 u9 z1 _, l1 k) E2 C7 ovoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
: b! C2 C4 n) |+ n6 L) C{
) @0 S* ]# e1 f; A* e& ]# A. ~m_wndMenu.DeleteAllMenu();
" _3 Q7 I% ?0 { Um_wndMenu.CreateMenu(this);) {. B/ M; b8 H7 w1 q; I
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
/ @; k! M; }$ e# t# G9 W4 b$ I8 ?- c8 h$ y* E
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))6 S$ ~! L& S* |% G
{
$ ^; W" n/ [- h3 d- ]" y6 S //P以上级别才可以删除所有道具
# R! Y9 A9 ^9 [* h9 N m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");2 F2 v& a* L$ ^5 P* O
}9 J* Z9 u$ O# C% v5 B" n
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );5 D; u2 D, y# d+ \6 V5 W, t) i
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
+ B* g# ? H! R: Xm_wndMenu.SetFocus();
3 t z6 l. K7 |2 l. c( e, m}
$ C, P( k9 D9 L: ?! T/ U* ^------------------------------------------------------------------------------------------------------------
6 F' N: _/ i+ G5 \*************************
9 B+ Z K L2 r! z. I! u$ A; o( t$ ~WndField.h文件
9 U' f8 \/ X( Q a& d*************************
- ?( l, R' Z& G6 |' }, V/ S$ o搜索:BOOL m_bReport;* g" D3 U9 ?5 y5 `# R# H( S
其后添加:
3 q4 ]! E- s% A& V& H& wCWndMenu m_wndMenu;( H9 [+ g% z5 A+ k8 s n$ I
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);! w3 f5 Q3 D; q3 V
其后添加:6 \1 T% v! E0 x# K
virtual void OnRButtonUp(UINT nFlags, CPoint point);. r; J" b2 b: x- H
0 w- {5 A" T& Y
! @, B& L! p9 b# @/ @5 U3 w' G |
|