|
|
源文件中_Interface文件夹下WndField.cpp文件- N. D, m& X+ Z" Z/ u; n% K
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
4 H7 e, A5 J0 S' d" |
3 U! R5 o; k8 @7 [ Y* G" Ystruct sItem, d* Q; m% T$ a# m) B
{6 t1 F( ^& [. X8 W5 S
DWORD dwId;" h i3 l" @/ K+ G! h
DWORD dwKind2;
; I7 Q. _& K2 D) j5 S" ZDWORD dwItemId;
: D1 g" n! X: G# ~. }BYTE nIndex;2 ?$ ?2 ^ C: K4 `8 B' j+ _/ Y7 x: ^
sItem(){
7 V; R1 g" C: n dwId = dwKind2 = dwItemId = nIndex = 0;
% K$ \$ K% y" |4 s$ T0 A- Q}
6 W4 O+ w* y* ~3 E7 Qbool operator < (const sItem p2)) a E" S# z t
{
8 `" J( t8 N% Y- I6 _4 @8 n6 o) }' m if (dwKind2 == p2.dwKind2)
M5 c' |, i! X4 e0 d {
8 }+ x1 }8 E7 t v9 r, t# b; p5 k return dwItemId < p2.dwItemId;4 O/ ]9 Y4 A; Q, P# c4 _% A
}else{
1 G6 {4 x6 _" t* T! T9 ?- H return dwKind2 < p2.dwKind2;
* h9 y2 }) f7 q1 z, q- R$ @; F5 c }3 ~: X1 Y; b/ Z, y6 C
}
5 P! F1 X2 N- {) j};
& K& t1 n$ \ r' \class CInventorySort
1 z9 l5 U( k/ N( T, p- J{
6 \( L& o2 F s" w$ z5 S5 N- { Hpublic:, N+ C" K. L7 c8 F- `6 m( T
CInventorySort()5 H9 ]# B& n3 G0 A5 [5 s( U
{
) X4 `. d% v, ]& T. k m_dwPos = 0;1 V7 }& s$ s! v$ ?
}
4 `9 c2 g) f) b2 T7 t D) l~CInventorySort(){}
+ E" I5 z. r L/ ?: O! l) Pprivate:: O& W& p- u9 U, g
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
4 R* z/ \* `; b% W( R( xDWORD m_dwPos;
; ]4 j7 p, K/ _% t/ a5 Wpublic: Z& a1 \0 Q2 `
void Add(BYTE nIndex)+ \/ O' P% A, |
{
$ |( [) O4 }) L9 z* W if (m_dwPos >= MAX_INVENTORY)
) C' h( Z& `0 @4 U {
* m$ x1 k2 g( c5 n) D8 H" ^ return;
7 k$ E _ @- w$ R; j }
- S2 w# T0 T! E7 R' { m_Item[m_dwPos].nIndex = nIndex;7 ]7 q- j2 Q4 A, H
m_Item[m_dwPos].dwId = m_dwPos;
2 F% q s* K4 q1 h m_dwPos++;" C, y' m* x! O5 g, v
}
8 G/ z8 e6 Q0 f9 [BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列" Z! E! R- Q0 Y+ {/ ^
{
* ^7 Q% R( ?6 F% W4 I) W7 B2 F3 q for (int i=0;i<MAX_INVENTORY;i++)
4 Z- ]8 S; m% S A {/ R6 i! c9 J' W7 z6 @
if (m_Item.dwId == dwId)
" r5 [7 |. N2 R D {
5 f, h1 S% B, C$ M2 p/ n5 C: G return m_Item.nIndex;
4 f7 e }% ^; Z. R$ e7 V }+ }$ P2 U/ L' X# n
}
/ l4 j2 t* p6 S, E! g2 T9 T& X1 I/ o2 d# ` return 255;( b, g/ U! c! B0 b
}4 \$ _/ b3 e1 i2 S, x
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置% {2 A& j1 x* g2 @; u' ~) _/ g) @
{, m2 @% I: [, K
BYTE nTmp = 0;
( [) O3 @3 \5 P% _8 ^1 ] bool bDest = false,bSrc = false;
. D! F [( O& C+ z7 h- H for (int i=0;i<MAX_INVENTORY;i++)
, R8 F' Z* S/ X' q3 c k" ] {
& ?/ J6 N" f( U% V if (dwSrcId == m_Item.dwId)# `* O6 } z9 ` o
{
2 }) d5 B- s2 S- V1 D+ m1 w6 y" u //id相等 则 改变对应的dest和src
. J$ L6 b: `+ q% _ nTmp = m_Item.nIndex;
1 w$ H6 e+ T6 v$ ?" D% z m_Item.nIndex = dest;) A' P4 I6 c3 S( u1 q: T
}( g! i; W3 T% a a2 x
} ?% U, m; ?, F$ {; {3 q6 V: ^
//临时数据保存完毕,交换开始
$ n/ H {$ B% |4 i q2 | for (int i=0;i<MAX_INVENTORY;i++)
0 G5 }+ ] l% B. J8 U0 G7 L {% [* W0 M5 I! n( Q( I; c7 g4 y
if (dest == m_Item.nIndex)" r& X0 T3 G& _* Z$ x- J! b$ y4 j
{
+ I/ \' ~/ a8 {" H //id相等 则 改变对应的dest和src) @" f3 h# k0 N# @' C! f# j
m_Item.nIndex = nTmp;
2 ^- \! m$ a- @ }
$ b, }3 V9 q. a$ O/ Y1 w$ H }6 t' W: T; p& v+ D
}6 O5 z; t( D# V
};. ~; ^+ m* q# }2 u9 Z# F6 \5 h
-------------------------------------------------------------------------
4 T p5 x/ S# S- {& y* V! c& T依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
+ U- _: K$ M6 a& W5 H/ H搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);- z% g, \/ X7 `
紧靠其上添加:
+ N9 ~* N5 i5 ~7 f; t. Q9 Tif( pWndBase == &m_wndMenu )
8 x# W2 ?' c) s+ f- j8 k* `{
+ N v, A- S" H P& o5 } switch( nID )" Z: J/ Z3 m8 ]/ S8 F7 N: J
{
) B* V5 f) F7 ?" M! `2 } case 2:- J! b! z% T' }4 V- y
{1 U0 C* `. Z4 j; m
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
" h ~- W* |! a if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)) c) x' ^3 i. R
{* v7 r9 I( b7 k+ t& }- l
break;) O" W% _. s- h
}& [) X" G7 V7 t5 D0 ~) ~
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
8 k0 H6 U, I7 m" @: e, u! y/ q {
3 T! u2 k2 f/ K& i CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
( i/ ] R! H) d) L" F if( !pItemElem )* g) v& w4 q* j
continue;' w |! Z, x- g( q$ O. D& r3 f
if(pItemElem->GetExtra() > 0)
- O( ^6 |& w, e ?/ A7 d# m continue;: N. g, T" ?& a) X
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
; B& `; v6 L. H* s/ Z% q& W0 ? continue;
7 a4 Q& ?* q& n if( g_pPlayer->IsUsing( pItemElem ) ), K* y. G. K* p$ ~
continue;5 ^7 k( K" |: F& m0 c
if( pItemElem->IsUndestructable() == TRUE ). {! L7 |% ?, U1 K. X% o
{
# u; z' i4 b3 O) |4 ^- X g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
. p- e! H8 t6 ^. [" O" o continue;
( V6 a. j( V, E q }) h# j4 v9 |; v) [0 ^: p$ O4 N
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
1 l1 D& M6 f9 `- j4 a }# [9 |% f! M9 E$ J- l5 u
break;
8 a/ `1 S& d5 V9 _- y% @ }2 D7 r& b( {6 j
case 1:
4 _' V \# S v- Z5 [ {
7 _- A$ h' D5 ]0 I0 t% Q. }0 U //整理背包
, F+ T& k! M' g //////////////////////////////////////////////////////////////////////////- c4 E; @9 e+ z5 D
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
: N* S) |! p: f: `% f3 x //////////////////////////////////////////////////////////////////////////
* R3 E6 n; S$ A8 g* o+ c //////////////////////////////////////////////////////////////////////////
9 L; W. z' b/ x5 p) \ CInventorySort* pInvSort = new CInventorySort;* r' [0 R3 T. U3 l
vector <sItem> vItem;4 h9 j% L: H1 _1 `; Z
vItem.resize(MAX_INVENTORY);//初始化大小/ J# X2 n& r$ u% T$ r# [* |
//////////////////////////////////////////////////////////////////////////* D, ~; z% i5 C# h. q
//填充数据
- ~9 O0 T+ }/ j" O% f! H for (int i=0;i<MAX_INVENTORY;i++)$ ^6 ?8 ^- x* F- S
{
" X/ Y$ |8 d' \/ m& r. x% b CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);' |9 U, ~7 z" L7 w m: K
if (!pItemElem)/ P" w# D; T i3 X* `
{
( g9 b, l6 I* V9 ~: ]4 R& q vItem.dwKind2 = 0xffffffff;
, Z9 C* I4 d+ E; J vItem.dwItemId = 0xffffffff;
( }7 V, I" k. k vItem.nIndex = i;
0 V% l' q, v2 t: t, y }else {
$ T; f! x+ G) ^- @ ItemProp* pProp = pItemElem->GetProp();2 w& ]* D% }. z0 e& s
vItem.dwKind2 = pProp->dwItemKind2;. r, P' K9 V, T+ b2 M) O: k
vItem.dwItemId = pItemElem->m_dwItemId;
. l# d! I: k, b0 w& ^* m vItem.nIndex = i;
0 E; H; j+ U8 `4 |# u }
+ D+ {- ^3 d4 | //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
$ I Y* X4 M3 {, n }
2 m, a& }, r$ _: { //////////////////////////////////////////////////////////////////////////
+ |* C. b; s, E+ Z) p( w4 s2 l sort(vItem.begin(),vItem.end());//排序
7 ?5 D9 T7 u7 ? /////////////////////////////////////////////////////////////////////////// x9 m$ K" U/ o' W( S
//交换: e, {! g; L. _/ z3 s! `
for (size_t i=0;i<vItem.size();i++)
: ]9 Z0 i' M/ o- w8 k4 E {
2 D8 Z6 h. w/ E, K5 d7 m; F6 N( o0 C //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);. q q+ r+ o8 y% i, u* Q& f% [5 j
pInvSort->Add(vItem.nIndex);, ^' d% M: h9 ^! ^( u. ? s' @
}
! F2 c% ]6 `2 L. H BYTE nDestPos = 0;: S" v; v7 w1 E1 A- V
for (int i=0;i<MAX_INVENTORY;i++)
) k; A1 T0 I b* P2 q- T. F8 g s {$ Z& T4 q3 w% J- l5 E2 l% `3 s
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);: n ^8 s/ l0 k% c6 o& [# q, h& B
if (pItemElem)5 S; g+ ~5 ~( n0 F
{
5 I: _! E: c1 p, l8 ~/ U) b if (IsUsingItem(pItemElem))
) H3 y1 v3 J' ?7 z. k/ a7 T9 H {
3 E0 T6 A& I( ?6 ]" x& q ^. V //这个位置无法放
, P) o! c, l6 m8 U nDestPos++;
* w/ B/ _, u% `/ Y' ] }1 @8 U5 _* v+ D# t) S6 B
}
. @ s" Y9 L! M8 h& q' w: A BYTE nSrc = pInvSort->GetItemSrc(i);
/ A8 d$ P/ T& C* K; B7 S pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
( {! M; {5 S; U9 t2 C if (pItemElem)' Q6 V6 O5 E7 W1 F( u1 |5 B" p
{! p: t9 V+ Q0 a# E' U' x% l
if (IsUsingItem(pItemElem))
( Q9 L- ~0 ?. A' ?; k {" J% I& e: @' j
//这个道具无法移动,跳过
9 T, Y' z8 C7 z9 e5 d, J! d4 I) W6 W continue;
- N6 b6 b1 w) y H* m: t3 G* h5 P5 U }
4 ^/ I5 v! R. V* d- [. r. n+ Z }else{
+ _8 z: p* n2 ^8 v( n //空位置 不用动
8 C2 D" l2 ]3 e continue;
( y0 E! i0 P2 O; v, n7 _) T( r }1 Z3 P7 I( M. d& F) `- i! z
//////////////////////////////////////////////////////////////////////////
6 M6 P& O4 |* i `+ J. ? //开始移动
/ v. Y* B: u6 Q. j if (nSrc == nDestPos)
4 j) _ n+ R5 b8 w {
. {6 d$ B+ {( F+ B6 q$ H$ g //原地不动
" M3 |8 C. \! R8 K7 f+ Q nDestPos++;( \- w1 f- L; P
continue;. r. Z! R2 s7 y$ c
}
2 v. o' a4 ~' ]4 s7 ^# P9 A/ L% @ pInvSort->MoveItem(i,nDestPos);* W# {+ c7 g; ~/ J
g_DPlay.SendMoveItem(0,nSrc,nDestPos);) F' v, ~! N& x+ c, R2 P
Sleep(5);
2 v+ j$ c0 U& H2 }& b y //Error("移动 - %d->%d",nSrc,nDestPos);
- q4 z s* |0 ~1 v9 A1 C" } nDestPos++;$ U/ _0 E# [7 W
}" ]8 m. M7 e0 s: m6 w
//取第一个元素的信息
' E1 i, p+ Y3 L0 |) { /*
5 H! F$ I& Q8 o; r7 Q if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)' u3 S+ a# V- y9 [8 Z' d
{
# e& Y/ m x+ `1 l/ V& G2 ` Error("Move - From:%d,To:%d",vItem[0].nIndex,x);, b" I+ c9 N( ?" d
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
+ d7 E) b2 T8 }: ] }2 w1 D. d) b) o- J9 c3 ~
*/0 s/ K# F7 |) C2 m& E" B7 ] w# U
//////////////////////////////////////////////////////////////////////////
3 \$ A/ j, k7 m% ^5 L break;
; Z4 |2 ~4 K% V2 l }' _5 _; v b" R- F# C8 E
} 3 y( Z5 O, }% U- N' m0 `
}) w4 N) {4 z/ l5 v* W G* n
m_wndMenu.SetVisible(FALSE);' G8 K6 v/ `0 ?- Y
2 l( @& `2 P7 Y" s" e
--------------------------------------------------------------------------------------------------------6 d7 n3 n( @) k$ G2 Z5 f
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)! L/ t+ O% X7 O) l
{
: p0 C$ z3 `9 G5 t3 EBaseMouseCursor();
/ I+ s4 X; e. r+ N+ M6 S}
* h+ D2 R3 Q5 g2 a在其下添加:
1 T2 S4 M7 q4 P( j0 |void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)# ]$ X$ L( G. N( W' E, f, Z
{
& x; I* f, ]$ F# R- F0 }; t% Q9 Fm_wndMenu.DeleteAllMenu();
7 T' y, M) y( h" g2 ]m_wndMenu.CreateMenu(this);
6 P# m2 j3 v; S8 B: Wm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");, L' S+ Z2 F( ]$ s+ u
) d0 P4 [9 A! pif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
- o$ D& ~, o5 F6 o. d{4 H" x2 W8 P4 e
//P以上级别才可以删除所有道具1 f- t; c3 g, A* e9 c2 W2 p8 g0 e2 F
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");" r8 J* ~: y5 w8 M7 r( v, @
}, t4 g9 t% J: i: [' U; Q' I3 y U1 s5 E
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point ); }/ k# @+ i# V
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );3 t4 M( T% `" Q; s+ `9 |1 S E# W
m_wndMenu.SetFocus();
: |* t, Z9 V! ?( \) y; I/ k}
1 O: ^! f8 v( M3 S8 O1 E------------------------------------------------------------------------------------------------------------0 E6 I) B7 Z) ]$ x$ [2 `) ^$ F% V
*************************
0 U! z; s9 f- z, D# p, BWndField.h文件) Y1 b4 z! M! H7 V) d& C5 K4 @
*************************7 `" \. T( N9 Q2 g
搜索:BOOL m_bReport;
3 G3 [% y. O! i/ L0 W$ T3 R: T其后添加:
3 W7 r' _/ ?! @: e% Y. G4 b' LCWndMenu m_wndMenu;
$ `# y5 V7 P- ?1 S搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
4 ^5 ^+ C: A4 V" F; Z; S. ^其后添加:; }0 F5 D% W6 {! K/ Z" \
virtual void OnRButtonUp(UINT nFlags, CPoint point);
7 y7 u" j4 d% N3 `* W Z+ ]+ Z# k8 z, m& T* P# u5 S
]( L$ l2 a$ {/ }
|
|