|
|
源文件中_Interface文件夹下WndField.cpp文件
; k& G" G' O8 I9 |7 h搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )* \. R1 C3 U0 H% G1 R* J; r
* x' Q. A7 {, z8 I1 v
struct sItem. D* j- x" L5 N, s% X* n
{
( {( p8 q/ E" CDWORD dwId;
7 R- o2 T9 d0 A6 DDWORD dwKind2;
5 l" _% p, ?9 I0 a. F% Z+ kDWORD dwItemId;
( t7 K9 D/ R6 [6 {BYTE nIndex;
% A! C7 N* ^7 |& `4 nsItem(){
9 y3 h1 b& B' i dwId = dwKind2 = dwItemId = nIndex = 0;
. |6 F" O2 U5 J}
& [/ _$ C+ V, q0 w0 n3 u5 q. Kbool operator < (const sItem p2)8 O8 x/ n. b) @7 x& [% F2 I! G
{, p$ A! W3 @1 k! h9 ~; I
if (dwKind2 == p2.dwKind2)( ?$ F9 {5 D, n0 H
{8 t0 g6 t. @- ^0 j% r. _4 j
return dwItemId < p2.dwItemId;7 c- H' u8 R$ ?* z% n
}else{# F' `2 y3 e1 t0 I, v
return dwKind2 < p2.dwKind2;
. p3 M) Z1 j% L& I% k }
- Q+ s( [& D- V1 S}8 C2 A; S; O" D
};3 l. ?- M$ w6 z/ m5 }9 Q
class CInventorySort
1 p8 u! @8 c& D7 \4 {& B ]{
~6 `! l9 B& ipublic:
4 @; N* G1 B9 h2 x7 yCInventorySort()
x0 p; v7 d3 ~9 n9 g1 B{
4 b( I5 q4 ?2 G, v" f/ r m_dwPos = 0;4 ?" N R- H% `' I% x
}& }! O/ ^. P3 Z( |- I) b
~CInventorySort(){}
|" B7 Q# U& V, Q; @( sprivate:
Z/ O( c! p& J, jsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
2 t* H/ N% k" t/ yDWORD m_dwPos;
8 u% a/ Q$ t3 B! f# Y: ipublic:4 P: B% i5 g/ N: o) E. }( t! v7 S
void Add(BYTE nIndex)
5 z8 [% d: ]# \2 x1 j{
, u0 Q/ j( _$ D6 L$ }! u if (m_dwPos >= MAX_INVENTORY)
& |1 I& }, D4 |6 j" _. ~ {6 p) c0 A7 J! a
return;! c) s' F/ s! w. I0 C! @# Y7 G
}
+ R" G. m% X) M* O m_Item[m_dwPos].nIndex = nIndex;
1 t \8 p3 _+ p$ U$ W/ J' W m_Item[m_dwPos].dwId = m_dwPos;
4 L+ ]- ?0 Q9 u3 x) d" o. k; Q7 N m_dwPos++;( l- O. n$ G" ?2 c8 o( i. E
}
2 I7 t( ~5 h" kBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列, D( Z9 \: ~6 S' w2 G7 Q2 h
{
" v! Y/ O* d2 O, A( } for (int i=0;i<MAX_INVENTORY;i++)5 G; U9 M0 ]/ n' o0 ^* s; v+ H
{
z; N" j( |- p& t: F* R4 i; v6 @9 N if (m_Item.dwId == dwId)$ r, `! E. m1 m2 e1 `; E
{
9 W0 M% m7 y- t, D) Y return m_Item.nIndex;
|* t% d b; `2 E( Z# O; m }
; o8 G! G8 U% i4 @; b' u4 v }% G. y& z6 a' Y/ `6 ^; N, P- g
return 255;2 H- n" O) J; M3 l0 P
}$ a) [9 v3 j: W1 \" n$ {9 }
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
. |+ u5 z1 V. c, x( {{; g) X! R9 X& L. B$ F7 d5 J. }4 G# X/ o
BYTE nTmp = 0;7 l1 C! Y8 y1 w ] g6 D
bool bDest = false,bSrc = false;
3 Z* {4 j- X/ N5 z1 l, G6 y9 s for (int i=0;i<MAX_INVENTORY;i++)) _+ U& I% E1 q( k6 Q! w: C) f
{
2 u8 O! v: W! A2 |/ h/ T3 e4 ]: H- n if (dwSrcId == m_Item.dwId)( a+ I& @. X1 g6 L7 P# s
{
8 m' c% a5 `5 B* S. k1 n //id相等 则 改变对应的dest和src
8 p5 j* B. A% i, ]& U) F& Z$ Z* O nTmp = m_Item.nIndex;- N5 S/ T! h* ^; I" D& \
m_Item.nIndex = dest;; v. ?5 q( c! J( g% q
}
! C- ~( s' C2 ^4 A1 N- x4 v; ? }
- ?9 |1 _, `7 P; ]. f" {9 e //临时数据保存完毕,交换开始
" U3 Z, T0 p% }1 Q2 e6 o# p for (int i=0;i<MAX_INVENTORY;i++)
7 A# k7 z4 H# R7 X7 q; [ {2 W: _1 V& y$ q7 ~ U2 {5 ^6 A
if (dest == m_Item.nIndex)
4 U5 D: u, d2 B1 }6 c5 D {
( f" ]2 C: [1 t" o; f //id相等 则 改变对应的dest和src
: {% s% V& G5 A; p6 a) k m_Item.nIndex = nTmp;4 f5 \. h, ]- b5 |( Y$ H/ I
}
* f# x, y2 T8 P# |: m# G, U7 W }, q8 q1 e: @; |1 X* Y. j2 v
}
m+ \& {% X$ l};; V' a0 g/ j: p8 Z: k8 h {7 |
-------------------------------------------------------------------------
8 R" p2 L7 `# y. _7 T" C依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ), n, M! `- b8 y1 f( F' g% V- ~: N. Q0 @
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);' z0 A, C1 s) T
紧靠其上添加:
6 E$ J; ?1 @' g, K- ]if( pWndBase == &m_wndMenu ). r/ `1 C6 H% a. d' H4 M6 G& V
{6 w% @1 [% e$ S8 A
switch( nID )
5 T6 c) }8 y6 O& _- f {
6 r6 G: s1 ~( I# u4 c case 2:3 R, k' E% [& e8 z* W4 g
{
% M' t7 \& d/ D+ w //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
r9 V4 _/ N( y* T if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
0 D/ S+ j7 ^ M: a! @- } {
2 m3 ]9 u" M% ~/ e break;
' G2 ^4 l$ P& J; m }
$ U! \' O- [- [+ N for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)% U$ W/ _8 n9 x0 K3 C
{
% h0 S+ K! W/ G, R CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
( @1 O A! W- i& \0 ~ if( !pItemElem ). s. h/ N5 c) T( E- F
continue;% A4 U% _' Y1 E2 l' q/ c; l# c4 I4 k. Y' ?
if(pItemElem->GetExtra() > 0)' N+ f) \6 t) C5 z/ {3 V
continue;
, g! f7 M- L3 d, N8 N: Y2 h" [( c, s& v0 @ if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ! E7 d+ g5 z1 j7 r# C4 l+ L
continue;
1 j9 d7 t* w( d6 p8 @ if( g_pPlayer->IsUsing( pItemElem ) )/ n* r' i, I6 C: G
continue;: f1 l' O$ Q# `. N4 B
if( pItemElem->IsUndestructable() == TRUE )# K) t& g# Y t- M' @
{6 W3 a( v- ^! l3 y# r( f3 _! k7 v
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
5 `) e/ y$ u. G) i' M& T continue;
* O- h2 m& w9 v" L }8 e3 Y- s5 e/ f9 F
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);( q' t/ k' y7 r$ \9 V! Z3 o
}' _. c. O" q' n% t) p% r2 M
break;
( c3 \/ u+ ]2 f9 u& y% W }; C* \+ S+ z5 P% g
case 1:- l1 H- e, u. X
{* Y: q0 [( }- H6 e1 ]: ?4 H* \
//整理背包1 S& |9 m- u( |' d5 F
//////////////////////////////////////////////////////////////////////////
2 Z6 q) G. ]& }* j7 M3 b0 i //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );* Y) }1 X) q2 @, d- b8 O
//////////////////////////////////////////////////////////////////////////
& Q! x0 t% ~% T5 G q: v$ v //////////////////////////////////////////////////////////////////////////, m+ g% x8 p# s; g- k' C! Q
CInventorySort* pInvSort = new CInventorySort;, o" j7 U4 m* x: D u0 l& Q
vector <sItem> vItem;
& x d, C% E( t5 N vItem.resize(MAX_INVENTORY);//初始化大小 U, ?3 a# U6 P: V" o( W" l
//////////////////////////////////////////////////////////////////////////
# m* B# o' b/ d" u //填充数据$ c, ]' b! H p) p0 H
for (int i=0;i<MAX_INVENTORY;i++)
3 C0 ^7 h+ q/ i6 Y% y3 | {$ T+ H4 W2 ?- [
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);' o, J# C7 C; l3 n5 P
if (!pItemElem)/ j; z% ]7 Q8 @6 H' V' ?
{
" w" E4 O0 I. ?( ~; q8 m vItem.dwKind2 = 0xffffffff;' ~8 q# I- I& A9 A, l
vItem.dwItemId = 0xffffffff;
9 l! d0 G% p+ v9 F' G* }. Y) _ vItem.nIndex = i;3 t& @6 V0 [) m$ R5 h2 x, C# I$ W+ c
}else {
/ f8 @7 p6 _8 M ItemProp* pProp = pItemElem->GetProp();2 q' E7 I8 j8 r& i/ ~. C
vItem.dwKind2 = pProp->dwItemKind2;( Q$ ? X: F' ~
vItem.dwItemId = pItemElem->m_dwItemId;+ q, }: w( b# Y- p9 M' t
vItem.nIndex = i;1 R; ?( j$ Z( F7 x& d# p" T
}4 M% B8 H0 t& B
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);2 a! d5 i9 a3 b, {% P. V, o
}
/ X& F$ |% {! r3 h4 J& b( }* ]/ x6 l //////////////////////////////////////////////////////////////////////////- u$ V* Y5 Q. P2 }
sort(vItem.begin(),vItem.end());//排序; |) R5 [' H" L! p
//////////////////////////////////////////////////////////////////////////
# T; f8 u6 a6 x& ]4 u //交换9 t" A5 t6 D1 b' v Z3 l9 G
for (size_t i=0;i<vItem.size();i++): ]; K- l/ q$ Y0 y- Z6 G
{! F4 c4 Y, k }7 U6 J$ w# ]/ v/ W8 i
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
" f5 K; c) Z* W# ^ pInvSort->Add(vItem.nIndex);
8 ?. H& b( K$ P6 ~ H: b& ~* _ }5 c. n; ~" k1 a) A" L) X
BYTE nDestPos = 0;
5 y' g( O. ] |5 ^" a) X for (int i=0;i<MAX_INVENTORY;i++)
$ K! A. G* K8 ~8 C5 w8 I0 G- `* J4 \/ G {
1 G5 j3 Z# U% e" e CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
D$ _1 h# @+ g if (pItemElem)
- z* N, a+ Q8 [ {( `% G l# g* n8 {$ m! m3 l9 ^
if (IsUsingItem(pItemElem))2 p+ J& u7 D8 [6 y
{
& ?: g' W3 A( y3 }/ W j //这个位置无法放
2 l5 E& B) W7 K7 A4 ] nDestPos++;" H4 m4 U* ~2 o' r. N0 u! q! A- F7 E K
}( o0 L' P! y. B* {5 H/ E# u
}4 x ]1 b0 ~9 q' y5 M
BYTE nSrc = pInvSort->GetItemSrc(i);
% G6 }1 T" z+ y pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);; ]3 {6 w; Z0 y; o
if (pItemElem)% }0 Z% I2 v5 u; Q2 z# n
{
6 G7 y, I1 p( d if (IsUsingItem(pItemElem))
+ X5 `9 n( V4 `8 G3 P {. `" h& ^0 @0 }
//这个道具无法移动,跳过; [) B( u, E. O, x, M2 M
continue;
- |' T/ B) ~$ a1 m! X: k9 a+ c }
7 {$ m7 v1 y2 i% T }else{
1 q4 B0 N3 t s //空位置 不用动' K! j% Z, D. j9 l7 }: r3 K
continue;* Y; t8 j8 O$ m: t+ N& S" b
}
4 q+ d+ W% |* ~, L- q6 L //////////////////////////////////////////////////////////////////////////
, }( ^4 M' b& r' Z0 H* ?/ | //开始移动- o: V3 Z5 [. z5 O" G8 Q- S
if (nSrc == nDestPos)
?( E" o1 {1 H8 k4 m3 g3 K {
7 K# d- C. |7 _6 d* U- y //原地不动
9 s, C1 d/ r; t* E. c1 M nDestPos++;
' H% A' j4 ^2 d3 v+ l9 s continue;7 N4 w( {' N6 d/ @/ u c
}8 H7 R5 j) B& }3 a/ I% {* f
pInvSort->MoveItem(i,nDestPos);# X: N. |- z2 ~; J/ K0 n
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
% X4 N4 J1 f; l; y, ^5 ` Sleep(5);
7 Q7 [5 R3 h5 G/ i$ t) }/ N //Error("移动 - %d->%d",nSrc,nDestPos);
% }0 u. L' ~, X6 x5 ]; I" W+ v4 D nDestPos++;! I | V4 G4 R* ]6 u8 x6 j' p5 t
}; }( x' \6 P9 y9 u, m
//取第一个元素的信息
8 p7 V0 `+ ^7 T7 v /*
7 A; f) p, l4 |1 u9 Q( r/ x, p if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)1 s# [. s8 ]. g3 P
{
- E% e& w# k, f5 D. J9 s, J Error("Move - From:%d,To:%d",vItem[0].nIndex,x);& a B( u' ^+ |% J3 T2 b" e
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);2 w0 x8 u, X3 j! C; j9 [' z4 t0 F
}3 {2 o/ G, q3 y2 ?- B9 ?$ p
*/5 ?4 f" n( l& v/ p
//////////////////////////////////////////////////////////////////////////
: s' r9 p# p# y2 Z break;+ q' G* p1 H" M/ }: d. D
}
F# ?1 O* t( C& G3 S& B$ A } ) b! {. Q2 S2 x9 [. {
}
, h8 s M6 _+ t0 y( Rm_wndMenu.SetVisible(FALSE);# e/ p/ d, v' |
3 b$ C8 }" T7 I$ j u& h' S--------------------------------------------------------------------------------------------------------
5 y! f8 ^) E( C+ i; r: }/ T搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
4 E" Y a: g7 x& B' ]4 j# G{$ f$ @* B- L1 ~* A: I* N
BaseMouseCursor();
: h( G# q6 [5 X6 {4 p) O}* b" H, K! m) v8 J0 }; ^8 F
在其下添加:3 D2 [# N% t/ f
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
7 [$ W- U! `/ Q3 q9 b{
2 k' |( M8 p- h; U; J$ Cm_wndMenu.DeleteAllMenu();
$ e5 N( j$ {: q* qm_wndMenu.CreateMenu(this);/ Y# T% P! t) W( ~
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
* D. Q) ?+ I, R
+ X+ J# G$ ]' Q5 {if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
9 C. ~) `2 @2 _% J{
7 E0 K: U }4 v& M+ [ //P以上级别才可以删除所有道具
# M! O- ~: ~2 \! `2 f5 P4 _9 o m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");7 o0 B* m2 ^- ^/ p
}5 b! Q4 y5 h1 b9 f2 P0 J
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );/ h( D" E* w9 g. n1 r* \
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
7 P3 M! ?3 [9 Em_wndMenu.SetFocus();
/ J9 L- `( }; x, I; h}4 j b" |5 ^$ L: u
------------------------------------------------------------------------------------------------------------
$ Z: @7 u) H/ u*************************: m7 o! t5 n5 m/ _; c# G/ A
WndField.h文件
" v' [5 |* F; C. [/ F% P8 V*************************
4 s; a- N7 \( u( ]3 {搜索:BOOL m_bReport;
9 k- S& e4 H0 k2 F. X+ X其后添加:
: n' P$ |# Y/ a: k N5 I2 oCWndMenu m_wndMenu;: M) ?! S+ G/ b/ _9 m& H/ |, l0 \) |
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);: o( W a& M" R9 U9 x
其后添加:' H/ a, b; t5 p7 f7 k
virtual void OnRButtonUp(UINT nFlags, CPoint point);
" R) S$ S1 a0 u5 Y4 s9 O0 A* ]! O2 U; @5 A6 u" V; t( G
* w& b( Y% {; k+ a; H+ K |
|