|
|
源文件中_Interface文件夹下WndField.cpp文件
0 E, Y* [4 s- T7 e" F2 c搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
$ B: {+ Y8 { E K# H
$ d/ A5 q# ^8 g8 c) q8 k2 Nstruct sItem9 p/ e; ~7 a( n. N$ a8 V% d" M1 U
{
3 Q( l& t6 `8 VDWORD dwId;
4 e% E. b0 c: [5 B I( }DWORD dwKind2;
j# k% ~) F i/ RDWORD dwItemId;
# j' q1 C1 B: `" ~, H8 fBYTE nIndex;
8 d# c; M! U4 j) k, _sItem(){
. ?$ D r1 l2 Z2 m8 c% ~. k dwId = dwKind2 = dwItemId = nIndex = 0;
: U4 v. @1 |+ D0 N}
- N# C- y1 K; B Pbool operator < (const sItem p2)
. h1 s/ P, T- M+ q. P o{0 l: R ]% |5 f5 H
if (dwKind2 == p2.dwKind2)* ?, T1 n$ k2 P4 O8 B. Y- w! B
{" x2 a) x! M0 x2 D, q! ^5 Z8 g
return dwItemId < p2.dwItemId;
& w, ^6 N$ H8 ]% Z3 g }else{
1 M+ i8 A" X$ P# u) c return dwKind2 < p2.dwKind2;
' Q" P2 {. r6 ^+ x* E }: C5 d- z# `( L1 z1 O
}
- u9 u( P: e' w6 K. B; b* a};
# o3 F) y; }* oclass CInventorySort
. X& P5 l% t7 K1 w{
3 g+ S9 U4 u% `7 Mpublic:
@1 N2 H, E% aCInventorySort()) \* A A, \2 L9 W- ^7 j O6 A4 v
{% T8 o/ V: A" w1 O4 l% R0 o- V" U0 w
m_dwPos = 0;3 E+ W ^! \8 | x5 i! _
}+ q! \9 |$ D' R. e! z* q+ [
~CInventorySort(){}
+ g$ O% i! y+ [* Q* Gprivate:
5 ^ [5 j- `4 z8 } U q+ I9 d/ G/ NsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
- @+ d, @( ^7 P3 V* D$ i) y. g2 {, nDWORD m_dwPos;
6 l4 B$ Z" s/ F' |6 u9 mpublic:( I# M$ d1 X# `
void Add(BYTE nIndex)" E: K# l8 M( b; C: d: q2 g$ f
{' N2 r$ z) t1 o1 {$ k" n( d
if (m_dwPos >= MAX_INVENTORY)
. D; }- j2 |: h- i0 u+ p7 N: K { |/ F" J: F! N- R( B
return;! ]# n) D L. P6 x- Q: f0 O0 t* {+ y2 H
}* r( k! S. ^3 e: F; j8 B: n
m_Item[m_dwPos].nIndex = nIndex;" q8 X2 k# [5 C* E7 b) o2 h* `
m_Item[m_dwPos].dwId = m_dwPos;" `$ H5 w- ^3 u r+ [
m_dwPos++;$ j( j }% Y! n- i! m* b
}* P. f1 v9 f- Y' ^
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
) H8 F( ~/ c1 U9 }6 c0 U D* f{- Y1 L1 N, M* P
for (int i=0;i<MAX_INVENTORY;i++)6 K$ y8 |2 G7 R# r# w) @- K
{" G; Z k8 h T6 V; V
if (m_Item.dwId == dwId)% z1 A2 }5 G1 C% d' d+ G. }
{( u0 Z3 c+ k1 E5 _/ q8 r
return m_Item.nIndex;) W5 G# T: e# ~) A, X4 m$ Z% `
}
8 U% `% Q" D1 w3 L7 j }
; R% q" ]* j9 d1 G" |0 j( S return 255;
4 o' E* x |, B( V: a( H+ F}
3 O7 b! B1 _/ \ Pvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置) z+ N# x. S3 B \* H9 p: b, D
{- A- h3 Z- s- @$ ?+ |1 `& ?: q
BYTE nTmp = 0;
4 o" ]; j9 {' c9 @4 F5 G: E m! g bool bDest = false,bSrc = false;+ z* _% V% }1 O
for (int i=0;i<MAX_INVENTORY;i++)' B6 C; D0 C' ^, ^" I' a: z. W" i3 t
{
" K2 Y( t2 S$ Z ]9 E/ J! z. I if (dwSrcId == m_Item.dwId)
$ @+ J; Q% ?/ r {" `$ D1 J+ W) j( N
//id相等 则 改变对应的dest和src
' `' ], v- G8 D* O" N/ q/ P nTmp = m_Item.nIndex;% V" ~9 R$ ]/ L9 N
m_Item.nIndex = dest;, n7 H2 x6 s) e; X
}5 f7 W. [+ u) ~8 h8 W# ?8 z8 u6 h
}$ G5 W' n! r7 y0 R* O) U
//临时数据保存完毕,交换开始
4 E s! j9 B+ m- x% I. I1 v for (int i=0;i<MAX_INVENTORY;i++): X( D/ f( c- W7 X( d
{# W5 a' h X( B" I2 U o" t$ M
if (dest == m_Item.nIndex)
; E5 ]( A2 X- H8 d! x {) l. m N3 w' A; A. V/ _
//id相等 则 改变对应的dest和src
7 q7 b. B# t8 R1 J3 C) g8 g m_Item.nIndex = nTmp;3 K8 S9 ^6 h1 O& A Q
}
# ?0 p, |# v( C. S! Q: `: k) c }! ]* |1 n4 Q. ?0 ]
}& \, a" }+ ~& s9 F0 R/ L
};
, M# e+ d m, m-------------------------------------------------------------------------% }' p8 W2 V( b' Z1 }
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ), r% O! \# ^& U! `* i5 a& t9 `
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
7 D& z7 Q$ D; R6 | t% m紧靠其上添加:
' g3 V# p: r/ y- x3 Oif( pWndBase == &m_wndMenu )5 I, K+ S$ g- L7 x y' }, S
{
/ J- o, [2 ?$ x1 l, a switch( nID )4 Z! P) v3 L9 ]: p
{
/ B. d- y5 J# N T. @ case 2:, g, M% ~2 n `7 W; @6 |, J* j7 N
{
5 P0 S, l& b1 G5 ~ ?, v* ] //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
$ R3 `" T7 \( y; P+ x if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
* F' }5 M7 O7 d. @2 k/ T {" T" u% G: F. a G* ?! n
break;
- f/ @8 M4 W$ ]8 S9 G1 E6 Z }( u$ G# r8 o9 r. q+ j+ W
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)* x) l# P) R0 r/ q& o9 x* S
{8 a0 |3 d( v0 |: ]! [- _- \8 R+ k& B
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
1 s, x; v" T& ^" [ if( !pItemElem ), H4 R% e9 u( S6 m2 x! J3 |1 q
continue;+ o/ b' }3 Q3 {3 ]
if(pItemElem->GetExtra() > 0)
) ] a0 } c6 v3 u, |/ _- Y5 X continue;
$ J: k% M6 S/ i, X if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) , L: ]8 k0 v: p
continue;0 u1 t" @7 h0 l$ C7 w
if( g_pPlayer->IsUsing( pItemElem ) )
- [$ c4 U$ V( L. s3 y continue;4 K1 t# q6 L; C1 R9 {
if( pItemElem->IsUndestructable() == TRUE )# U6 D2 R5 D9 [9 x
{
+ @0 c8 |6 j7 v: B9 H* g6 ` g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
. \' W+ R6 @1 s/ I+ \ continue;% b$ J" T3 ~' ^+ p0 L, t* m! d
}& S% \8 g7 R* Q" a
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
' S( ~2 e$ q/ U# L }
7 C2 n! k& u1 W' P# Y break;
8 v# e$ E! R0 Z }
8 @% _# G" ?* Z0 G6 ?. { case 1:
* ]3 X) D" M! i" M2 U4 p) j {
) z5 l9 y' g; e6 h //整理背包
2 b: @% `5 ~, R! N& `8 N# W2 i$ { //////////////////////////////////////////////////////////////////////////
6 O! P+ P; u. z9 ^ //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );+ y4 G# G. C. P7 s @
//////////////////////////////////////////////////////////////////////////* [+ {7 H7 q _; J, ?: j6 I
//////////////////////////////////////////////////////////////////////////
1 f @: q) m5 Q9 G. e CInventorySort* pInvSort = new CInventorySort;5 W2 S& h5 y& [; `. O
vector <sItem> vItem;+ T5 c5 J2 n- m& k! p) U( e2 I5 A
vItem.resize(MAX_INVENTORY);//初始化大小1 M) r N4 y4 o5 t
//////////////////////////////////////////////////////////////////////////7 O! _; Q# {. T0 A& J: @0 Y
//填充数据
' g. f( X/ d( K& }4 x- h for (int i=0;i<MAX_INVENTORY;i++)
( Q5 }0 w M N6 Q7 R0 \8 C {
% n8 u: T2 H& N! R/ ~ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);! r% |3 E0 L p/ T) g
if (!pItemElem)
$ S, z7 o1 q3 a$ i8 I' h, T {
3 `: c& L8 v* T" z1 S" B' M vItem.dwKind2 = 0xffffffff;
3 t7 g# ]8 {5 K& B3 B vItem.dwItemId = 0xffffffff;1 B0 a& m; B# L
vItem.nIndex = i;/ g' N$ N4 g' u( Y4 T5 e
}else {
5 p$ o* }6 G+ {$ `7 W ItemProp* pProp = pItemElem->GetProp();) E/ u! R7 }% t, q6 ?9 d7 c9 x
vItem.dwKind2 = pProp->dwItemKind2;
: k5 R! O' ?5 j( w I; z6 v vItem.dwItemId = pItemElem->m_dwItemId;, J6 y; \" A' a7 t" Y8 a
vItem.nIndex = i;, L- ^% {8 `0 V7 H( W
}
+ b+ [) c+ {. v6 u- U7 R- } //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
* N& a, v; u; f: C% ] } h* r0 D# I& y2 r* u
//////////////////////////////////////////////////////////////////////////
) B& `2 e9 L$ g3 K sort(vItem.begin(),vItem.end());//排序
+ Q# a( I) C9 o& Q0 E3 R) [ //////////////////////////////////////////////////////////////////////////
0 j( l( I/ }* [4 o5 ^( F2 t //交换
: i4 s1 m' u" e7 T9 Y4 x for (size_t i=0;i<vItem.size();i++)
8 ~* m+ J2 z, J/ s {
# C# s) l+ _ ^/ o# g2 o //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);. p* R0 ^- m1 K& R: D
pInvSort->Add(vItem.nIndex);
7 W3 C1 l' O; u( ^1 y }, }" D4 t% Y U' [* g6 ?8 d! q
BYTE nDestPos = 0;/ s* b9 w$ H1 }3 z( I0 P5 z
for (int i=0;i<MAX_INVENTORY;i++)6 ]) ?# P! _( h) ]6 w- g
{) o7 X0 l; F; ^8 U) u5 t# H
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
. K, S/ {- P4 _8 r5 U$ y. J4 | if (pItemElem)6 Z8 O! _8 _5 h1 R; _
{
3 V( I% }" o. M+ d8 A' k if (IsUsingItem(pItemElem))! h2 L$ r. L3 Q, V& N r
{0 g# a( j9 s# C+ E# }
//这个位置无法放' ?- f- S$ \9 m5 m) I6 @
nDestPos++;
$ r. w' D# Q0 p- H4 R9 a9 J( N5 B }
& F/ H' B( S7 B% H! U8 |4 l- {+ H }' D7 N2 O( ^1 C
BYTE nSrc = pInvSort->GetItemSrc(i);
6 @* c4 `. h$ {: V8 e9 `% V0 [ pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
: D# K: j6 t2 G+ c! c1 }% I+ } ~ if (pItemElem)
- f: y7 J7 d( F1 }' m9 P {1 k, a: ?7 Z, s0 | l
if (IsUsingItem(pItemElem))( V1 m: C& z, r
{. Q3 W8 |; Y# G" {
//这个道具无法移动,跳过
) q3 k+ g( R+ H: s: w* U continue;- y& [; I& G& P o6 y5 }3 z5 P* S
}
7 ?" y% M: e5 p1 H/ b }else{
9 o) C. e; J" @1 H0 G% R //空位置 不用动1 \$ E3 A9 Q& W7 |; I& w Y
continue;
% Q8 [( M( C& }' ] }
: |3 k4 @/ N7 t& @; Y //////////////////////////////////////////////////////////////////////////7 k" G* X& F8 ]: m" l$ l
//开始移动
+ p: }; N& A4 H! B1 I( P6 R4 q4 e if (nSrc == nDestPos)
6 F' ^* C% ^) @2 k# G: n0 L1 R% W {5 y+ k$ Q7 @0 S! u4 y! Z3 Y
//原地不动8 C) t) k c4 k
nDestPos++;
9 j+ l6 t, I* e/ g8 ? continue;
9 v; _9 B9 S; U k4 q S }6 T. `7 j' w" a% l1 {
pInvSort->MoveItem(i,nDestPos);
% n- E& J6 U7 O# W6 \ g_DPlay.SendMoveItem(0,nSrc,nDestPos);$ ^9 g( z$ d6 g4 h
Sleep(5);
3 J5 r7 U% c$ S //Error("移动 - %d->%d",nSrc,nDestPos);: }3 F. F- X M3 @5 `
nDestPos++;# T; m, w0 F! ?6 u2 V0 z4 j& z$ `1 ^
}" u2 ~+ e& V, h9 G: g( m( ~
//取第一个元素的信息2 m* P5 @- u }; f
/*, x5 c# y- [% Q3 V
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
3 ]4 }0 ~( G, \( k {8 D0 ]! n$ @; C8 x9 b
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);# h) Z- u( L0 S0 L. {: C" Y0 _
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
, L5 x9 i7 W% y! r+ V }
* K) c! e% ~" ^5 @6 _: I# _* R */0 C$ {1 y( O" X2 {' v' h$ B
//////////////////////////////////////////////////////////////////////////0 r6 J7 F1 p5 n( j' J. O6 u v- o9 C$ R
break;
. Q' ^# N, w6 A4 J4 N* ?4 V" o }
. t7 y: A/ Z& P, F/ K3 V }
$ e: P6 c1 o ^- ^! {* [}2 h* {# h- D4 H; I& r* Z# B& q
m_wndMenu.SetVisible(FALSE);
4 `9 E# N( f [6 w( E, G4 m& G: m/ |0 U, w% c7 q( L0 X# l) v# J
--------------------------------------------------------------------------------------------------------
1 w$ J+ T' g ]) o搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point): ~ m4 h$ I5 ~! D* c
{
+ G, R1 b6 E9 t2 bBaseMouseCursor();3 z! v; r4 j7 d" e- ^% W+ k% O
}
8 C3 H% B- b: J& n" P$ b在其下添加:" p9 o! N3 W" C, s
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
2 p' R4 y' u1 _6 M4 _2 y{
9 n; {" E5 r' M% Lm_wndMenu.DeleteAllMenu();4 O: v" F8 B7 {$ [% T
m_wndMenu.CreateMenu(this);; t) ?. | G* Z2 q* W9 _5 p
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包"); V+ y0 Z4 p5 V; `) O3 t: K" ]0 w
4 M* w5 g; `. I( Hif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
$ J2 y; t+ f3 J }+ T( \+ ~1 B{9 X- f: ]/ |5 y5 O) m0 h5 n
//P以上级别才可以删除所有道具
# `( k2 h$ ?* P$ ^- u m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
2 s% G1 _ Z! E' ?* O5 `: [}
' ]" z& ^/ |1 sm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );3 T+ Q* F; ~$ b7 b$ _
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
% o: a- M- \7 S8 ~: X. u( @! }m_wndMenu.SetFocus();
& h( r9 Z. b9 u3 P, l, a: o}8 a0 Q. p- I, ^+ r# n* p
------------------------------------------------------------------------------------------------------------
1 X' K' l& t( A h. r' ?*************************' Z; N+ g5 o a* T+ q5 X
WndField.h文件. y5 E! d* ^( a2 Y! t. n; h* f6 T
*************************
/ y" v+ s Q7 N c. t搜索:BOOL m_bReport;
; k- m' Z" [& p其后添加:* a' Z2 D L0 v9 O3 V3 f
CWndMenu m_wndMenu;, ?' A3 \! {: b7 `8 x% O/ Q; y7 _
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
0 S8 Y; q( `; C& O( L; ?# Y其后添加:
: g# h, N2 a& T! z1 F$ mvirtual void OnRButtonUp(UINT nFlags, CPoint point);) m! ~- Z' d1 @: x
3 `: z; o8 z1 t1 O0 C
* {7 l4 g5 Z6 C2 _7 |6 V9 C* k; ] |
|