|
|
源文件中_Interface文件夹下WndField.cpp文件2 @6 G! l8 |5 h( [
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
+ a; n9 B5 d; n1 W* X, p. _2 j$ ^4 K6 I
7 R, U7 w7 B- P; I: Ostruct sItem
; `' r2 m( L9 f3 r' d5 G{$ J0 Z$ u+ n: o1 v' j+ Z* O2 l4 W
DWORD dwId;
; [4 a; j/ B! \& c: T) K! g8 s; ~+ VDWORD dwKind2;
" U c4 k) u, QDWORD dwItemId;
) `$ V, `3 k2 a5 n8 b( V. T+ GBYTE nIndex;
8 Y4 W8 E% |' y! @9 `1 j( T/ psItem(){0 v: ^# f: q- H8 {# N
dwId = dwKind2 = dwItemId = nIndex = 0;
1 c2 ]. j8 s/ B/ a8 b}6 o ? Q% A3 w! \
bool operator < (const sItem p2)
! H6 Q0 `" I; r/ C. L' q/ J{
2 Q. l5 X! h& F/ k% S) h if (dwKind2 == p2.dwKind2)0 q% W& J3 Z' Z( l; h$ B9 A% |
{! q+ R& W/ K @. v/ L
return dwItemId < p2.dwItemId;
7 T" b8 X9 _' q& U1 h0 L }else{
9 T$ f4 L4 b) g$ m; @: c9 \ return dwKind2 < p2.dwKind2;
9 h5 }* Z8 W8 S! i }2 p8 N- [+ S+ T- M4 c
}( X+ l I: k, Y4 d# T
};1 {% B' }- r$ U! W! i# J
class CInventorySort
# K" @+ ^( H+ N$ @, P& t1 L{! C( b6 @7 J0 r9 \6 {+ _
public:. d* _; D- T. G- C/ g
CInventorySort()
/ j* B, i$ q) u- g/ _4 M% U{
4 d Y8 Q# S6 `9 D: d m_dwPos = 0;4 x' S; |* _3 F* `
}
g. X9 Q& q Y% X~CInventorySort(){}2 _3 {. F: {; _# x. ~; K
private:
* Q6 a) H" y/ _; msItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
+ o7 f0 p. O6 q7 m) @4 Z' BDWORD m_dwPos;& {9 B' |- h4 x9 \% Q! H
public:' B4 E" _! c3 _& s# P7 W) a6 ?
void Add(BYTE nIndex)- D9 i" r! v. Z. f+ g T
{
2 Y) E3 U8 ^" Q: k if (m_dwPos >= MAX_INVENTORY)
! o( Y: Y8 Q; b X {% o/ \/ \; Q; Y( f$ |; A) {2 D
return;
$ q7 J* x9 X$ l3 X) H9 [ }
& z9 ^6 s2 Q% v; }& F m_Item[m_dwPos].nIndex = nIndex;
& Y2 C% E. N5 [: J$ V( y% f m_Item[m_dwPos].dwId = m_dwPos; z8 f- j" F! t! i1 j7 {4 R
m_dwPos++;
$ Z b8 R) o0 ?9 t" D0 o- D}
9 M& t/ H3 O5 X3 p% u" vBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列! D$ N" l) o4 F; U
{/ e$ @& w' A4 f; x3 A
for (int i=0;i<MAX_INVENTORY;i++): A8 N) p: j \6 K4 J0 d
{4 Z4 m0 w9 c8 K, L( Q" s
if (m_Item.dwId == dwId)
6 Y. k& S" N7 M$ u) c: H% z# d# { { [ Q( T1 w F
return m_Item.nIndex;
. j2 x' r- G8 r# T2 q }- O! q5 O: z: X: A+ Z
}
. H( R6 J# M0 Z8 p return 255;7 X/ C9 H% r) g0 m
}
" ]: G! P: D F7 k! ?5 Y" X" f5 Tvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置9 w, Z$ x' b1 U8 v
{2 J0 r9 v" i! _( h Q. h
BYTE nTmp = 0;, y# j4 l3 a* z* b6 ]2 }2 C* w9 k
bool bDest = false,bSrc = false;: U( f1 M. Y6 t z
for (int i=0;i<MAX_INVENTORY;i++)
9 {6 R3 n9 ~% J4 { {
: }$ w* {! S! U7 n c3 g$ Q if (dwSrcId == m_Item.dwId)9 B* l; d6 e) r
{, i5 L, w6 c8 C5 X9 b. h
//id相等 则 改变对应的dest和src
: A: K6 K. l: j7 j% Q nTmp = m_Item.nIndex;: U4 r) e& S2 K: _, p3 D
m_Item.nIndex = dest;
+ c! j! k/ o x# { }
( n3 `, c1 v# y1 u6 }: V0 D }6 f5 a' }4 H/ y0 V
//临时数据保存完毕,交换开始5 o1 ?- V- x1 R% s
for (int i=0;i<MAX_INVENTORY;i++)$ U, F+ E. b( G% _
{9 O9 G! s9 [' [
if (dest == m_Item.nIndex)
- w w& X3 P' u* K- ]! y {
$ H6 T) K' C3 X //id相等 则 改变对应的dest和src
- q. Z4 R$ ]2 g0 H m_Item.nIndex = nTmp;
; R& l, ~4 A1 V, n2 n }
# I& V3 \/ i+ \: d+ l }
8 k! A8 w2 s5 B* n, i5 Q}" S7 ?. r. g! A8 \3 M( X
};
" {* Q# S9 \" s9 _* M1 F. s-------------------------------------------------------------------------* U# y i5 f. N2 k
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )( ~, k7 B E8 U) }- } @3 G0 G
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
' a U5 F G* n紧靠其上添加:5 J3 J" w6 c# j
if( pWndBase == &m_wndMenu )
$ ~* E! f/ m& U{" c! B' b1 u# s
switch( nID )8 Z* {7 ]/ I9 B9 G4 T# Y- M3 G6 _
{ ]. O# \2 ~( Z
case 2:3 H& P1 \* o* H5 G7 I; ]. ?
{
/ d) Y2 S! C/ `; c) O: k //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);! b" B$ X$ i* z
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
/ o- l* W9 u# |( S {( w0 O6 j* E+ A4 M7 z9 e8 t$ q7 c
break;
6 Q- h: s+ M# x6 N6 Q }
7 T' K! b# y$ ~8 p for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
% n3 T; O3 B% M% M {
j0 z' F8 z' R( u6 {: }) x2 V CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
$ n! r) W9 x. Z0 Y: Y! O/ s if( !pItemElem )
1 C4 o) J1 O# a5 g/ m M' D' w0 Z continue;2 U6 R6 {1 w& L8 M8 q
if(pItemElem->GetExtra() > 0)# x3 c' ]: x7 e( n
continue;8 h5 | Q7 u8 Q% E8 l# L/ x
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
% `, s" e/ T& `; s$ D) r continue;# X! y' J% K1 t
if( g_pPlayer->IsUsing( pItemElem ) ) t0 M. c- M ^2 F( u. S2 M
continue;, Q8 s5 O* M, m; e! R( Z
if( pItemElem->IsUndestructable() == TRUE ); K6 |0 c9 K/ `' ~
{
6 ~7 W4 o h$ P! ^ g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
" x" I$ Y& r- @7 H% D3 U0 G9 S9 l continue;2 {5 j9 @( F: m' H4 c1 f
}! \8 M! {. _7 j8 h0 n- F( n9 n
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
7 `8 k+ W+ P6 @% o }5 ?2 S$ ~* O0 C6 A+ R2 Y
break;6 |0 z9 Y, m& Y
}3 t! e! K. `& |* Q
case 1:
0 j3 j$ Z8 f! g/ v' u {+ J+ {' Q I, ^: k+ {5 E
//整理背包
/ r* O% i8 l! w4 v+ g8 E# ?7 q //////////////////////////////////////////////////////////////////////////, }/ L# j2 L/ G3 ]. j7 c0 S
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
& h3 y5 ^: H# J( y, N: j ////////////////////////////////////////////////////////////////////////// v% p- R, F* C* w
//////////////////////////////////////////////////////////////////////////
/ S- D1 \6 k1 v4 l CInventorySort* pInvSort = new CInventorySort;4 S" J. R1 m2 Y3 s1 L" a' B
vector <sItem> vItem;
. y5 E+ \2 C! C( u, F4 r ` vItem.resize(MAX_INVENTORY);//初始化大小
# m8 @2 h" N% e8 U //////////////////////////////////////////////////////////////////////////7 x: ?' h6 I! a! H+ e* A, d8 Q# y
//填充数据
) Z" K) G' s# D4 { for (int i=0;i<MAX_INVENTORY;i++): D0 @; e+ H4 ^1 D% ~# z
{9 O& W# X% G* ]' @; L, v
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
+ L' }$ d' k8 v1 k: l2 b if (!pItemElem)# w }% K3 l( q$ D
{
" V f Q: E( o7 d vItem.dwKind2 = 0xffffffff;
3 U% D1 w% l" o. L+ a% z vItem.dwItemId = 0xffffffff;! E- t* R X' U/ P5 P' n) T8 W
vItem.nIndex = i;/ K) f9 q) N7 F! u+ X
}else {
4 s/ {2 |; Z6 b2 D9 x ItemProp* pProp = pItemElem->GetProp();
8 {- D' O3 S5 h# Z( g vItem.dwKind2 = pProp->dwItemKind2;, j% ~9 o4 g' }- ?+ P9 u
vItem.dwItemId = pItemElem->m_dwItemId;
. r% ^: D# e7 D/ f. \ vItem.nIndex = i;: T+ O2 K" ^0 K
}
8 r4 `4 p: P* t+ Q1 G //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);' Q b4 ~0 q# c, |- r+ A4 F
}
4 h3 H9 k4 T5 M! n2 h3 t //////////////////////////////////////////////////////////////////////////: L5 }7 S- j$ h0 c8 g; \9 H, R
sort(vItem.begin(),vItem.end());//排序
$ k8 J4 W1 R7 O0 W+ c6 J) Y6 e) W //////////////////////////////////////////////////////////////////////////
& k; J% T* ^* |. U; X3 A //交换; U7 A/ W3 s' Y- R& o
for (size_t i=0;i<vItem.size();i++)
8 j9 [9 y8 @: R& W7 s4 B y {
0 n0 o r4 e4 x9 d //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);9 ~4 \, b% e8 r% F/ f
pInvSort->Add(vItem.nIndex);
+ a; y5 X, T8 Q* ?7 F( k } o! f% v. ?4 k3 S4 x0 M. F
BYTE nDestPos = 0;2 f: c# O [, N2 a9 p2 y2 \ s
for (int i=0;i<MAX_INVENTORY;i++)
) K3 d& `& c3 X; ^; B @# Z {" v! D- F1 F! @; }9 j
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
8 [" c3 ]6 e8 {# u# v- v- b# U if (pItemElem)
+ H4 l% G3 { O/ ^" R6 Z7 M$ _ {
# F6 R, f- I' k R \' B8 Q if (IsUsingItem(pItemElem))# p! i( S5 q5 i5 i( v* y e0 v
{
# z- l4 f m$ Y y //这个位置无法放7 g7 w: H$ f8 Q8 Y% T- c- k
nDestPos++;
' P/ y6 U9 Y" O' S' ^0 W }; a7 ?4 p- ]1 {7 \1 S6 K
}
i5 _# n1 O9 M5 Z BYTE nSrc = pInvSort->GetItemSrc(i);9 _- b) I1 b9 h, [) d& r
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);: T2 n2 _& ~$ F% n0 ?9 H5 M
if (pItemElem)6 Y0 I$ |3 o& F! T6 }7 Q- b
{
$ d- k" n- |! R5 X5 w, I" @0 e if (IsUsingItem(pItemElem))
5 S7 t0 s) z& y, b/ @ {
, @, Z" Q: D. E/ [, |( q$ _7 v' k //这个道具无法移动,跳过
7 d' p5 v2 ~" I" }! k5 F# e continue;
) A8 m% [! |, Z0 m0 X4 O }& f5 T4 h$ K2 J( i
}else{+ }4 j2 Y! |( ]6 ^
//空位置 不用动
6 |2 f8 @! B( Z5 F; X# H continue;$ `" j' E, k$ G& d/ z
}
0 y3 S [( }. z0 H //////////////////////////////////////////////////////////////////////////
, W( }" c% v$ \; q, j! l //开始移动
! u* K$ ]" u8 f7 S/ L* s4 h4 } if (nSrc == nDestPos)! f3 ^3 `/ Q0 ~7 d- H
{
: L C8 D) O' W, m% I //原地不动# {3 _! }+ r7 e
nDestPos++;
1 ]1 [, F1 M: e, S0 |6 p- K1 h continue;( d# Z9 [* V5 L
}, l8 F* n! |& Z7 P
pInvSort->MoveItem(i,nDestPos);
% ^ _! v1 E6 A- ]& R* E& ] g_DPlay.SendMoveItem(0,nSrc,nDestPos);
+ B+ A) J8 N5 p) I2 k) l Sleep(5);* u; y2 y( d# p) k+ @
//Error("移动 - %d->%d",nSrc,nDestPos);& l7 Q* }6 |; A
nDestPos++;6 h9 ~7 k p3 x
}
5 a+ t) |6 I6 J //取第一个元素的信息- H" v" m7 s9 w9 I" r$ Z: Z. R
/*
0 _$ `- r' u: P if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
: K8 h3 K( ?& Q' e {
. X( y( B# S5 C" L3 Q, y Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
) B8 N+ z/ I8 ]- w/ ^ g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);% R2 N# }4 `7 h+ E4 k% r0 g9 C- Y
}4 d1 ~+ N& L: @$ W9 i, S4 P
*// ]" C* T6 T) h9 }
//////////////////////////////////////////////////////////////////////////% L; n% l) v& j {& k$ V* e! Y
break;
9 T! B7 J; R9 m" z, ^ }
, G1 L3 m" [3 T" W' y } - E. H1 T" ^% P# N- Q( N* @/ d, X
}
$ T( j$ G$ Y" [m_wndMenu.SetVisible(FALSE);
' Z8 j. W V$ \; A6 ?$ ~4 M& R% d
--------------------------------------------------------------------------------------------------------
+ j# y# P7 r% G) R1 B搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point): i7 B4 M: H X8 F
{
x1 i+ t; S& A) ^1 t- a& x6 u ZBaseMouseCursor();& g2 p; C: B5 K+ n
}( ^1 \. [9 x7 w% m6 d2 L* X5 L
在其下添加:
, P4 P! Q n: D% q# J( Gvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point): l. o$ K0 o0 ^0 ?8 F
{
7 P3 C/ {+ H* Fm_wndMenu.DeleteAllMenu();/ F8 _- G& v! F F* F% D o! Y
m_wndMenu.CreateMenu(this);% m2 @& e, y" `* s
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");/ L1 p7 C" L, ~, m" u7 G
* M7 ?" B5 {- kif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
" k, U: l/ q1 t8 T{" G- d% {9 P" _/ B
//P以上级别才可以删除所有道具2 H8 ^- s# I) ~7 Q# U1 w7 e$ C
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
9 N% I1 R& Z! S7 o' `}
$ D4 |& g2 n% p( f0 a$ Im_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
( c0 W8 U% d( P# ?" h/ zm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
1 z* G" q% d, h. v8 i7 {) z" cm_wndMenu.SetFocus();
. M E |0 g3 B; r2 d. p}
* e6 e4 m) } s0 `+ ^7 [' Y------------------------------------------------------------------------------------------------------------# e' \3 \# W9 U
*************************
+ C, L# M& E/ T$ G8 X5 MWndField.h文件" H4 k. h D; \, {) I1 _% c2 h6 T
*************************& o/ E5 v' [$ u' { E0 w
搜索:BOOL m_bReport;7 }+ w8 g0 p' R, I) p
其后添加:
6 h: y/ H: J, ?3 |CWndMenu m_wndMenu;
- {5 ~# o4 C. n# B" s. l搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
$ k# w7 m& S& r0 Q1 [' C其后添加:
! \8 K; C. p9 j- o8 rvirtual void OnRButtonUp(UINT nFlags, CPoint point);
6 g/ D$ A0 e: A& N; r- E$ J% U& `; v' `4 U0 {# A7 Q/ _
8 H/ b, B& M( x/ m, @! B6 G, h
|
|