|
|
源文件中_Interface文件夹下WndField.cpp文件
! A. n: e, a7 r* @/ ]搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
% W" k6 p$ {% P! M% T4 d0 k7 _+ r
struct sItem
% s; k% Y# _' B{0 T8 L7 X# B0 Q$ U8 x7 ^4 k
DWORD dwId;, @# x5 @2 ?* C$ |
DWORD dwKind2;$ ?8 l5 M8 ~9 I0 x' ~3 d
DWORD dwItemId;
/ A- ]7 ?: h; t% eBYTE nIndex;: z' k" E3 y t" w" z4 f
sItem(){
6 v1 J& o7 u& n( f8 Z& U! e dwId = dwKind2 = dwItemId = nIndex = 0;4 U( I5 U& i1 s+ l' h
}2 v, n# a) Z' z- ?4 m
bool operator < (const sItem p2)" Q9 }0 l9 M7 N
{
7 ~% ]$ f; n9 |+ }$ R5 g6 ?- j' k if (dwKind2 == p2.dwKind2)1 w) n. E: U( N8 Z
{
" ]1 l. c$ z- O, a! r6 w" A$ t& U& V return dwItemId < p2.dwItemId;
" Q( Q, T- n* a }else{
% ^7 z" u) i! G0 b; | return dwKind2 < p2.dwKind2;
" p( _. _% ]0 I/ b/ u5 r }6 |0 k1 R, P, h" G
}- P3 c, \& H& `. Z/ \$ t5 M/ u
};+ w2 V3 s; X/ I$ G. o. ~
class CInventorySort
: U+ l- p/ O4 H& D3 V{- i( q, K% u/ C, k( E
public:0 t; M: j( H4 D% _% S7 w7 h
CInventorySort()/ u6 F- E! |9 d2 L
{8 Y, ]9 I3 P! h% R
m_dwPos = 0;
1 X+ S# g- |% N" \% Y+ a* ]}4 p0 \+ W) C) Q, A& Y+ }. x- y
~CInventorySort(){}' ^, M5 k/ I! p7 G
private:0 `& X) ? M4 }5 _
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息' q: g( \. ?2 ^3 E6 H& e0 }1 ~+ Q
DWORD m_dwPos;
& t* X B" e9 V) n4 _% ?public:
2 W' z! {/ Q0 avoid Add(BYTE nIndex)
/ {, }' {; F6 e- _/ _{% K+ C+ p1 f# _5 P! w% G2 i+ V+ x
if (m_dwPos >= MAX_INVENTORY)
+ E" E, s5 M ~6 `. k! L" X$ l) G {
3 z @( G8 A h return;
# ?$ U3 K* M/ Q% h. s5 y+ @0 S }
, l( f7 t' d) t2 H m_Item[m_dwPos].nIndex = nIndex;
' W3 c9 o0 ^' V% F$ C, y- q: Z m_Item[m_dwPos].dwId = m_dwPos;
6 N% M( M* N* g# \ m_dwPos++;
1 u- l8 \1 P( }2 a# y}
, W* ~" T2 i T- C: k; |BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列, {& f# q, V# T% e$ L, h& B; m
{+ Y, u7 d3 s4 r7 h% c T
for (int i=0;i<MAX_INVENTORY;i++)
Q0 a" i, P9 C6 S$ e' j: m5 x {" F# [/ M) T2 G0 M8 k
if (m_Item.dwId == dwId)
; s$ Y* r3 S5 q0 K9 @. ~5 Q, X. g {
: y, W/ m) H1 v) l) W' q return m_Item.nIndex;& D" P' I+ k# d2 h9 U/ s& {
}
6 b/ U. \5 v) [5 a$ m n }+ f$ z1 `+ f: g( [% Q/ M0 D" R6 k
return 255;
1 x; F( _6 h7 d) F6 B1 r}
' M3 V c$ e9 n) w! Tvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置' d: U8 W# Y' t/ Q3 m$ p
{
/ v9 E/ p8 r9 X. _! w: Q& D; T BYTE nTmp = 0;
/ }1 G, F' i% T, b( E" x7 s6 @ bool bDest = false,bSrc = false;5 A7 {4 r8 t$ q" a7 U) o
for (int i=0;i<MAX_INVENTORY;i++)) n) R" N% j8 n. r+ s+ x) b
{
. P8 B/ z/ Z* l `6 [1 a! L1 z/ @ if (dwSrcId == m_Item.dwId)! |6 T1 M8 A9 S4 q. w
{4 j! K& d# s) w+ _/ J, U! M
//id相等 则 改变对应的dest和src
* D% Z0 A/ C8 o& ~ nTmp = m_Item.nIndex;
% K; ?4 H3 S2 e6 P$ \ m_Item.nIndex = dest;# p! q# A9 ~5 ~" q% Z* L
}7 S- R9 B; X- ~/ g0 [: S
}& L6 N5 _: Y& X, }
//临时数据保存完毕,交换开始- J# h2 v7 R+ I5 g; u* Y
for (int i=0;i<MAX_INVENTORY;i++)" X& H- f+ f. N' N& j t, F% J
{/ C6 B3 |, Y q a4 a
if (dest == m_Item.nIndex)
9 P* O& ]" X6 _ {
* ^ H0 D5 u+ O1 q //id相等 则 改变对应的dest和src
- o2 ?; Z( D5 N: K, H3 Z m_Item.nIndex = nTmp;( G9 s( f3 Z* ~2 g) j9 m
}/ A( N$ X1 q3 y
}
* ?/ j! ^8 P6 Z( f4 {" | @% X- V}
5 N4 T) U( Q( v3 ]1 T0 r" d& [};
! `& |/ S6 g. d+ D. V7 T3 F-------------------------------------------------------------------------
& l, d# s) g5 {4 n依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
, z' ?! S1 ]1 O搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);. b+ y1 c$ w* ]6 j0 G0 U
紧靠其上添加:
" g' M/ c4 X) v" I$ ^. Kif( pWndBase == &m_wndMenu )
5 M' N0 f; P7 z @{
[1 R* \& i0 w% j switch( nID )/ A5 f7 }. g5 _) H
{
( K+ p- ?) x, }5 T1 S/ h! G* I case 2:9 U8 O' v6 A7 G9 ?0 b# R, u
{* |7 B8 R+ |5 A6 Q' F0 E! ^. o
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);; k) l2 ^* i1 T9 e( L2 D
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
" z- _) S& h/ I9 v3 X {( v+ T, i6 q* N- h3 J7 ~
break;
1 s4 E$ J) H# c5 X. _! Z }+ A2 G% a y; G8 Q; _
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)& Y, A, ^3 }. q( }( G* s! y% R
{
) y0 \+ U3 t7 H& E CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
0 Q6 j* j( r" _' @4 _/ ~ n0 r if( !pItemElem ): J& N |3 E( s$ F9 q1 j( j
continue;. y" K6 A7 o6 @3 U8 }+ \
if(pItemElem->GetExtra() > 0)$ ^. c7 a' \8 J& u* [+ _
continue;# z6 {8 d1 L& Y6 D
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
; o* w; U- Y, m0 H( Q( e continue;# {0 h: `. E) A
if( g_pPlayer->IsUsing( pItemElem ) )
6 r, w% R5 E9 ~$ S% N0 T continue;
+ V: U& K0 k" @' y* g2 B$ a9 v) V, d if( pItemElem->IsUndestructable() == TRUE )! c9 H" |) w2 q3 s8 [
{
* @# M+ d9 D0 k2 Y- G# J g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );: ?7 h) _7 I3 y; |" n; c5 J
continue;; `1 d. c. Y4 K0 n
}
/ c$ Q7 Z3 j/ q O& ^- d g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);! I& Y0 {( b2 b* B% `7 d4 X
}
; m. @. p. y' z, I9 l3 K: \ break;4 X8 [" A& i" z
}* e$ o& K( M& ^9 q4 J
case 1:
1 T8 i. R3 u: A1 z% a {
/ F: _$ D' g9 N( j1 }: D3 B //整理背包
; _$ V; l5 b* k o; P( T! K* I //////////////////////////////////////////////////////////////////////////) G4 W9 y7 ~1 T
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
) _/ q6 s, P" R1 N& d! F { //////////////////////////////////////////////////////////////////////////
8 v6 F! n5 l5 i2 w //////////////////////////////////////////////////////////////////////////. Q+ L% Z8 a& x/ l" R
CInventorySort* pInvSort = new CInventorySort;9 L4 a4 ]0 n# ~) f9 n
vector <sItem> vItem;3 \9 L$ y* T: U, `/ y8 j
vItem.resize(MAX_INVENTORY);//初始化大小
8 V3 x) p& y. s) U( t //////////////////////////////////////////////////////////////////////////
, b( ]! I* `/ a, Z3 g Y //填充数据
" }# n6 c& ?6 ?$ M" \# K for (int i=0;i<MAX_INVENTORY;i++)
6 D( ]# X* I; k( X: I; r' g% ? {
' d5 ^* r) ~% r CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
& ^. {; v: F8 C3 b if (!pItemElem)1 X+ ?- W. d: f% z' o# v) s
{
`) e5 O' s; Y3 {6 Z vItem.dwKind2 = 0xffffffff;
% g) E4 U6 X8 z5 q) E- P w) v vItem.dwItemId = 0xffffffff;
. w2 O! l) W, L7 W# @ vItem.nIndex = i;
2 @2 ~- Q( e3 u1 F( j1 V1 N: q) R }else {
9 r- y6 }& ?+ W- T, g2 s ItemProp* pProp = pItemElem->GetProp();0 X" O6 i( j& ^& ?: x2 Q
vItem.dwKind2 = pProp->dwItemKind2;
( f1 J) S+ z; e$ h" u7 r vItem.dwItemId = pItemElem->m_dwItemId;2 W e" M: m1 \. g
vItem.nIndex = i;
2 X3 J: f/ A5 _/ |) ] }
" Y/ q. G+ w; ~ //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);- I% M* I5 K; ?4 S
}6 G! [- a4 Y- }" K2 q
//////////////////////////////////////////////////////////////////////////
+ L; x2 e* w4 l- R2 d, r5 x) f sort(vItem.begin(),vItem.end());//排序( T7 e6 y) f3 p& Y8 r' o
//////////////////////////////////////////////////////////////////////////
0 P2 r* E1 V6 I" g4 J( j //交换
: g8 J) f6 j7 W) S6 K2 H: l for (size_t i=0;i<vItem.size();i++)
1 K1 L9 v% u/ d2 z& g5 W1 _ {
7 `- X8 ?, m: @$ C) T/ V //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);$ x# e9 a" `. B% Y( e0 v, |- s X! i
pInvSort->Add(vItem.nIndex);
" m4 {3 I# p( y" ~: j' v- Z" H$ w }
9 \5 r& s" A& C$ C8 w BYTE nDestPos = 0;3 V- p5 p! M- \. _
for (int i=0;i<MAX_INVENTORY;i++)
$ n$ Z) n7 ^) p6 a: ~ {+ Q x% @( \! B
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);$ r6 N8 _& T" c# M" |8 g% s
if (pItemElem)
# n# K* {7 C q8 S3 D- g {6 { z1 b1 K3 r; Y) k$ x. a. _
if (IsUsingItem(pItemElem))
3 \ S# T# \# _- m/ l {: Y/ s) p+ ?% V+ p& L
//这个位置无法放. E0 R) E: Q% w8 W
nDestPos++;0 ]* u; m# i1 L
}5 ^5 i7 w, A+ D3 w& ?+ p. |/ s
}& C& ?1 |! J5 k! C4 Y% |$ H
BYTE nSrc = pInvSort->GetItemSrc(i);
' p* n* D: L. ?; I% B8 g6 V& T pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
- W( F, W! _7 X, o: p" ~6 l if (pItemElem)7 O/ i; V$ z/ t& t: _
{7 ]& W# s- j+ R4 {& V
if (IsUsingItem(pItemElem))
! L2 E9 j- ~) X! {& N {
9 x/ n- j, Q' J, p) e/ A" \7 m //这个道具无法移动,跳过. D# B# r% _+ `; I0 x
continue;
" R2 n& U6 G2 \5 R m }) r. K/ x1 i6 B# d3 L
}else{
# V) Z5 w; A; ~0 P3 a //空位置 不用动' {$ T8 `2 ~5 ~( v
continue;
# L/ q8 ^' }, V0 g V }, Y/ f }4 t3 H. {
//////////////////////////////////////////////////////////////////////////
# t) E* S2 z* F/ n' U' f, A9 n //开始移动
: W M0 L9 r$ f7 e if (nSrc == nDestPos)% a! |4 M2 y- f
{- ^+ M/ G1 W8 J! f& j
//原地不动
) X7 ?( k) H# I' A nDestPos++;7 N% \9 q4 F5 i" t
continue;) q! B% f$ k; J2 ~
}4 Z! R- C8 R/ i7 @5 v
pInvSort->MoveItem(i,nDestPos);; k9 B4 ^; l7 g
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
! a8 U2 I+ m2 c3 l) ]' r Sleep(5);8 }. L4 f6 X8 E0 f1 c
//Error("移动 - %d->%d",nSrc,nDestPos);
4 s7 T) @6 l* H' T1 s nDestPos++;4 J) n9 a1 ? P. I8 ~
}0 I' A. y# h" d: N. X
//取第一个元素的信息" g/ c; x) k B* N, P) V; t
/*- t4 C# f% Z/ B9 @, \. E
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)% S/ x- y9 r5 T/ K! c# R
{$ w! ^7 l/ X7 a' p3 }, M
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
7 \9 h+ b3 [0 r9 N) y+ |% `" b g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
9 P% e- ]8 |" U }% B" o( Y9 Y$ J2 w- ]6 m
*/5 p' x8 p; f( O
//////////////////////////////////////////////////////////////////////////
) f d" r; R3 E1 {, k7 O break;$ j9 n3 |( T/ W
}" y, r9 H8 K! B9 f
}
; w( Q$ s, z: h}( h/ @4 N+ O, x! z
m_wndMenu.SetVisible(FALSE);
6 O" k( s$ w/ X
7 R" }$ i$ z* M/ n- R--------------------------------------------------------------------------------------------------------" U z* P- J8 P9 c
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)* W1 p% A( x" v) O
{
Q5 H2 d) r. T& FBaseMouseCursor();
* H* z2 Q8 N8 z3 v/ A- y}9 q- l6 l, @& X/ Z& E. C
在其下添加:4 k, x! ^6 j4 g0 ]2 v
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
, a& x- p: C9 K; Q. a7 Z/ W3 y{
5 T, d" N! I! q3 Um_wndMenu.DeleteAllMenu();- }$ j- P( t- N$ K" u; T
m_wndMenu.CreateMenu(this);' K3 }- ~% k' ?9 y
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
, C. x# A- O; g. O, M* e; q4 T i: {# t# ~; H6 C
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
; ^ q* s! F; z9 U- t+ ?{) o. i O& S( K2 Y0 e
//P以上级别才可以删除所有道具
3 V* c$ R0 y2 M' J6 k6 S m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");+ k$ z( f! g6 X% k) t' P
}/ r9 Z2 ^6 o, }* U& X
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );( G2 \3 ?% H8 u A
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
+ {3 s4 E- S* ?, ^1 ^* Om_wndMenu.SetFocus();2 s$ _/ N5 h$ s5 B
}
9 O, N0 B- U9 D4 K( y------------------------------------------------------------------------------------------------------------
+ W6 O3 V) g) Z! H5 n+ p0 _*************************" `- m3 `1 |# x2 \
WndField.h文件' M: F& f" ^" v) A+ z r, ^. X
*************************
. ]: z* i/ L' Y4 t& x搜索:BOOL m_bReport;2 J$ t9 j8 U8 t: g4 z$ j7 ?/ p
其后添加:9 x* W" N% s* l( `
CWndMenu m_wndMenu;
' c& x5 k) Q' b/ F: ?搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);' u' l* U" o- X9 x
其后添加:; L$ o7 P3 i1 X E" s
virtual void OnRButtonUp(UINT nFlags, CPoint point);8 j5 ~4 X9 Y$ J6 O1 _
3 {/ h+ ~0 _# L N3 ?- H. o
6 ?5 Z8 ^$ Q* t |
|