|
|
源文件中_Interface文件夹下WndField.cpp文件
/ E& N5 I" } j( u/ f搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )& B. @ ^( g5 u1 O% ]4 T. V% X
" }! R; {' t+ Z( T* ^3 g) x" b
struct sItem0 b0 M M$ K6 P, p! }+ N* n2 J
{
0 A$ E( D: Z1 S% a- X8 QDWORD dwId;! B# `. ]3 @2 Y# K5 Y) H
DWORD dwKind2;
! y" W# b# E# w3 S7 QDWORD dwItemId;
7 [, g- u) Q8 @: g; a' yBYTE nIndex;
& l8 V1 r+ C7 BsItem(){ [* M2 D) k6 ^' J' {' z
dwId = dwKind2 = dwItemId = nIndex = 0;
) d- m. A B; z* [- d}
6 g6 _3 H# i4 Q! Dbool operator < (const sItem p2)4 `; {4 [; ^+ z( j
{1 N: N* K. ]# y5 q
if (dwKind2 == p2.dwKind2)
& Q. ^+ t/ g' L {
( `4 X2 y) O2 }( s% H return dwItemId < p2.dwItemId;$ z. L/ j" a* ]' x6 F+ f& r
}else{
; S& c! k8 b- h- u return dwKind2 < p2.dwKind2;
; O. S2 _& _# J t# n) r" h }- N- w: x& `6 Y' `6 @- R0 Q3 S
}
9 } ~, i, m& E) ~0 Z; z# R};8 J, g- r' b% J" V5 t5 N
class CInventorySort4 o! K- `* V+ F: G4 L
{
& X7 J ]3 j# c) H1 C( K, |public: R( r) O9 Q7 O& j9 `
CInventorySort()7 [! u, ^. `7 E* f
{
! g% n& o* z( l3 l m_dwPos = 0;* b$ v& i; k$ h: K _* R+ J
}
1 t N$ @ A3 O, T$ ]3 I& f~CInventorySort(){}
: a9 }4 O9 F: N5 f/ Eprivate:
# ?) l, Z9 l) GsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
+ H# \* r# p4 v+ a, XDWORD m_dwPos;
0 j1 a0 e8 F& j" @2 D* a, S0 Dpublic:/ v$ q& `; k* ]& J# [" E
void Add(BYTE nIndex); }' q) w) ?0 P5 c+ r0 f3 A0 A
{% S& {% _+ r6 H5 j _/ [' E
if (m_dwPos >= MAX_INVENTORY)
+ s9 p2 @( Z$ ~( u! H7 _- g {: t9 b- Y& d, w6 g
return;7 }& J$ z. P9 f% c+ `
}; p- Q. c+ b: E; h8 {# n
m_Item[m_dwPos].nIndex = nIndex;0 a# q; d. q0 n
m_Item[m_dwPos].dwId = m_dwPos;
' ~- C3 F* s/ B) q( Z m_dwPos++;
1 J3 E W4 N/ J) D. p0 _7 ?}
$ G$ I5 H" T( h+ O" sBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列# W+ D5 _8 C! @0 z# r% c; @
{+ t- a, ?" ~- K
for (int i=0;i<MAX_INVENTORY;i++)
# i3 Q L+ ]( i4 y; D {8 ~9 G8 x( S8 ~5 E) O9 U
if (m_Item.dwId == dwId)
j! L8 h$ G# {9 {% W' T; a {
/ G+ D! K. ` _9 K$ |6 J5 F return m_Item.nIndex;
( W$ Z' K: ?+ L$ A2 | }
) g6 Z: M0 S7 [! k0 U }/ J8 P( ?2 i7 A& {/ d
return 255;
* Z3 O: I" J0 u, d}9 c7 g& k# a8 r" E- d; ^
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
7 J% t7 W9 ?! W; C( C- q{* [2 m6 w1 H6 m
BYTE nTmp = 0;) c) V" ? X. T. ^/ S- {( ?3 b
bool bDest = false,bSrc = false;
+ u" j9 o+ C T- _! F) V for (int i=0;i<MAX_INVENTORY;i++)
8 a8 h6 v% C9 S8 Y0 c; ]5 X0 [ {
5 X: A: R6 j0 n* R5 k1 H) N if (dwSrcId == m_Item.dwId)' g; s- X8 n( S5 c
{
7 B5 x/ O) k; `2 F" | //id相等 则 改变对应的dest和src* H/ J3 K; O9 s2 c2 U# ~5 K
nTmp = m_Item.nIndex;9 O, Q$ @- ]( f: p x
m_Item.nIndex = dest;( M9 @; A8 ~5 ^1 k) W! F
}8 |1 ~5 x7 `$ M
}
% }- U; ?" R, a2 H //临时数据保存完毕,交换开始
% D5 L& ` F; ~$ E1 o for (int i=0;i<MAX_INVENTORY;i++); \( V6 D. q$ f
{, s; U) b* T+ L: F( h
if (dest == m_Item.nIndex)
# G# b$ E9 _, c. G' e {* h$ t6 e1 p+ J% Z: N, h$ j
//id相等 则 改变对应的dest和src: E+ T1 f3 P4 P; @) k
m_Item.nIndex = nTmp;
4 Z9 b* m# z. a }/ ?1 N) R( P/ B: P& s$ X6 m$ e& P, [
}
Z) y8 V! j) @: o+ `}
, I7 D0 _ i* J4 A$ V/ G" ^8 g};
! K: x3 {, T$ P1 j2 q4 T-------------------------------------------------------------------------1 f, i. a5 I9 g/ I i
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )) q/ g6 i/ h; @. F& u- k4 F7 g7 ~
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);' i& c7 Z! V0 E/ M" O) |7 o0 a
紧靠其上添加:3 l. ]4 P( a' @3 S0 e5 f
if( pWndBase == &m_wndMenu )1 {; O+ J! Q- y0 v; ~2 S6 T# [5 c
{
7 k2 u0 p# l h5 m7 f switch( nID )* [+ m0 k9 p: t- C+ c5 ]' H& A
{
4 r& k$ G8 G. y8 Z8 E: C case 2:8 J; @, \3 L4 k' f6 F2 U
{( }3 z' [- G! \* W4 M `
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
w R" z% D! E% z if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
' X! a" F- ^7 `% G+ m& l5 v {6 a0 l, n/ k" a& R
break;
/ P6 f! j5 h/ L* ^* }5 e }
; f/ z" \% P: v2 Z8 [! |( L8 C for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)8 T( J. W5 v$ k# l E! J
{) K; E/ D j: N- [" ]% i3 b
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);- N6 i9 f# u0 U2 v/ ?# R" @
if( !pItemElem )! \2 c+ s5 Q1 X% T) i, o
continue;' l& S# U' l7 E& f4 W; `2 R
if(pItemElem->GetExtra() > 0)
`5 }+ g6 U! A3 u& Z2 K1 K8 A continue;
+ q+ F9 U. ]! G# \5 l if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ! i" F8 j/ p- u+ [4 q
continue;( w& F4 E) Z& f4 O+ Q
if( g_pPlayer->IsUsing( pItemElem ) )2 V1 D. W0 x; w8 O% H
continue;9 C9 K! L1 S5 {$ Q" B+ D+ Y
if( pItemElem->IsUndestructable() == TRUE )+ W* |& M+ H! R
{
) u9 v- v+ W) q+ w1 R g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );* z7 W$ |) E7 v' h) T+ Y2 {& z
continue;
' V4 ?0 }- R/ A6 V/ g t3 m/ ` }" n( Z/ R' U0 a: l. W. f! P
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);& _+ P- v7 [/ |& b7 f
}
9 q- G; z; a. T. x( @' ~ break;
6 L5 D/ Q, S2 m M: L }
7 Y, t: _$ ~" Z* F% [ case 1:6 O4 S4 Y! U& ]: ]5 h4 W$ q8 ?
{
3 \; d8 ^4 D; v+ B6 J% ^" l //整理背包 \5 s4 J' {7 [8 @) N
//////////////////////////////////////////////////////////////////////////
4 y3 ?1 ?1 e6 Z* M" V //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
( l2 j/ @/ I2 T! ` //////////////////////////////////////////////////////////////////////////! }" \! G- B5 Z$ E" n- ?* C
//////////////////////////////////////////////////////////////////////////
; R! v8 o" Z- P' |$ s CInventorySort* pInvSort = new CInventorySort;
# b( s4 R0 s( ]( Y/ u& k j vector <sItem> vItem;1 C3 v7 [& u+ Y- R
vItem.resize(MAX_INVENTORY);//初始化大小
4 Q/ r/ t0 J* [4 r, Z% ?/ G- H //////////////////////////////////////////////////////////////////////////8 a# Y, z1 J4 F
//填充数据) W! O& P1 K% m( B3 B* R( G
for (int i=0;i<MAX_INVENTORY;i++)
$ l: b1 L3 v! v {
0 b" o! W# E9 ^+ m' d# l9 R! z% Y CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);; T( U8 g$ Y3 ~4 S
if (!pItemElem). i2 }2 T$ e, J/ @" O$ A
{
5 _4 q7 J& x% T6 Y8 L( y vItem.dwKind2 = 0xffffffff;! Q3 g( N) a' K3 L
vItem.dwItemId = 0xffffffff;/ ?: l4 d! w- R4 b6 y9 ~
vItem.nIndex = i;# d7 L3 L6 a8 U+ i
}else {* u3 s5 n0 u7 y- f+ T* a" p+ B
ItemProp* pProp = pItemElem->GetProp();
3 G7 C- k; v8 c. q5 t& i vItem.dwKind2 = pProp->dwItemKind2;
/ ~0 f% G9 [1 A3 r( A vItem.dwItemId = pItemElem->m_dwItemId;
( _: Q$ f* q" F vItem.nIndex = i;
" ~4 l/ m9 x9 G" G; { }* Y; M. s6 ^( u/ E8 _3 G2 ~2 O5 S
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);- e" m; ^; W, E& F: o
}
# n* ?; i5 J0 Q0 o3 f: ~; j //////////////////////////////////////////////////////////////////////////4 W% R. l6 b( s8 P" Q/ ]/ m
sort(vItem.begin(),vItem.end());//排序
3 J' U9 t3 C7 w. I0 \# Y7 k5 N& O //////////////////////////////////////////////////////////////////////////
n3 O) e- h8 O5 l2 U) ` //交换
+ ~9 ]% \; j; H1 V, l, M0 D for (size_t i=0;i<vItem.size();i++). F9 o: ~& P& s8 T7 Q, }
{$ X6 M, q% Y P3 F: x
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);% N, s* l+ C3 H; c
pInvSort->Add(vItem.nIndex);! h+ L2 P8 @; ]
}
! V, s! g) H8 |) S: v BYTE nDestPos = 0;! r: V3 ?. ~& A2 T- G# {* {. s
for (int i=0;i<MAX_INVENTORY;i++)
1 ~/ x3 S3 a5 f- G! ]* _ {+ L1 X0 k* N9 a
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);2 s/ E% L% [, n/ I3 b: y
if (pItemElem)/ F( E6 e' R o
{- z' J: c% k$ f8 H( R
if (IsUsingItem(pItemElem))
$ p; e" e, u" w {
- F C ^% Y0 C //这个位置无法放
, B+ b4 D% p" E3 {' Q% L: S nDestPos++;
* J7 j. \! ]0 o. k7 n }
4 i) t# l7 r; F9 I h) G, l }
" g) Q" t& g" R" u5 ]% f7 v# o BYTE nSrc = pInvSort->GetItemSrc(i); ^# ~+ N7 M; `, b
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
* [, c- n: N. W+ ^5 c3 t, l. R" a if (pItemElem)
1 ?2 u( b: B/ u3 k6 I {" Q$ c! K8 P, q4 b. o4 q m
if (IsUsingItem(pItemElem))- ^6 k# F o; T
{& q/ z6 q2 o* }' Z( u- T' |5 _1 B
//这个道具无法移动,跳过- E2 j6 U Y2 k) X! B9 }
continue;. X6 ]" m! Y; H# P) i
}
4 b% W5 k% h g$ b. y }else{0 e# V. P8 C$ k% W6 E
//空位置 不用动
R( z( ^/ f6 Q1 [& e. D0 v continue;
+ m) I" D% G2 m }7 j% Z) }4 D* X' W
//////////////////////////////////////////////////////////////////////////
5 o: q! M p; J //开始移动
! |8 G+ t }4 y2 `& c if (nSrc == nDestPos)
; k3 l# i" w) B( t {( ~$ d& K9 A1 h7 r/ {
//原地不动
3 U2 ^) ~2 f% i' U nDestPos++;
5 n/ Q* s8 W, |% |* v7 \2 G" L+ p continue;4 F& T4 ? i* G
}# F! |2 l9 V4 Y4 w7 I$ Z
pInvSort->MoveItem(i,nDestPos);
* k% q; I' `: b# {4 ?, J) x w g_DPlay.SendMoveItem(0,nSrc,nDestPos);
; [1 A1 T; D+ l$ K Sleep(5);, W1 z L5 t( `4 L4 z2 M
//Error("移动 - %d->%d",nSrc,nDestPos);
2 A) b* d; ?6 P9 w4 \* I6 b nDestPos++;
: o4 C* U, t' w) x+ |* n# b- j2 P }
' a3 W+ Z- i' ^6 a //取第一个元素的信息
6 d$ F& c l: o% W6 K /*# f% ^2 ~, l8 D4 p6 v) Q3 p7 H
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
6 X( e4 z+ M) z7 H6 C6 Z1 ? {
3 d+ T5 E; m, c/ }# j Error("Move - From:%d,To:%d",vItem[0].nIndex,x);+ p! {; ]8 F& b% S: M# h7 _
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
8 `- r+ C- m' ^7 x S }
% D9 ^( E) s" h5 j' | */6 ~7 b4 W3 j# @0 r& a2 D& S
//////////////////////////////////////////////////////////////////////////' ]- |4 r! s9 m# C9 `' e2 `
break;
& J. ]/ g0 U$ y }1 b: @! R; Y! R
}
% | `* o2 i. {: O# {6 r}
" g7 y! v7 r/ N: y E" `m_wndMenu.SetVisible(FALSE);
0 v+ Q' I. h) g3 R3 T, v$ w M2 [7 Q* M' Z% \ {9 @
--------------------------------------------------------------------------------------------------------
, [/ I3 T* h$ W5 `搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)3 B) c, v3 ]2 p. E+ Q4 u! {1 X
{; }) }. E$ U) u
BaseMouseCursor();
8 x! R* o4 ^2 E! l}) E& u. W3 _# a' s$ `5 a2 w
在其下添加:
: |/ x" R( ^1 ]9 G2 K3 l4 ?. Yvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)$ z. X& L- g l$ @# H# m; }
{7 J# }, d$ `2 x' J* i2 a& j! @. _
m_wndMenu.DeleteAllMenu();
: t0 L% S! L4 f0 g/ B' z& Wm_wndMenu.CreateMenu(this);
8 Y \& v4 z' v4 Um_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
% |; ~9 |; S7 ^/ P# ] A7 M6 R b) I. Y
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 i# D, n- e! m& f/ N. M# d5 `& M{
) Q1 u2 H7 D4 G$ r( m' X //P以上级别才可以删除所有道具" A7 d0 @8 x2 K4 H* |& r
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");4 B( \7 w4 _7 q* Q" v
}
* i# X' [( b: Am_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );- C7 R! X5 y# o
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );! ?" i# \4 c' y, H- I' n
m_wndMenu.SetFocus();* T" K& f* N6 B
}
: o- e1 |0 D8 E# ^* @- \------------------------------------------------------------------------------------------------------------
" Q/ j1 J4 g4 Y( g' V*************************! }! `" ~$ n- p
WndField.h文件
4 Z- G6 O* B, `0 [" W*************************
, k, W3 J8 a- U4 z+ @搜索:BOOL m_bReport;
' Z* v- T4 |( O8 {其后添加:- c3 d. ^" Z% x
CWndMenu m_wndMenu;
2 m; A# |; c* G' {0 g搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);& q) @+ O0 y/ X2 }" W9 q6 U
其后添加:
$ Y9 j. i, Q) T: E( P8 m% t9 z; }virtual void OnRButtonUp(UINT nFlags, CPoint point);
1 m7 x+ c. `3 _2 \! O% u: u6 j2 Y N) {1 B2 d
6 H8 C7 k8 I, p& ^
|
|