|
|
源文件中_Interface文件夹下WndField.cpp文件3 \. V8 O. |9 `( V: C6 Q4 ^0 p
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
, h6 w1 ?5 r0 d5 D0 W( r: H0 U
5 w. K+ G+ `9 [4 H, N+ ~- Z0 ]struct sItem- ~) Z" u2 Q, ?4 t ]5 `0 D2 _) {" `
{
) [& J% v+ W B: Z: i, SDWORD dwId;: `! ^; l( D# t: K# u6 j
DWORD dwKind2;
5 y6 l' f# h, k3 BDWORD dwItemId;
- X+ ]5 @% }# vBYTE nIndex;& C/ r% }; n) e1 o. Z
sItem(){
. k. W0 t$ Z. a. h, W7 k dwId = dwKind2 = dwItemId = nIndex = 0;9 k% { T! [) M$ W* j8 Z" \* N% t/ s
}0 r0 p- v+ m2 R
bool operator < (const sItem p2); {8 q/ D3 X* Z' `" H
{1 J4 K w# O6 R) q U3 ~% b
if (dwKind2 == p2.dwKind2)2 ~1 v7 ]3 R6 M% \' E+ _* V. q
{
1 e; N/ \+ v0 j& m* ^$ K6 F( _ return dwItemId < p2.dwItemId;% K6 I3 W& U0 M3 E
}else{
, D, w( E6 {; d' o2 A) i return dwKind2 < p2.dwKind2;' R1 z: t+ r: i
}
! C7 M$ h2 A0 q% A& N7 H}
* F* A# U4 K# L( u" E: T};
7 y! e. j- C$ G* hclass CInventorySort+ F# p8 A9 A& i$ S5 X2 o$ W
{
4 @0 T1 a$ g5 \4 Z# wpublic:
9 \1 f' i) M$ f, s/ v0 v ?1 _CInventorySort()
/ k6 Z2 @5 P' Z5 Y2 G{
+ F1 ~4 ]( y; P; V5 B* r- K+ g, F m_dwPos = 0;
0 A$ Z$ A+ C- ], @ v}# P5 H3 I x* g2 {0 f' [9 v& v% k
~CInventorySort(){}
7 N a+ k5 o" i1 M2 F- G9 Kprivate:; U* q2 N) ?4 R3 i+ g { U
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
% z$ K+ {) o- Q1 S4 y: r) iDWORD m_dwPos;
7 s# s1 r0 h3 E; O! M. g7 W5 a( d dpublic:$ k" j4 R/ L k) o( }4 w g6 j: x
void Add(BYTE nIndex)% n) H% U8 a* N" j
{' v x1 E' q' |
if (m_dwPos >= MAX_INVENTORY)
2 i" k9 O" {5 K# P1 R {
6 f/ M7 P. \, V: L. l) X& o return;2 S: m/ J4 M# h
}# e5 u9 o! b( H7 `) V
m_Item[m_dwPos].nIndex = nIndex;/ U1 S, Y( @2 j/ y* P
m_Item[m_dwPos].dwId = m_dwPos;
0 Z8 N- y1 A; i. _ m_dwPos++;; @$ K' j$ I+ \5 w9 t9 p
}
$ O! q+ F! W7 v9 H5 R( iBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列/ ]! B' v' X7 W/ o! V9 x3 C3 H N
{" P4 o P/ ]6 ~! `; K! H) i" \
for (int i=0;i<MAX_INVENTORY;i++)
4 M; b4 r" Q4 ?9 M {, H! y5 @0 S3 F! }+ H% B6 T
if (m_Item.dwId == dwId)
; b" @, Z8 k$ }! L0 A {9 b5 t3 n! R- g" S& t: p$ ~9 H
return m_Item.nIndex;% J, j' a3 I+ ]2 u- i
}2 g, v& i8 U t% z: H
}3 ^: r; i/ i4 F3 d3 C# @
return 255; w* J2 r; f, P) T8 a
}6 Z8 X7 a# u) q$ N) P) i1 O: Z
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
; J' G# z' {/ \# x* `# S! c{
$ X& Q' y7 s" t/ z. @( w+ y X BYTE nTmp = 0;/ S/ I6 w, m, U$ D# u4 Y
bool bDest = false,bSrc = false;
1 Q" M8 g8 B4 q/ S9 j& {% }6 U for (int i=0;i<MAX_INVENTORY;i++)
3 y( f8 C5 k/ h) b8 J5 ` {
) m" }& ~& o h+ K if (dwSrcId == m_Item.dwId)
5 m3 M9 J' E. w5 i ~8 @. K {
9 w% y& d2 D# Z$ [. `) X //id相等 则 改变对应的dest和src# E+ \" N( O! |. ^
nTmp = m_Item.nIndex;
/ |! r- D$ [! }7 q7 [ m_Item.nIndex = dest;
6 W! l) m( V h, T! ^ }8 X" I9 ]* H: d1 e( k
}
: I' O3 r& U' _) w3 t. Y //临时数据保存完毕,交换开始
* w/ T k9 ]& S) u, C, C9 \; m for (int i=0;i<MAX_INVENTORY;i++)2 O/ w7 B) J8 ^) a7 k
{6 q6 N. u6 Q( v9 O) Z
if (dest == m_Item.nIndex)
) o% L& H8 i0 \- m {2 s$ y/ R0 l* k
//id相等 则 改变对应的dest和src3 V7 N) N7 A& W
m_Item.nIndex = nTmp;
( [# E4 k: A& X }8 `1 y! L3 f; r( B3 b; f8 j+ V
}
% W0 a9 o) y, c}
, Q6 M0 ^1 L+ v8 G+ e( P, _& E};
8 o2 F6 `3 w9 } G& s; e-------------------------------------------------------------------------8 l1 Y7 ]1 K0 f4 X) C( s2 Y4 Z
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
( ^5 B1 {5 Y* j& s- g2 w' o2 a搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
& d8 K4 s" |( q. Q" h紧靠其上添加:6 i* A" f5 P. {
if( pWndBase == &m_wndMenu )
5 d5 W0 ~, @" d" L( ~( W- K' s8 ^{1 \2 z1 E1 ^" k9 A/ D, B+ T6 S
switch( nID )
/ G, b Z5 J7 x( }. {. `; e {9 j% s- Q/ Q3 _4 Z
case 2:; c* p$ G2 k5 Z" Q- Q
{
\: a# E/ m2 G- |! a; _1 k //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);/ Y5 s% D+ y9 w; L3 x" E5 ]% @8 u8 q
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
7 V$ ]2 k, ]( a. q {' ?. X( `# g9 v" w0 B
break;
0 k: s: Y* x+ g; [ }
$ |/ {, o8 w ~* H4 e, z for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)/ Z5 ~0 S f& {0 M1 W( j
{. d- P' m+ ?0 A4 E( l, s
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
, q+ [) d( i. T, K0 M* x% E if( !pItemElem ): O) U/ J8 ]) C/ X
continue;
( d( |. `9 @+ Z/ r if(pItemElem->GetExtra() > 0)
1 t/ \" i3 q* w continue;/ I! G) F5 G) S% n# N
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
4 j8 A! E9 {- {) ?0 A continue;6 l, Y$ M1 p0 O
if( g_pPlayer->IsUsing( pItemElem ) )# l, E9 O- m' W; O/ @
continue;* @9 U* }: ]; u- L/ l; d/ E% M
if( pItemElem->IsUndestructable() == TRUE )9 S- C2 {9 s' U. r, ^
{+ q7 L& G3 p+ Q
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );6 y$ n, ^# o" A \& f# H2 S# b5 p; C
continue;
3 y: d( ~3 d0 k3 { }
9 ~5 q9 n5 x- P* j( R g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
: V- Y' }* D! d7 J" Z+ E6 H- T }4 X- X$ e3 I6 g6 X$ Z
break;
; N s, @' I6 A, l! M3 t }
7 L) O; X, R+ a A, f" t* b$ R case 1:
5 {) n) Y9 P; H0 ~4 G1 h. J {
- ] v' n1 E4 t. H+ X2 r: {- q" q //整理背包) |& a' N6 ]5 i% s$ H
//////////////////////////////////////////////////////////////////////////0 W- }, U! w; E$ [& d
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
2 H; W# {/ X q/ k# u //////////////////////////////////////////////////////////////////////////
$ `* B' M7 p z- ] c! _ //////////////////////////////////////////////////////////////////////////8 a& [" z2 ~& r% ^5 k
CInventorySort* pInvSort = new CInventorySort;
! R4 S9 v" U2 ?; M vector <sItem> vItem;/ Z/ P8 s! I/ G4 G
vItem.resize(MAX_INVENTORY);//初始化大小
, L$ Y: K( u9 j8 C/ Q% L //////////////////////////////////////////////////////////////////////////- A* i- Z, ~2 ~( I
//填充数据
+ G% e! B) P, b+ U% p( s for (int i=0;i<MAX_INVENTORY;i++)
# a# ?2 Y( z/ E8 H9 J) o' W {
4 R) w% @: m4 w9 P CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);# e1 O9 B7 M I* j0 P
if (!pItemElem)' l: j! P4 U% |* I
{
# z5 N* r( e$ [9 R. v vItem.dwKind2 = 0xffffffff;' P( `5 o- l1 c( L4 ? ]; m
vItem.dwItemId = 0xffffffff;5 j6 C6 s9 D. V; X# Z
vItem.nIndex = i;
, N3 t* H/ R% d+ \$ I& u$ e }else {$ e5 L$ B1 B' {2 Q1 g
ItemProp* pProp = pItemElem->GetProp();
1 W3 C9 ?3 k1 T) G vItem.dwKind2 = pProp->dwItemKind2;7 D$ ]% Z! }7 K9 N. E
vItem.dwItemId = pItemElem->m_dwItemId;( B5 D8 q4 j( |& W% C. m, v
vItem.nIndex = i;, X, A1 y$ Q, i( G/ L
}
, p! x) ~) u7 Q$ l% K B1 I //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
2 ~% w+ n% f# F( u$ v4 D }' H8 N- b; {- q% R p5 E
//////////////////////////////////////////////////////////////////////////
) N7 n+ b0 F8 [( ]6 G1 g+ f8 U( ? sort(vItem.begin(),vItem.end());//排序) E4 g3 n: n/ Y, ]/ o* b7 J
//////////////////////////////////////////////////////////////////////////5 Z/ ^8 _! p) \
//交换% a3 L; p8 D$ \4 y
for (size_t i=0;i<vItem.size();i++)
! u: Y6 p6 ?+ p {5 B" P2 y7 O8 c) z6 C& ]
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
4 L' J' K& z, |7 F9 q8 ?: e pInvSort->Add(vItem.nIndex);
' u9 \) [& Y$ I0 ~+ ~+ }% _4 a+ n }& j- ]+ F6 S. E! G* X* U, N" a' j2 l* j
BYTE nDestPos = 0;) v: {' C/ ]4 u* R6 _
for (int i=0;i<MAX_INVENTORY;i++)
$ A/ N( E& ]( _1 P) F2 b4 [& Z {
C q0 r" b' a7 A1 }8 {- h$ V5 z CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
, s) S6 g/ m0 E; }, `# z7 d! d if (pItemElem)
2 ]7 V; Y: z, g {" F6 t- n% z g+ q K7 H) Q
if (IsUsingItem(pItemElem))
: K) l+ w" h1 i; r( {: A" ^2 V {* u' w) u% k6 J
//这个位置无法放5 p) M! c1 O1 h# ~6 z
nDestPos++;
) I3 Z, O: {+ [/ k- c4 q }8 [! C+ d" H3 W# l/ j
}
; w7 N F& S! P- j4 ~3 H BYTE nSrc = pInvSort->GetItemSrc(i);" M3 f( S3 @) N9 G; Q2 c6 N! Q
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);- H ~7 i- v. t4 F# A. s* w
if (pItemElem)$ G3 w. V/ p4 @5 B- y O3 R. O
{
4 w q3 u! X; O if (IsUsingItem(pItemElem))1 A' M: @; l- `* D( h W& j
{
& F! e. U+ a. U- i //这个道具无法移动,跳过- ^0 O! _! c( k f& X
continue;
6 M0 o6 E, O, e ~5 f% i8 k }0 S5 @ g. E: Y6 I% `1 Q9 [
}else{
, M" g) G# p4 R3 K7 c& I //空位置 不用动
) u6 d, N* m: @* i continue;2 l* W. r) l% |4 x' A
}6 N. ~, q1 `* v% `. s
//////////////////////////////////////////////////////////////////////////
+ y0 W- ]; U: ^! Z' N //开始移动+ W0 g. W. J. m: ~# F
if (nSrc == nDestPos)
7 g/ J5 r0 o% g4 T! J3 D8 C! U6 [' L {
2 S+ W$ O, b. g0 H- u //原地不动
0 q5 N5 X' I& t) m nDestPos++;
" T0 M# a: Q6 @8 A continue;* p* r' u# W7 u- x
}
4 Q$ Q* b) T: {$ p0 o pInvSort->MoveItem(i,nDestPos);
$ ^" Y% \) ~7 _( M: X) { g_DPlay.SendMoveItem(0,nSrc,nDestPos);
) @9 \8 }$ g0 {1 ~! i Sleep(5);4 {- S% p) _% n) f+ H7 Q4 |
//Error("移动 - %d->%d",nSrc,nDestPos);
0 E( I8 O) w% i( \' A6 x5 M9 B2 M4 k nDestPos++;; h# l) V& b$ }# l2 R% @6 Z q5 C
}; L, r+ m. ]* K: J2 t$ t
//取第一个元素的信息
6 [# z& w2 z* u: O8 z& p /*! W! ^2 S o/ R2 T& W8 D* v+ P! U
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff), w! F, t, Q) a: }0 F. B
{
9 i$ z9 w) S: i Error("Move - From:%d,To:%d",vItem[0].nIndex,x);' V2 h8 [. q+ V8 n- W
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);9 Q5 W; o% z, a6 ~8 u+ Z! H4 u$ ~8 ^
}
9 c8 Q1 t" ~8 j6 X */0 Q! n+ |( h m9 {
//////////////////////////////////////////////////////////////////////////
9 i' E; D2 H8 W4 d/ @! G0 @ break;
1 S+ R, j4 r- G }$ C: Q# N' x# h2 f& V
}
/ x1 |1 q C1 b3 Q}
+ p( c( M- Y! r; K& m' w8 cm_wndMenu.SetVisible(FALSE);6 J7 W4 A4 f' B5 j, v) W/ T
( V: h( S; ^* f+ [- [6 o+ {1 M/ K
--------------------------------------------------------------------------------------------------------3 H# R( H0 H$ F, p3 w) c
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)# N- I7 {. H, R
{
' q" S7 F' r+ }: j. T: x5 wBaseMouseCursor();$ q. J$ e. a* U$ [$ y
}* x, J" `% M* ^" h- }% Z
在其下添加:, e1 V. V# `" M- o" @/ {
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
7 b; v# Z9 I$ |% ]{6 H( ~* ^2 g- a( y+ ]7 V
m_wndMenu.DeleteAllMenu();1 ^4 @ ] w$ h: M8 u
m_wndMenu.CreateMenu(this);, x" O8 N A5 U
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
2 ^4 y& [) R& D. F9 ?4 Y* N l$ M K# S2 E& u8 d2 z
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))3 E7 Y9 F$ `! J( X/ N
{
4 j I& k9 J4 A9 U' v* I4 b8 f9 P6 Q //P以上级别才可以删除所有道具3 a0 w* D/ i/ z2 W1 K+ _
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
' u& c' |" ~5 i9 q- p}9 X v8 Q# y2 L$ G c/ Q( r
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
# U" u2 D5 @; P! s1 \m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );4 d1 Y! G; [9 [* p5 I& I
m_wndMenu.SetFocus();
" \% J& G" [0 @1 i( p0 g- ^}8 F" F8 D& s T# m4 }& ~# p, d. D
------------------------------------------------------------------------------------------------------------
( b, d. @+ q/ E6 B5 [*************************
1 J* P: l; r0 WWndField.h文件( ?! b2 M' O$ p9 {
*************************: j0 a' g; ?$ x* _2 m9 {
搜索:BOOL m_bReport;
+ Y& O3 i/ \+ ? x6 p其后添加:
! g# y. [3 j8 U% N" }- M; NCWndMenu m_wndMenu;
' \3 P$ b* l" K$ G7 r# Y+ F搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
' a" {# K4 o. D% l. s- F其后添加:
& \" ?7 M7 |, |) t ~virtual void OnRButtonUp(UINT nFlags, CPoint point);5 C% B F9 P% y" p- Q0 Q
! y! q( m# U+ C0 [9 x/ u( b6 a2 A4 D" e8 `
|
|