|
|
源文件中_Interface文件夹下WndField.cpp文件
/ _! l8 S# v. s! v搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
$ v* O$ c; w3 W u: J- P% x. j/ B& a0 P" U
struct sItem
0 ~- O. P1 S$ Y3 i* m( q3 H' a{
! Y2 J# D+ Q8 I: z% S7 S% B+ FDWORD dwId;
* r( S4 V8 N/ U& I K) A& ^- y0 NDWORD dwKind2;
1 B$ R* @: L* a9 Y5 WDWORD dwItemId;# v. y& H% y0 v; `! l; h3 W; f3 }5 H; e
BYTE nIndex;2 u$ H1 C O* C
sItem(){
! A1 b1 h( q6 A- J# V dwId = dwKind2 = dwItemId = nIndex = 0;/ D7 S- I8 p# C8 |4 [0 S
}/ [. e1 x7 Q# ?& X7 I: t
bool operator < (const sItem p2)
/ c; a x) q7 f" ]{, l% I8 y- x2 y8 q+ i$ {) Y
if (dwKind2 == p2.dwKind2)
* {7 n1 t7 `$ H c7 x {$ a: @& f/ l* M6 c7 \; W/ V
return dwItemId < p2.dwItemId;3 s- d1 ?* @" g% F9 Q/ N
}else{# {& O+ X" F/ K2 w" l
return dwKind2 < p2.dwKind2;
! e% a8 E* ^# P }
+ K2 ~) m" k5 n3 C}8 B7 _; R. l9 }6 n) o1 N" Y
};
) {' |9 P. ~( H5 g) p) G Oclass CInventorySort# z4 W+ U# C4 b/ F
{
; |! N- t4 {/ N) V& c( z* Hpublic:
& B. h$ z& V+ MCInventorySort()5 L9 A; i/ z8 u, o! P
{( W7 _& @6 E- s- a3 l
m_dwPos = 0;2 C4 H$ b0 ?% {) k) N" @* W
}
+ S: L# @* P9 p2 s5 B% L2 E~CInventorySort(){}
3 z' D6 F2 b4 s+ e9 oprivate:
: u( P' r, f+ e% ssItem m_Item[MAX_INVENTORY];//存放排序好的道具信息 ~# s6 R: Q# ` f8 W
DWORD m_dwPos;
5 q6 C, V: P" c0 G, C) cpublic:4 i: r3 ?, O( ` D
void Add(BYTE nIndex)' W$ t/ i. C: |, n' F w: u
{
4 ]) C$ P. l7 n/ Q5 ~ if (m_dwPos >= MAX_INVENTORY)7 s& K: }8 z5 f( J
{
5 w. ~! d- o/ U1 g6 |( S& d return;
& y+ R4 f" A( R& W }
% W1 E5 n- K( W7 n8 N% M8 I m_Item[m_dwPos].nIndex = nIndex;
9 R( E, k) @1 @" x# J2 B m_Item[m_dwPos].dwId = m_dwPos;
% w& y& b7 J8 k- J! U% R m_dwPos++;
0 E) z# t; M/ T}
* X9 t* p1 I0 aBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
$ S( o& Q' o0 p3 q$ }{! u3 v7 {6 N3 x U2 X
for (int i=0;i<MAX_INVENTORY;i++)
6 ~9 H3 |' \+ l9 A: k {3 D- X! o& G% Z/ ~5 ]% ]
if (m_Item.dwId == dwId)
1 k( s! J+ G" T {
. Z, O3 [9 m5 w return m_Item.nIndex;- c3 T9 R7 E& f) c! `8 p9 ]$ y- v
} M1 k8 `, S- d5 F1 u3 W/ k. S7 w
}& p( C9 d- V! Z/ Z7 u) x
return 255;
1 d# m3 A0 q2 t4 _0 u! m. ?}
' Y, z" z* k. xvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
7 M" x1 R$ P5 f# \{6 F. [; z/ l1 V4 ] F
BYTE nTmp = 0;
4 ]4 `$ X A6 g' s3 M: B bool bDest = false,bSrc = false;
) a2 _" O( W+ u for (int i=0;i<MAX_INVENTORY;i++)
+ a4 Z/ z. H4 X/ | {
9 T% M' @( T/ v+ ^+ E if (dwSrcId == m_Item.dwId)% c8 W4 b; u+ B9 f A2 s& N
{
7 K' \- h' k$ I( x //id相等 则 改变对应的dest和src
& L' |# W/ ?, J5 T4 i5 t K# l3 d nTmp = m_Item.nIndex;
* `% u0 A9 F8 w' s1 t m_Item.nIndex = dest;
0 P" f3 z& `, C- y }
* ~" m7 S) q! U. |2 G }8 z k3 v4 Z+ i7 k& o
//临时数据保存完毕,交换开始9 m8 t% ^" B; t8 h$ [( ?
for (int i=0;i<MAX_INVENTORY;i++)' j$ p) a1 l& o6 i- N3 Q
{
& L8 L7 Q) ?/ i% i6 n, N r if (dest == m_Item.nIndex)( ]9 Z( O: c; F( m
{
, @( B: W5 f6 x4 @8 p //id相等 则 改变对应的dest和src1 z1 o% G" s0 I y* M
m_Item.nIndex = nTmp;6 u% C1 i: F V
}
$ d/ w5 r/ Q( B5 L) b s8 ~ }5 T5 H6 l' K% D" M. M% {
}
0 l0 J+ i; Q! p$ r5 y};
7 M6 `3 v6 X' p2 k$ F2 J-------------------------------------------------------------------------; B6 f3 ~8 }* H u' q Y
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )% T. q& l) C8 ?5 x
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);# e+ H, k1 z4 N5 E- H8 }1 a
紧靠其上添加:1 I9 |( X. g" g e; B' d: C8 m
if( pWndBase == &m_wndMenu ): x5 `" k' O' [4 E* D
{& g, n4 w+ ?+ H) @+ ~1 R6 W
switch( nID )
* _: R( A9 U9 ^ {
' {2 d# ?1 n6 y( I6 l o. \( |# i case 2:
! R& z. A3 f% ?/ T( `1 \% u {. V" W# x6 p, y' I# @
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);# G5 [3 v- ]; t% q$ r& m9 k
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
4 m! V* g* L" i+ I {
& U* V, B, t% R( J7 ], E- S break;
0 f& O0 o+ g6 b" R" B+ ^* q+ h- s }
$ B- }$ H7 B; J+ W2 x7 p+ ~ for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
3 t3 {8 p; c" E1 \4 d {/ G. {, s' [) H7 Y3 A H
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
" T+ |7 B5 D5 o# z if( !pItemElem )3 ^. I7 y7 U# T. H
continue;; M5 @4 G* _, F
if(pItemElem->GetExtra() > 0)1 d9 R5 O0 g* F2 j5 {! U. v+ X
continue;
. t* @5 _- p+ p; O; w if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
/ U. Z4 K( d. u0 g7 Y0 e continue;7 G9 p9 T: j) E# t, j+ C/ P
if( g_pPlayer->IsUsing( pItemElem ) )
* G# F1 q! Y& _" K( \& Z! h ~ continue;
/ a; c: w5 L% c8 k5 ? if( pItemElem->IsUndestructable() == TRUE )
$ h2 N y" F0 [# D3 ~ {
1 M6 c( P, `% f: @" b* j' _ g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
& x; U4 L. O8 a% M+ p continue;+ g9 f4 s7 Z! V L- v: a
}
1 [3 l3 l+ m# J) Q/ C- Z% g1 L+ c g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
& p2 i, L7 p* V. D$ E$ h/ b0 g }
7 p, t# X! _/ B break;- o7 U: q( }/ I4 C# S$ v" v S; r
}$ P S; d" w$ d5 X
case 1:
7 u4 [* n8 y @" i% x. w {) I9 w( S0 x' F) y9 w/ R* v. H
//整理背包
* V8 F. H! D; w# F //////////////////////////////////////////////////////////////////////////
* j5 e+ c- i( x7 T' A) h //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
' N% Q" f3 e! K6 x) E8 Y! i0 F //////////////////////////////////////////////////////////////////////////+ w' B) r5 \7 Y2 z# u. F2 Q1 s
//////////////////////////////////////////////////////////////////////////
& a) p6 M9 S6 \, B" x CInventorySort* pInvSort = new CInventorySort;4 j8 Y$ s9 t: r: M. f$ [
vector <sItem> vItem;+ k( Y1 \' O0 y! g
vItem.resize(MAX_INVENTORY);//初始化大小
c( R) H% \! g //////////////////////////////////////////////////////////////////////////
" }8 h- t6 _2 p. D3 A4 c //填充数据
) ?* B# o! f: _& z for (int i=0;i<MAX_INVENTORY;i++)/ F! H v3 c8 G! o7 T* b5 P" e# |
{
# E$ [1 m9 B7 e CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);$ \% R$ K' [& b
if (!pItemElem)7 j" t) q- A- |6 C; ^
{0 U$ e) [) L: K6 y6 V2 h
vItem.dwKind2 = 0xffffffff;, S# J4 v' }6 j# Y8 a. ]+ ^+ _9 p4 D
vItem.dwItemId = 0xffffffff;3 [+ f0 i) p1 S' l
vItem.nIndex = i;: @6 l* k& G4 Y9 T% `
}else {
# K( w! i1 [% U2 E. |9 e ItemProp* pProp = pItemElem->GetProp();
5 s+ c% Z; r: }; V5 ^ vItem.dwKind2 = pProp->dwItemKind2;5 X0 E5 `) `9 t; } s! y3 X2 L: O
vItem.dwItemId = pItemElem->m_dwItemId;4 R6 N- n) }" M/ h( g" R8 r8 H9 n! c: [
vItem.nIndex = i;
: |7 A+ }" H# l8 d3 w }
* V1 r) y. {0 o! y. [7 b2 T" ` //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
3 }( d+ ?6 F$ V# d+ F; {! Y }5 p( m2 I2 L1 m; m' J- g- B- J. T
//////////////////////////////////////////////////////////////////////////2 r- D; G/ T" I2 o% G
sort(vItem.begin(),vItem.end());//排序% T8 T5 N U" |4 f) K/ g2 R* e3 _
//////////////////////////////////////////////////////////////////////////, H- l* B+ ~& Z, h4 l6 z+ y4 J
//交换
q O% v7 z8 h) z/ Q: Y for (size_t i=0;i<vItem.size();i++)# w* x% ]4 N7 v( t/ E' P" F* k) {
{
5 ?1 V- a/ l' C4 i3 x //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
/ S1 K% y* X* ?6 z. _ pInvSort->Add(vItem.nIndex);
' f) z _2 H* d" x }
; i1 H$ t' h7 b( x; K, | BYTE nDestPos = 0;
5 r, g' Y# c- A5 r for (int i=0;i<MAX_INVENTORY;i++)
, Q+ A1 z1 m" w0 k+ B3 H1 } {
, |" i! P, _4 J8 O CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
7 ^+ N) k" T8 r$ t9 l if (pItemElem). \ o4 o' f- T1 ]% S% d+ @2 U' V
{
7 N9 U0 g9 B; y4 _" b& M. w- M# }6 ] if (IsUsingItem(pItemElem))
9 w! M- g$ i, j- e, R {
" ^/ i& e' b+ e A //这个位置无法放6 \2 `3 e5 M1 T% ?
nDestPos++;% s: [* g$ |% c6 L$ G) Z& X I
}
/ X8 U: U! ]$ ? }
' Y" _' H) b# E+ ?0 e% V BYTE nSrc = pInvSort->GetItemSrc(i);
1 [3 @! P# u" e. l7 q# ^2 M pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);. s& @6 L' k9 {! X2 N- M
if (pItemElem)+ {9 P: b* y: B' v
{9 M1 B& a7 t) S# n9 N7 Q
if (IsUsingItem(pItemElem))
, |5 i: ^7 q- ^3 B$ } {# _$ ^+ J3 u$ ?# \6 D
//这个道具无法移动,跳过7 P% {5 f- ] j6 a" {" k
continue;9 k! m. {& H" D [
}
9 ~" h! B; T/ O) Q3 R- I4 B }else{
) ^; F: i% [$ O" o! r9 Z# M //空位置 不用动
% z0 y; b/ N) K$ d continue;# B B K: o6 w# c
}
' P. D$ [/ Q- V. k+ L" N5 m //////////////////////////////////////////////////////////////////////////
) e% c; W5 N0 H" |9 ~( ? //开始移动; A3 a; W0 _7 _* O
if (nSrc == nDestPos)% T, i# q: @5 P6 e0 ]
{4 }7 \; t' X3 F1 @
//原地不动
, r* ?' z) O0 ]% z( B nDestPos++;: T' `# c5 G* a% x+ A# Y. _
continue;
; \, G @* e& ^0 M4 z" t }2 A/ Z# ?. J6 L0 V
pInvSort->MoveItem(i,nDestPos);
( W9 C/ M F% m X9 n* ~ g_DPlay.SendMoveItem(0,nSrc,nDestPos);
5 G% n$ B- E& V! @0 x Sleep(5);
& D2 a, ~5 X. w2 }1 \% x //Error("移动 - %d->%d",nSrc,nDestPos);
& k- o1 `8 N9 K$ e4 F& C nDestPos++;
* d) Y5 f! a J0 L }
/ k( S* o% W0 m //取第一个元素的信息
6 I. i3 q4 l( f( _8 P- S /*
" @7 K: `! l/ Z4 \( m( J if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)& s+ P4 {: w& F8 D7 W% g B: v
{& P7 j" ^9 c7 C# B) y
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
' }3 F, V4 a+ V1 C8 o. r g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
- E& I# T# p% ?5 z }
, F4 a5 c& h) _3 x Y8 P d */
" c# c8 R- ^% g5 E; [& j5 F //////////////////////////////////////////////////////////////////////////8 ]9 i& f6 d/ j% K* G2 H+ {+ `
break;
, C2 V) m" x/ I" `: z }
2 T& b) D, a+ d( J6 J" ^( Z } ; r. {' Q* U# D! i5 t* o
}
9 _; |) F0 n4 R# i" H. a5 S- j- ]m_wndMenu.SetVisible(FALSE);; f6 e& {- s% {7 t& _! }% U) v* ]
$ W4 D7 {6 K$ q2 N1 ^--------------------------------------------------------------------------------------------------------
2 k, \0 U; i( p% w- v' q& s, H- E搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
& n" X' d- s6 t" v# ]/ S9 g{. y9 U9 z1 X; ~( ?7 `
BaseMouseCursor();
6 s4 o0 n$ } O: `}
! L5 J/ T* Q' G9 \- ~& j% {2 H在其下添加:: y0 C1 n4 r. |: X
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
* B/ B/ Y5 P2 U( |/ ~* ?9 `{
2 J2 ^- p* K7 }4 Y; gm_wndMenu.DeleteAllMenu();
k% P7 C( M0 ?7 ]2 gm_wndMenu.CreateMenu(this);, O* M: S$ m {1 L! @( G
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");& S) y+ h$ Q, F: |& M3 Q/ I0 `
9 x3 v9 q" _( @5 s0 b
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)); M2 s" ~8 ^; O
{: K- K- F6 Y5 F' @5 |% t; _; q
//P以上级别才可以删除所有道具$ m8 k, Q/ W D7 j" W6 y9 p
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
% }9 S. J; h" u8 f1 y# t}
) F, Y7 w; m3 _) K' J+ V4 l& zm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
2 o+ t3 f; J, M, w( @% ?m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );. f& ]5 j. A( f0 {; q" o
m_wndMenu.SetFocus();2 A$ M! G, W8 m9 S0 O" S0 D, i) T
}: Q7 @6 ]4 N. I7 |
------------------------------------------------------------------------------------------------------------
9 c$ X5 q0 w8 D*************************# b# f. I& ?6 e2 {
WndField.h文件6 K2 m: \2 F) A( {- P# N# p
*************************# X0 k% l4 H) C. |* w* t' Q
搜索:BOOL m_bReport;9 H2 ^: f" B# w l
其后添加:
; r9 ?, {1 k! [, \CWndMenu m_wndMenu;. G6 ^3 w# m2 c/ _( ~4 p0 t
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);1 h6 r/ D0 G! B9 M( L
其后添加:# m- f+ B; o l: ~ ]6 t0 q
virtual void OnRButtonUp(UINT nFlags, CPoint point);% v; O9 @; n: A% j9 W+ s! s
. n: l! n* C) ^
" ?* P# U" u. n U
|
|