|
|
源文件中_Interface文件夹下WndField.cpp文件
( N0 |4 f7 o; C- m; h搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )' ~2 k+ P) n% _4 L" C5 ~8 W
- x# \* \( o( k% u6 C2 R0 P
struct sItem2 b! x2 V" d% P9 _5 U( m o
{$ L3 b* A: D: R+ N
DWORD dwId;
$ z' N7 U0 [/ x% x9 B, Q! LDWORD dwKind2;
# k/ p! v! i: ?- x) R4 ~4 ADWORD dwItemId;8 M3 z: \9 y5 `) K L7 h# q
BYTE nIndex;2 \; {' X! G/ g5 o1 ~& Z
sItem(){
$ F/ A, m/ ~- k6 E4 L# k2 G dwId = dwKind2 = dwItemId = nIndex = 0;
1 A1 u: `# {& p# K1 K& B1 B Q7 Q2 d}
+ L2 L3 Q. D8 V# ^5 Gbool operator < (const sItem p2)
% k5 J- U6 ]4 x0 L, S* d. S, o. Q8 g{
- w8 _8 w: t% n- R- p O. i; K if (dwKind2 == p2.dwKind2)+ r! B8 f+ Q7 L: O7 t: Z
{! ^) t1 P3 _( e" F' b# d; z3 k
return dwItemId < p2.dwItemId;
: _+ I2 Q6 s& C# \( o# u3 e }else{5 ]- T5 a& U3 K
return dwKind2 < p2.dwKind2;( ^. D6 j# B/ Y3 c
}
9 w. }7 `6 Z1 F2 J}4 ]8 y; e# {: g o
};' [! u5 x7 x0 H% L
class CInventorySort+ m8 l2 @& E9 y4 l5 V
{2 L; _6 L& N0 `' @
public:
! ]* V/ F. v: o+ V+ CCInventorySort()
! A! E. }" e x1 }+ I0 D# w: M5 b{
4 U' U6 d* t4 l' ]$ e m_dwPos = 0;
* O2 E' w @. H" j* S}2 R) z; V& X! ]) \% ]6 X
~CInventorySort(){}9 X: C1 Y. K- n7 s( P3 r% O' l: N
private:5 C2 A5 i' N% s
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息* ~7 o% u, p) q$ a
DWORD m_dwPos;
8 R3 `/ ^( b& l- l) H0 D Ppublic:+ g8 N+ ]* s5 Q; D
void Add(BYTE nIndex)
. T8 N) F' h; S" U7 ^{' o1 n) I" z! v: i9 N
if (m_dwPos >= MAX_INVENTORY)
2 w6 W4 r) I! ]1 Q0 i# I { t8 G9 U" N9 B& |( ?6 }
return;
! ~+ k, q, R0 o) H }; W2 E9 n' i3 @9 s- e
m_Item[m_dwPos].nIndex = nIndex;
) |: i2 c. @2 E m_Item[m_dwPos].dwId = m_dwPos;0 Z6 b; F, k& `
m_dwPos++;
' p, T3 n- f% x1 F, l}
2 E5 N# r5 v0 H/ z0 uBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
/ S$ w, L3 P3 n: P6 A{7 v/ O7 ~4 e5 C6 W
for (int i=0;i<MAX_INVENTORY;i++). Q7 w9 T9 b5 X. c
{# A; J& V! c: s L9 D2 p
if (m_Item.dwId == dwId)
% t+ w2 R1 k6 D) S9 ?* j {* X0 E. P2 q$ V* }
return m_Item.nIndex;* @& O8 G( _$ x: D9 @0 S; b
}
: c ?: P' b, F! h }
F5 P0 _0 y" h- I2 j) x) e return 255;# j' N1 n4 f/ \4 [+ x8 z$ g
}! P/ g3 O% `9 F& D( O7 v8 A4 I
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
4 V/ }& }5 x9 Y6 f% N1 ^1 m{
: {4 j- x: e/ W5 b& u! e BYTE nTmp = 0;
5 t) Q% c$ P, b4 S bool bDest = false,bSrc = false;
& H) U. m) b8 H0 }5 n0 k& e for (int i=0;i<MAX_INVENTORY;i++)
4 i3 v% G* J( C {/ e9 R, O+ G- A- m# v0 H% r! w+ E7 d
if (dwSrcId == m_Item.dwId)
3 ]# x: m) C+ S/ H/ P {
7 U* ]9 W9 i5 g3 H2 R( S //id相等 则 改变对应的dest和src) r7 s8 J7 _9 M( p0 N# P
nTmp = m_Item.nIndex;- f$ v- r7 _* t& O& m- T
m_Item.nIndex = dest;$ D4 _, c3 @* I: ?" t. ]
}2 t4 I/ P2 Q4 U1 n2 Q
}
4 @; ?& q O. q9 B: g; x1 M- ? //临时数据保存完毕,交换开始
" q" R2 s1 e( \& ?! X; [" v- k for (int i=0;i<MAX_INVENTORY;i++)
0 p+ `" D# R$ x2 ^# `# ~" C; L- O {
" D7 D/ K1 H0 N3 D) W" S C3 B! b if (dest == m_Item.nIndex)
, ~1 H" |& Y' h0 o5 s6 P. D {# p8 Y& k( T/ ^* ?: f
//id相等 则 改变对应的dest和src
( W+ }& j# F8 `. F; p m_Item.nIndex = nTmp;' F2 w7 D( R3 w! H+ K- C. l
}
, E1 Q( N6 A& A2 h! C8 {2 i# ~ }
1 ^7 x0 d3 f6 Q$ G! c; D}
/ \: n) Y* [$ @: T+ H};! K0 `" A- `, C" R% N
-------------------------------------------------------------------------3 U# z1 v/ g6 G" f
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )' O) s* a, D5 G( K
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);* n+ y0 C/ @; b: R
紧靠其上添加:* A) w( |8 ^# Z, L
if( pWndBase == &m_wndMenu )& S s* Y( k4 |, {# e
{. J9 B- W2 D* L+ _( m
switch( nID )6 d: ~2 s% R1 k5 T
{
$ s" T1 t1 V) i/ Y! D2 A2 H case 2:" A9 p+ F8 s2 V- D! r% `% t+ E
{
' @3 o7 ]8 F/ Y //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);6 q$ R R( C* _* @. X! h$ x
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
, m5 L" |4 y# v* g; c& q5 e {" W; } G- i# r0 M4 w1 s8 {, Q% g* z
break;
+ \5 o7 T5 p" ^0 e) d1 e% \* { }
- T- P( a# f: F/ l5 I for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
$ Q- I$ M$ T: i( k5 B I; J {; h: ?+ k& g4 ]0 x, @& b
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);/ M$ W4 K3 ?% b/ o3 t% Z5 m
if( !pItemElem )
* |9 h9 t( M2 p, A; L) I# u2 ^+ U continue;* X8 Z& R/ X) K% }
if(pItemElem->GetExtra() > 0)
4 n0 {0 J" L. c8 _2 Y x continue;
4 z- m, L- Y) R if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
. G% O" V6 v; i+ | i continue;- H: ?4 g, G8 I" a
if( g_pPlayer->IsUsing( pItemElem ) ): I7 H* B- G6 `4 T+ e: q
continue;$ t1 j% J8 o2 W1 {! y( Q
if( pItemElem->IsUndestructable() == TRUE )2 a) W7 ^+ s8 n6 o
{
; f3 R( l- h# `! Y ]) u0 m g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
; W. r+ {6 G. f- _0 [ continue;
: @$ |* F+ m% { }
, F o( l7 W* o5 q' K6 Q2 G! E4 ] g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);1 ]$ @9 o0 D7 S- {. I& z+ h
}
1 Y0 u- a! g# B# i break;' C- h/ J1 ~8 B9 b! p" T7 q6 o- X
}6 }! {: j: K4 n1 u/ \! u
case 1:
, F* A( i7 R5 Q& A {
8 B2 L x6 t+ s1 m0 Y& a //整理背包" N. Q1 i- B# I L
//////////////////////////////////////////////////////////////////////////
* q( j- M. n0 M7 A //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
, k+ O4 d- {, o, s; @# o' H$ H //////////////////////////////////////////////////////////////////////////
2 a/ a3 z% d0 O. ^; {9 {$ e( l //////////////////////////////////////////////////////////////////////////
; ~2 Z: N8 f4 b$ |& H% O" O9 G CInventorySort* pInvSort = new CInventorySort;' M1 O4 l+ r- s# _' k+ j
vector <sItem> vItem;
0 l6 w! e- N( y/ n+ ^# K" | vItem.resize(MAX_INVENTORY);//初始化大小3 l5 L6 O/ u& }3 h
//////////////////////////////////////////////////////////////////////////
8 c: ?& K" B' f1 U0 x //填充数据
7 P6 u# F2 P. Z N5 Z for (int i=0;i<MAX_INVENTORY;i++)2 y8 ?8 b6 h# O" h: w5 b
{
9 Y5 B1 `+ H, g CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);0 s' J) L8 n, k' d0 ]( q
if (!pItemElem)
( s" c2 B' Z( M {1 J# ~, I5 d M8 [) E
vItem.dwKind2 = 0xffffffff;
1 H# i8 a7 V) I+ L: U/ C vItem.dwItemId = 0xffffffff;
( _5 w! }1 H' t- H5 k vItem.nIndex = i;
7 N0 I' _& M9 b \1 t/ q% w2 P ` }else {
5 i: h: n1 W, m4 w+ K, D4 p ItemProp* pProp = pItemElem->GetProp();
! {) i/ f1 z7 E4 N( g7 n% u" r/ X vItem.dwKind2 = pProp->dwItemKind2;5 h0 y8 o) m0 l8 \. o$ Q
vItem.dwItemId = pItemElem->m_dwItemId;
! s1 L- ?( b( N# x u# ` vItem.nIndex = i;
& x& L8 f! C1 k0 o5 K }9 ? s! B4 E, \+ V+ ]( g
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);9 I- B" O9 x1 l \
}1 A& A: k, s8 r. V' C! r
//////////////////////////////////////////////////////////////////////////
y& e( c2 c. u sort(vItem.begin(),vItem.end());//排序
2 I E3 P9 g+ [1 K //////////////////////////////////////////////////////////////////////////
0 @( u* E5 S, W6 L* f //交换
( }0 H' L' E! @+ X, M# a. b for (size_t i=0;i<vItem.size();i++)# ]3 S4 k2 C* x( f% @7 |; Q: Y' u m
{
1 L4 @5 y" G6 |. U2 l //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);5 X+ V b a4 v. p0 y5 i9 L- _- {# T' A
pInvSort->Add(vItem.nIndex);
/ j; s' p# y9 Z& m }* X- Q! P1 G' b
BYTE nDestPos = 0;
9 k. {3 p* B) B* Q- i4 V: W for (int i=0;i<MAX_INVENTORY;i++)
9 F% W9 R6 I R ^ {" v3 I' {! ]* g# s3 a6 c5 Q
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
- X5 ], i% m; B) q$ P t if (pItemElem)3 ?% d, p1 i* c
{+ j8 x' z! x+ N' z% z9 q
if (IsUsingItem(pItemElem))" L+ D& h) ~& t1 O
{) z. J# P9 p% m: v: | Q) ]* S
//这个位置无法放
, C# u/ c, u( D% x nDestPos++;
& G' L( K( ^' h( m }
/ \: [. k# A: Y+ r1 F }, o4 v. C9 k" O5 o) P
BYTE nSrc = pInvSort->GetItemSrc(i); l8 Z: u# R" V1 B6 F$ ]9 c
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);% n) o3 @! d, B' E K! r
if (pItemElem)0 s" S0 S1 g2 p! l
{
1 U7 x$ Q9 `) p Z# m* S$ P if (IsUsingItem(pItemElem))) H$ E7 y3 D( f
{/ `# y. o! p/ A) z T& L3 I
//这个道具无法移动,跳过% e, k0 [& |3 g8 }% _, p) W, H
continue;
" F* g% ~+ }1 \& {5 ~- i* w3 {4 i }
4 R8 g a- z/ J; `* e }else{
( Y: Z( U- r$ D9 _ //空位置 不用动- E$ C% q& Q6 q6 _# j0 d5 b
continue;
[/ _- x7 _$ K" s }& m/ w) A" }& }7 n% ], a a" y
//////////////////////////////////////////////////////////////////////////
2 _6 p+ }$ A4 h //开始移动
1 U2 r/ [0 V6 U7 s' c! N if (nSrc == nDestPos)$ o, ?& o9 p4 q/ ^
{( @7 \3 Y! ~" s
//原地不动; t- Z) e% g8 n" m5 _2 U9 ], r
nDestPos++;
( u8 v: ]0 s5 j8 T continue;# g# @5 l9 [. ]* o- s# B
}9 t/ n/ v6 ~1 V& E8 v2 W1 l
pInvSort->MoveItem(i,nDestPos);* y: P3 F& }5 O- V2 d- K) m4 B
g_DPlay.SendMoveItem(0,nSrc,nDestPos);: b! y1 V9 @% ]
Sleep(5);9 A7 L* z& `$ F+ d
//Error("移动 - %d->%d",nSrc,nDestPos);( p' b3 z1 A! G/ G9 s
nDestPos++; D5 z! x# f8 s. d1 Z3 [' A/ ]
}% i& v' b7 ^# M2 f
//取第一个元素的信息
0 D( n- ?/ C. |# U# ~+ I /*
8 ^% ~5 J3 C, f/ Z: _$ ^5 w* F) ?( x if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
' k! |6 }# e! [/ q7 s# m! c. s; _ {7 G/ ]* v+ }9 p5 l- ]1 d1 n& q" i
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);( [; `. ~% d8 h0 B- p/ P
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);% A" ]7 ?; }2 j# W
}
' X" |1 v% t: p8 v! u( `, K* g */
/ @4 f6 f) H$ r" t$ D/ x, Y i //////////////////////////////////////////////////////////////////////////
' I" E9 v1 i8 D/ W+ n" S break;
: U+ b6 ]2 `* T# [ }/ k6 t! m+ Y) c! {+ f
} + f4 x, M/ P6 D
}3 s4 ~8 E `! h
m_wndMenu.SetVisible(FALSE);! J) `5 p. }2 E( K, ]: R6 L2 j; `
5 M: ?/ |1 P4 ]0 o# ]# U
--------------------------------------------------------------------------------------------------------
% W6 [ _5 j* y0 R搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)2 M$ S4 d! o$ z
{; [8 K. B* B" [; G
BaseMouseCursor();
' d8 f+ c( Z( n+ W5 W4 j}
' G" Z* L, |2 s) `" j在其下添加:
4 o9 a- i' a/ i8 ^0 ^ Q1 g3 Hvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
* N! N5 L5 t' h4 c' n{
0 ?" S3 x1 _ N `' G2 Mm_wndMenu.DeleteAllMenu();# p, J R1 |" d T8 f
m_wndMenu.CreateMenu(this);
* |( Z. q, Q; Q# w1 L& i/ nm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");: V1 V/ Z' H- L) I0 S
1 `2 E% ?4 D5 H3 xif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))+ H- e. ?. F; e' ^) q
{8 g2 o4 M% e8 ]4 U, k- A
//P以上级别才可以删除所有道具
0 \& B) I/ I$ G; j5 D3 H) f m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
. J' |0 Y& E) U- P# ]+ f m}
% u" M! S# _1 l9 I k; x. R+ Sm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
, u$ u( p( E0 ~/ Xm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
9 [2 [4 G) y. v om_wndMenu.SetFocus();
8 z5 m, U. A1 T L" B+ G& ]* v3 u}
: M j( e' e/ s0 O" l------------------------------------------------------------------------------------------------------------& U/ E/ k& P( X3 x
*************************
* @, T9 m7 q9 f, SWndField.h文件
8 k4 [0 b; _( ~; x$ p! O*************************8 J* j% v. x1 e* T0 o+ Y% t3 d6 w
搜索:BOOL m_bReport;5 t- B6 T; n/ v) B$ A
其后添加:; p' m) W- P L! s t3 ?
CWndMenu m_wndMenu;9 N9 g2 h; K: r2 }
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
! b; m# E( F0 t) L- X* t/ G) r其后添加:+ v$ p& D" ?* _1 v6 ^
virtual void OnRButtonUp(UINT nFlags, CPoint point);: b) a$ t! X0 p0 _% F" F. t% r
2 |6 ~4 j$ ~5 G4 N6 z, }
8 x1 l2 g5 q% l- V% l% F2 A. u' C |
|