|
源文件中_Interface文件夹下WndField.cpp文件, u9 r& N8 k1 e- u# [7 z
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )9 G6 U7 K2 H5 Y
# y0 B' o* {# j: `1 e: Hstruct sItem f7 {) |- {* O. \
{% h3 N* w1 R' s* D& d7 u
DWORD dwId;' M3 O: k4 A6 G+ E4 W! ~+ p
DWORD dwKind2;
% S# A% l- ^ B7 vDWORD dwItemId;* D9 X% {) U- ?6 G# ~# v
BYTE nIndex;
, E3 Y% y; Z0 A9 U: JsItem(){
% \4 U4 g# A& I6 j" J0 A' a* \; a6 V dwId = dwKind2 = dwItemId = nIndex = 0;
( c6 Q, M) y# G f. O+ {" k% C) W}
' ~' D: n1 X) Vbool operator < (const sItem p2)4 k: P. {; ~* a/ l9 p8 K2 Q
{" }- K; A7 F y- l5 X" Q
if (dwKind2 == p2.dwKind2)# S: ]6 y$ g$ @+ J
{# S( Z! G# M. Q& M, T, W& ^* D
return dwItemId < p2.dwItemId;
) S8 `1 L+ x+ R( W }else{
: k) |3 C& u( c; B$ J3 r- f return dwKind2 < p2.dwKind2;
1 `2 i) H; u$ k7 z: h- k8 N8 o e }
; s% ~2 u) R2 V! S- l6 E0 ~* G} I' K' X8 n% {. s+ G+ I' I
};
' A- r3 a# z8 ^) dclass CInventorySort# U _/ z D; n
{
! j; Q9 D- w8 A4 Qpublic:* ]: `7 ]$ O4 |2 N( S# T* Q
CInventorySort()) [ A T9 y2 i4 L% P8 d# q
{! f0 U/ P) ` H+ ?
m_dwPos = 0; r% a5 z, F7 S
}
6 z- O* t. A- B# s! D0 z/ f$ f7 y) p~CInventorySort(){}8 M8 W) O9 Y5 W" V+ p2 b
private:
+ Z: N8 |0 Q; v! I' gsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
' p/ q \+ }- u8 u8 m& kDWORD m_dwPos;
/ y5 t6 v/ [, E- cpublic:7 `7 B; C7 l7 T" @
void Add(BYTE nIndex)
) \9 g: y2 l8 |, {# H: Z{
& N: U; l5 O$ N; |1 N if (m_dwPos >= MAX_INVENTORY)% _- {$ W; H7 i) t H5 h2 D# s5 v
{8 q$ q( y2 R6 ]" p
return;
" x6 ^% R$ q v }3 O0 n. H' M7 s% f" f
m_Item[m_dwPos].nIndex = nIndex;
$ h% d, n; ?6 ]9 `* {) b4 S m_Item[m_dwPos].dwId = m_dwPos;( [ H' S: r f. d5 F
m_dwPos++;0 E* c9 h6 G# t) G [' w$ Z! f
}+ t s4 l r6 @. z p9 f# m9 f
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列' K2 G2 M- w; g: N" R" F
{0 Q! z+ J! j0 f" A4 z
for (int i=0;i<MAX_INVENTORY;i++)9 i+ D/ S, C" K) F
{
# r* N$ [6 _ R3 |, x9 a! o3 P y if (m_Item.dwId == dwId)
. j8 l5 z' G, C$ s {+ @+ S8 ?7 f* H$ U' k6 `
return m_Item.nIndex;
7 i4 d* r2 O4 h6 e }+ Y; ^/ [6 L9 B8 ^4 l
}
+ z7 @/ N4 V8 B: ]+ M return 255;
1 B5 z1 `6 |; v4 z, `' z}- @- ?& m* ]. G
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置" g1 R' F! V% g# a" d: K$ w
{2 M$ O' l M8 R% |
BYTE nTmp = 0;
7 d( @3 P/ m6 D+ I7 ?! ` bool bDest = false,bSrc = false;
2 ~* i% i- P& I for (int i=0;i<MAX_INVENTORY;i++)
7 Q) h! u3 B7 X, Z {" W! u# G3 ~* R+ `% s
if (dwSrcId == m_Item.dwId)/ T+ }2 ?& n" d8 I; r
{
/ |' n* J/ C* d& n) G) B' O //id相等 则 改变对应的dest和src
7 E6 d1 t8 [0 t: w; z nTmp = m_Item.nIndex;, B) Z. \" i% a9 u5 }
m_Item.nIndex = dest;
, ?9 u$ a4 C" F6 [ }
_2 V+ g0 u# f6 B }
: y4 l! s4 `: i3 T, { //临时数据保存完毕,交换开始, `0 L8 V1 m. L* N, G- K% a- q
for (int i=0;i<MAX_INVENTORY;i++)- A( H _( p. _$ O
{
$ t' L4 f6 L- }& q/ y( w6 o if (dest == m_Item.nIndex)1 F N0 D3 F+ ~# q' j' p+ t9 D* n
{4 g. U Q' p6 b; H- i4 G/ V
//id相等 则 改变对应的dest和src
2 ~! b6 n1 Y5 S" ~" ^ m_Item.nIndex = nTmp;) \0 o$ b" I: B8 a6 p& R. P* R
}3 F; g/ e B8 z- W; ~# o4 }
}
: m$ [ Q% A, J! n3 U}4 t8 r: O- H! ~* h$ ~+ w
};. C4 m$ E( T; z. K" ]( [
-------------------------------------------------------------------------. v6 U5 z5 u8 O5 U' f& ~# g, m
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
5 M# s0 t T0 q+ Y搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
, A/ t& ^- ~" p紧靠其上添加:
1 D4 ~- K# h! J& N& j0 nif( pWndBase == &m_wndMenu ), }- ^2 I& \ R; p' M0 p
{/ o; M% A7 n, f. h& U& {# X
switch( nID )6 H% J/ p2 O; B8 R' Y* r% h+ j
{
n8 [5 v8 N( I4 n0 y8 v& M case 2:
9 Y1 H8 }' U) v9 [% V; c {
: f0 H! M/ |$ x# q( x$ {! S //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);% G: V- U$ X! j6 I. d
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
9 t/ @# k9 O+ ^1 S2 h. r {
, F; @5 M2 a; n0 j; o% j, \% X4 P+ @ break;8 J3 z% o4 H8 U, }( C. F
}
- o+ n1 ?; @. l* [& B" [1 }6 h- x for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
7 G j) H, q7 a- U: B1 h {1 T& v; c5 X" Q+ b
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
5 ^+ y, C2 M* L% ] B! L if( !pItemElem )
5 h- v- Z! P. f' L continue;- U+ ~/ e3 ^# M0 h* R
if(pItemElem->GetExtra() > 0)
! H' r2 M+ y% Z8 ~8 i2 v! d0 _, Y continue;
' n3 O& J i# z$ W2 k4 G- u3 y if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ; l/ e- K# i9 ~
continue;
% G& R, R# |) R5 H* r if( g_pPlayer->IsUsing( pItemElem ) )
9 z C7 a+ v( f2 r( E continue;
7 q% N+ F4 Z# a# p0 P if( pItemElem->IsUndestructable() == TRUE )
2 F# U" J6 n1 K0 @" U {
( @: d; `+ [. e }3 x7 p g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) ); e" t# B8 J& p# z$ k2 F% H8 X5 r7 c
continue;
u8 s, w" `' s4 t2 A$ o. D }
( e/ A' J; M8 H1 S g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);0 \7 m1 Q1 w- { ?& L2 R
}. t! n% P Y( }: H2 w6 T
break;
. W( `6 e4 d8 w: ? }! f. ^6 l+ n! P: r, F
case 1:
- T& J0 q7 j7 O* l {
; {0 y! s5 A$ k( `1 g9 y k3 Z! M //整理背包
$ [* J/ h( I: X0 _5 L z# C //////////////////////////////////////////////////////////////////////////
- D% C2 b& r8 y* @# I- `0 F //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );$ }% R# l# x2 I# @
//////////////////////////////////////////////////////////////////////////- T- z- s' Y+ A }- _0 {
//////////////////////////////////////////////////////////////////////////6 W- Z) W( u- I1 V! E
CInventorySort* pInvSort = new CInventorySort;
; @% {: i+ W& [3 \0 J& O9 T, N$ w vector <sItem> vItem;' F' Z' u' Q7 u- f2 K1 B
vItem.resize(MAX_INVENTORY);//初始化大小
W1 t1 ~# x1 O$ j* Q4 v //////////////////////////////////////////////////////////////////////////' s4 X. S$ ^" r, d/ R n! o
//填充数据8 y2 {% Q4 M7 E. X5 f
for (int i=0;i<MAX_INVENTORY;i++)$ y _2 s& }2 [. ]8 \! E! B
{
% t, _6 N7 l9 W% z CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);, K2 M+ M- D% G% s
if (!pItemElem), f. x8 S" {8 B0 r
{1 |; @2 C7 _) V. [7 E
vItem.dwKind2 = 0xffffffff;% _' g' R" R( o1 g( N" a
vItem.dwItemId = 0xffffffff;0 j* L* f% n: o \ Q! \
vItem.nIndex = i;
; D' M! d8 a( G& q }else {3 x$ Z3 E0 f. j$ l* t
ItemProp* pProp = pItemElem->GetProp();: T2 }3 g. H" f3 ]
vItem.dwKind2 = pProp->dwItemKind2;, B1 V& l! r K+ y' E' Z/ y4 z
vItem.dwItemId = pItemElem->m_dwItemId;
& f' P9 Y3 u3 o' y vItem.nIndex = i;
) {* B0 @% ?4 ?8 I3 F) N! t! x }, W k$ j( z+ R5 E2 x9 C( C
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);$ V" \& o' d# G3 G. k" ^, f6 `. d
}% u/ ?6 p. m: X7 G! A# x
//////////////////////////////////////////////////////////////////////////
: ^1 k. b. ~9 x0 w* M4 M% Q sort(vItem.begin(),vItem.end());//排序$ k7 z# K# L; m- L @. T
//////////////////////////////////////////////////////////////////////////
q8 Z+ w$ |4 c# m0 E9 N) n //交换
$ B& }: C* F Y" ~ Z for (size_t i=0;i<vItem.size();i++)
( Z1 x+ x! U+ f8 c. r2 i0 o {" V/ D6 i2 E! j! C( D+ \8 ^3 K" Y
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
+ M; A; i3 I2 S% E( _ v, y) N pInvSort->Add(vItem.nIndex);
2 ?- i8 t( \, f& p0 k% O: [ }
* E9 b) B2 C! B; ~% x% S BYTE nDestPos = 0;
& l$ x" m0 V! @! }- @ for (int i=0;i<MAX_INVENTORY;i++)
0 {& h. }; H- R {& i, t1 E/ I( Z1 k" ~% h p
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
4 R- k9 f( `* z& W9 y if (pItemElem)9 e& u4 X8 ~! L5 v
{+ J c" J1 O) A# `) r- r* M6 A) _
if (IsUsingItem(pItemElem)): s7 V. b) b: J* F% ]2 k* s
{
( W. E, E4 e# [+ T& q //这个位置无法放 y! R% y% G3 w8 M) v+ n
nDestPos++;
! d& U0 W2 F' A( V4 K! |$ p& h }: r$ p. z* f, L0 g3 b& Q
}
* w" x' ]5 z5 l8 n" x( u BYTE nSrc = pInvSort->GetItemSrc(i);
3 B; g( Y, Q2 v+ B( F0 b; c0 {& B pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);* t6 B3 L! A1 J" B y/ d
if (pItemElem)3 x0 l9 J' b$ K ?; Z
{1 m! `1 N7 y9 h- |) v/ j) n, l
if (IsUsingItem(pItemElem)); |, d( V& l, y/ n, d" H# `
{7 T1 ^3 B, p. a8 m& C! f
//这个道具无法移动,跳过
8 l. G% V3 p1 Q/ h: [+ O7 v8 C! D t continue;
1 ]. I# o) c, i" x+ s3 }( P }
/ a* _/ j5 O4 x0 L3 I% W/ E) d }else{" g- o( y- B) g' G \0 ~# ?/ X/ k7 D# l
//空位置 不用动5 a4 U' ~6 D4 Z# R7 X- E# F
continue;& ^" m+ H1 g: Q
}
4 ^. R& {) M0 Y2 f) u+ |% H, i //////////////////////////////////////////////////////////////////////////& s/ }( }: m8 \: ]3 v
//开始移动
- D, g2 T4 z7 @1 Z5 e if (nSrc == nDestPos)# L7 R5 d6 y7 G
{1 q0 w; f- o. L" C3 ^$ Y
//原地不动
& c6 V q+ w& b3 b9 A nDestPos++;
, U) o7 z( M9 N continue;4 s& d: i1 ~0 d7 L% ?
}
' H5 t% \. d$ J; g6 L$ J1 K pInvSort->MoveItem(i,nDestPos);
. _0 w9 n" _) W; `5 e g_DPlay.SendMoveItem(0,nSrc,nDestPos);
& g5 A3 H2 s. u7 s' g Sleep(5);
7 S3 J& e& ]$ u //Error("移动 - %d->%d",nSrc,nDestPos);+ O; S. p" j+ `5 M7 _! [( \
nDestPos++;7 T7 K( x3 }$ y6 n5 @8 ?; u$ l
}
; l* m% S9 G. u& l% L' C //取第一个元素的信息
) o) d; E6 h! y3 Y& \3 E /*+ `1 |( n1 o8 u! H$ D. T! r
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
. `' G* ~+ M. Q- G; g. U1 V0 H5 v {
* {# ~" z! h. ?- w Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
* e/ ?0 b% A4 t$ s g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
! ^9 h" Q( B; v& q v3 Q }. L8 B' E, g9 Q
*/
& V* }, o8 O3 n* a$ `" h; F. U //////////////////////////////////////////////////////////////////////////, |( y4 i' R4 O- @' @; O4 B' u1 w
break;9 g* ?- w- s. r7 C$ F
} @0 `4 T9 T2 g4 i! U- J" v
} 8 q' C% M/ M3 X
}
' r0 J' T- }$ A2 `$ \1 m$ V, xm_wndMenu.SetVisible(FALSE);
" K- u" V4 A+ _: S) o8 h
3 Y# t# ?( L! p- D6 ]--------------------------------------------------------------------------------------------------------" K. m- W8 Q% R' Q, Z
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)( T2 N4 d, j0 a) B) T% R
{3 ~+ Q: y) C, t8 U: I, o
BaseMouseCursor();
- ^1 k, c+ d( S! o, B3 T+ N G}! W7 D. v* o: ]3 w% S. v) x
在其下添加:
d4 T/ T8 z( a. xvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)- V" J$ D# H, Z4 a
{
3 Q& m% T* R2 g, N* G" Am_wndMenu.DeleteAllMenu();; I5 {5 B% M' I7 ?( M7 _+ Q
m_wndMenu.CreateMenu(this);
Y: V- M' g7 F. Em_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");. [2 _2 c' g. f0 o
0 ^$ q7 h( T+ a- L. R3 [* f$ U5 @' y& }, {if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))$ G6 x: Y6 a, c, b4 Z
{' g8 D3 @5 A( ?! B, u
//P以上级别才可以删除所有道具7 o7 G7 V) n8 i3 s" k# v. K
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");4 w: n/ V# Z0 `. { ?& X1 k
}& f" `0 e+ I& H% h+ m% ]. k
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );0 b% L1 z; E0 N6 ~. Q$ E( I, r! ]
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );( I! h! f/ j. P5 o
m_wndMenu.SetFocus();6 S/ w& R# l( u! D; ~
}
) z- f: d$ } m& i4 d& u1 y. N8 f7 z------------------------------------------------------------------------------------------------------------
: ]2 X* K4 m3 c; m% o************************* m G2 w% W, @6 p7 e I# X% ]: I
WndField.h文件
* z* e/ j# W) @: ^% V*************************% V7 W1 L- R7 p! W
搜索:BOOL m_bReport;
0 q1 y ]& b2 Y0 K! T其后添加:
# j5 g1 M2 I: g$ L3 \) R7 k: ]CWndMenu m_wndMenu;4 t3 L/ H* b1 w& \9 s, E
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
8 {/ C8 |( N. g其后添加:: W M) ]$ ^3 ^0 D
virtual void OnRButtonUp(UINT nFlags, CPoint point);; @+ l6 E) M% T0 L" _7 k$ N' Y
( ~1 c A: b) p# _+ |
8 w, g1 t& j4 ~3 b, G3 I% D |
|