|
|
源文件中_Interface文件夹下WndField.cpp文件( h3 x" R0 r* T# T8 ?
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ) }: E# l7 c4 j. \
( l4 }2 h& {2 K& Y
struct sItem
3 C0 j8 E# C! m/ N# k, G{
2 ?& E6 G) k, ?) MDWORD dwId;/ v0 L, X. W; n$ _, c- h2 a K, U
DWORD dwKind2;
0 ~" K( l. t: p# P/ ]% O" QDWORD dwItemId;- a6 w- Y4 R& l0 ~5 ?; Z% [# f1 G& s; I
BYTE nIndex;
0 Q: Q A0 \; a1 `7 k$ \9 `- osItem(){
5 S$ ~7 c% H8 ~5 a. _6 f; v n0 o! u dwId = dwKind2 = dwItemId = nIndex = 0;
2 b; a' h% X! F: h}1 h8 ]+ z5 I8 T6 p- X5 m# `5 _( ]
bool operator < (const sItem p2)
* @& Q9 M8 o" G{& |/ K7 [$ J: l3 T1 Q8 U/ M! i
if (dwKind2 == p2.dwKind2)$ X% }# [# E5 z- r8 g
{
, H, L- w4 |( v0 X& Y: x return dwItemId < p2.dwItemId;
2 J# E* u4 v0 W8 g) O }else{
1 X8 p* k) K9 D$ p ]8 e% M: k5 u- [ return dwKind2 < p2.dwKind2;' J7 t" p' v$ c
}# q# t1 o) s8 Q' T: N
}
% ^& s9 G* t. g1 R# I. E; L};
h+ g, h$ e k: O- c. q0 k4 ]class CInventorySort
- }3 {1 D# e7 j: B8 C% v) U{, E8 J% N( J& s f2 O- c! ?
public:
0 w/ M% \1 H8 h7 NCInventorySort()
3 C8 F% a* ]& N3 V{5 y, v ] T @' E7 s. }% {
m_dwPos = 0;
$ `$ p( w! U- q2 }. _# y& ^6 C! Q4 ^) Y}+ `" w, r8 e3 `
~CInventorySort(){}
% q, t8 d* l9 U' r9 ~private:% b3 ^( P+ v+ Q/ ]# l0 z( m4 G
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息. q# S7 H' X( I+ i* K2 h1 y. g
DWORD m_dwPos;' U8 U) u: {9 E; U. \* K0 o( A
public: s% w8 E, S( d. @
void Add(BYTE nIndex)
! @" U8 h' }% n{
* ] w% u0 O( W if (m_dwPos >= MAX_INVENTORY)- j- p2 e* f2 _4 W
{
. ^+ b W1 V3 K: @4 v4 I return;
0 i U/ W$ R+ V }
) i4 r# b( M+ `, d- P5 h m_Item[m_dwPos].nIndex = nIndex;! B+ r9 P; N0 S$ \0 E
m_Item[m_dwPos].dwId = m_dwPos;
) v! ~% G! E' x1 ^% z' \0 H m_dwPos++;
; w O0 A4 D5 Z}* L' f1 R6 B! M
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
4 V) @' I B8 ~0 n/ S* h{' ]6 F7 J5 o7 Y2 s! A6 |
for (int i=0;i<MAX_INVENTORY;i++)1 Y0 p1 V2 o7 M; P- n: c2 s' Q
{
) @+ w7 G" i+ N6 E" B if (m_Item.dwId == dwId)
% O+ \) y8 E& |$ W8 q {9 S \# r8 p3 i+ m; f6 \ j
return m_Item.nIndex;
8 |5 j3 J. j& V9 l4 S }
6 F. ^, H. _, [' w# `" a. t' f }9 T9 W3 L% h/ r) z* Z% h! K
return 255;
3 R8 u0 ?9 k" D: I}
1 S) R3 U5 ^5 l3 ?( S) ]void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
# t0 S) v1 I' [6 q{
9 Z4 V O( `. ^- x) u5 X. Y, P BYTE nTmp = 0;
3 X# V1 v. d0 y bool bDest = false,bSrc = false;
9 u. z. h5 I N1 s( }4 I! M for (int i=0;i<MAX_INVENTORY;i++)1 Y& ?$ X" g- A5 C: v
{$ E6 f: u8 H* A& \# S8 C2 z2 z
if (dwSrcId == m_Item.dwId)0 U- Z- h5 M- e
{% g1 E/ i$ Q3 U( ~/ E
//id相等 则 改变对应的dest和src
: p# ~7 z& i0 | nTmp = m_Item.nIndex;) D2 r- z' d+ Q5 [
m_Item.nIndex = dest;
) C: I1 W" N3 D! a { }0 }$ x, C6 z8 h8 L
}1 |: R% M& S; M% a% [" _6 p
//临时数据保存完毕,交换开始' a+ v o# ]: i. I( n0 h2 j
for (int i=0;i<MAX_INVENTORY;i++)" X6 }, d+ _. `! j* `
{, k" t i3 j- P5 V' } b
if (dest == m_Item.nIndex)
0 o5 k I ^& C! l {
4 X; K6 Y9 e0 ^, |* Z. d: B //id相等 则 改变对应的dest和src
$ h) U: r7 F- Y m_Item.nIndex = nTmp;( b4 ]) u. c' M
}% X. K9 H2 m, ^3 W0 |( o4 o
}
6 {% y1 ~- z; E. E: r; I}8 z9 s& p0 z, j% @% \
};4 G! K! s% n5 ]7 c7 f$ d
-------------------------------------------------------------------------
7 w1 J; D- D2 ^ M依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
. h8 w. p1 K1 l# J搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
$ h w, `; F Z' p4 W紧靠其上添加:) ^: }& I3 u# _$ H
if( pWndBase == &m_wndMenu )
1 s1 P0 f0 ?) U" r" d& n; k{. p, F7 \! \0 @( W: o: ~6 e$ p
switch( nID )
1 h9 |/ k& _5 r" ^ {5 ~$ q# @9 H2 [9 I9 q, Q) t
case 2:
: k7 q4 }/ K: F {
! p+ o$ z" X! [$ }1 W //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
: a* z5 R N- l, X" y if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))6 L' x7 M' L5 D+ Q" C8 B: o
{# s8 y: a o- y7 J* C
break;; o0 v! `% f2 z( m
}
* ^( E/ r' W% v3 a8 d$ } for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)1 H" c* q E0 d5 j. ~9 l, G; B+ S
{
) M3 c( y* [3 R! I* v1 u CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);/ [2 ~# F _8 ]2 X4 `: s9 g
if( !pItemElem )( |3 h8 p' G3 H% s B' O
continue;1 _, K9 p# B# a1 U% t! `
if(pItemElem->GetExtra() > 0)
6 b7 h: j; y$ Y9 R continue;0 y: r0 a3 i6 s7 F$ ~
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
7 C. r9 I* ]4 B' P9 s: q continue;
: J; m9 F2 p- Z0 c4 W4 u! D" ? if( g_pPlayer->IsUsing( pItemElem ) ) B* Y6 A P! Y2 w/ R
continue;
# q, t, p |% }; s9 n if( pItemElem->IsUndestructable() == TRUE )! v8 j! }4 A' o
{& G+ J, ^. v; r/ }" Q7 V+ E! D& p
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );, c Y4 h) U; L4 }+ H4 ^, L" s; o
continue;7 [2 K- s1 K+ R; |
}& W3 }& @1 q% Q( X7 L
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
; f/ m; v/ a u$ W8 c }
- `5 ?( m7 u% x+ k0 y3 v d break;
* ^, \1 g$ k7 K1 V }: |& u: q( B* y
case 1:
" ^) K8 L/ E% I4 q {
* I. j9 p- [ ?' z5 x8 X# P //整理背包9 ~0 r; e2 V6 Q9 R y" c
//////////////////////////////////////////////////////////////////////////
+ t% F% `& w$ ]- x2 |6 k //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );: A9 F0 ^4 g! t8 S8 d
//////////////////////////////////////////////////////////////////////////
7 _' P! h9 i7 E //////////////////////////////////////////////////////////////////////////' o0 p* e' m/ q. d2 G
CInventorySort* pInvSort = new CInventorySort;8 I, v1 D: j, j9 e5 \2 s4 l! a4 Y( H
vector <sItem> vItem;
% f! A1 d/ I6 E5 i1 r+ ] vItem.resize(MAX_INVENTORY);//初始化大小# a& |$ v: b5 K
//////////////////////////////////////////////////////////////////////////! @' Q0 v# S1 V
//填充数据
6 [% _; B( Y' l' a A for (int i=0;i<MAX_INVENTORY;i++)
5 m! e' m; m+ _7 `- ~6 g {/ W3 [+ G, s" B% W- p
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);7 {2 M' j6 A+ e: ~& z
if (!pItemElem)% y) s5 ^0 h: k9 R, i/ I
{
5 b2 V. E/ m6 q vItem.dwKind2 = 0xffffffff;* p/ d! {# F, ^$ j. x: z4 h
vItem.dwItemId = 0xffffffff;% _* a- _" D! U4 j/ s4 @
vItem.nIndex = i;; t+ `$ l6 Q9 x+ L2 e! D
}else {
) ^& `. X/ Q3 a' X8 e; k g1 o* _ ItemProp* pProp = pItemElem->GetProp();
7 e0 |0 v; `7 r vItem.dwKind2 = pProp->dwItemKind2;
* Y% G- x2 f( i A) X vItem.dwItemId = pItemElem->m_dwItemId;
7 q3 W! B* M4 ~, V vItem.nIndex = i;: L3 s$ R- u9 r" J/ t% o, h: B: d
}
( S; F/ x- c5 }- a2 s, S' I //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);8 ^+ U& E- r$ u, X/ j% l
}
7 \8 X5 k4 h4 c4 a( @0 B1 J) H: s //////////////////////////////////////////////////////////////////////////
# R2 C0 l! T6 M) m% z: V; y sort(vItem.begin(),vItem.end());//排序0 M9 y4 m: n! B. _, p
//////////////////////////////////////////////////////////////////////////; C. a- G' @, v {6 \( Z
//交换
6 w. q! i& ]# g" ^1 p for (size_t i=0;i<vItem.size();i++)$ F* G0 o, F9 c4 F" v9 m
{1 y- A2 Y5 E9 P3 e' f* z# f
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);; D+ S2 o* v/ H- H) s8 w7 n: `
pInvSort->Add(vItem.nIndex);6 A4 s3 a! x6 z( a; `
}
6 |2 C3 x) D+ \8 j7 j' ^ BYTE nDestPos = 0;$ d. `+ @- y7 ~# Q& E
for (int i=0;i<MAX_INVENTORY;i++); G" n' p+ c0 L# X( M
{
" z" z- V: B+ p* h: o% e CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);, H, _! X4 Z& d6 y( Y0 I- T0 V4 u6 k
if (pItemElem)
& f) Y1 A& b% C% V' j; w {1 z' ]; V( V% n) i6 G$ c% d$ S
if (IsUsingItem(pItemElem))" n0 b6 }/ o5 T8 {
{
" {' x' W6 e; {) D //这个位置无法放
7 C; X9 R( d" {" E! I nDestPos++;
& F9 u& y4 f( C/ _" f! w6 F0 b) X0 A }
: L0 I" F2 w2 M" b2 R/ l- a }
* t' f, c& n) q r5 D BYTE nSrc = pInvSort->GetItemSrc(i);, Y# _/ K1 p0 f* y) i
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
; Y: e: A6 [' J9 T if (pItemElem)
% g8 O P, B- D9 j+ p7 M" R {
, m/ q$ c" B# p1 a if (IsUsingItem(pItemElem))
2 ~5 ]. t3 ^: a# p5 |: E6 Z/ U {
+ z" u$ @& |; h$ t& l8 O! b2 m$ w //这个道具无法移动,跳过2 j( @1 x O6 b2 l$ i, Z
continue;
9 A- q$ h; Y4 Y1 @8 H5 Z }
$ z# n- A' u# ^& A: M& ^ }else{
: t! Q$ X! r# p& j" _% h- h //空位置 不用动" I3 ? O2 E, e9 S( L# J! q0 |, K) A
continue;
}. h" F/ Y+ Q* W9 F }
% Q' V0 {8 F) F- ]4 e0 E* h //////////////////////////////////////////////////////////////////////////* |! k7 e' I* J8 b4 I8 w% t: j8 Q/ b
//开始移动
4 ^% m# c/ r- q* i9 `3 v if (nSrc == nDestPos)
; c# Q. X9 s& x! m {
( S% n( ^, [2 g //原地不动
I: S2 S" N6 W/ x( l: j7 i; G8 L# T nDestPos++;
0 v& ?* o! I) Q6 k4 b continue;7 E5 Q9 N2 w6 S$ @
}
: k& G# s8 ?; l( |* g) } pInvSort->MoveItem(i,nDestPos);1 ^ Y" n$ V6 B A9 V
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
2 w) k1 n. |7 u" w. m! u: n3 r* X Sleep(5);
' d$ ~9 \9 |5 ~0 }6 d1 c //Error("移动 - %d->%d",nSrc,nDestPos);
+ J: @, W5 b/ @' i, O' ^- u nDestPos++;2 G2 r" u: X4 g7 X# ^7 W
}: l9 p, X3 m4 f0 b- v: N
//取第一个元素的信息
" _3 o1 R4 L( ?% n# K/ q# Q /*! j* w0 a+ k7 Z! l3 u
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)# U- `2 D* h; [# P" t5 o
{
* u% ^$ b/ Y0 N2 R/ L$ B Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
^0 i+ f4 K) k3 _: s g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
. ~4 u7 G4 [' u }
) Q/ H; j9 _1 q2 N */7 q# x/ _" b4 S! w
////////////////////////////////////////////////////////////////////////// v1 G+ C1 y; q( Q9 x* u
break;
0 {& j" K7 g% W$ y3 i5 \& ~1 ~# ^ }1 f4 W% N F2 p5 Z
}
9 h0 S% k3 X8 l9 f}
. u: E! f" T. t5 Z1 C hm_wndMenu.SetVisible(FALSE);
5 O( n# _0 {! V7 g% U1 {
8 P$ i/ `( s0 E' R) q--------------------------------------------------------------------------------------------------------
) V z; N0 @: u8 u6 g2 S$ _, x搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)* k# ~1 u6 g+ F! {
{
. h$ G2 P7 q0 }8 E$ p ]# c; ZBaseMouseCursor();6 v7 I9 X O1 t4 A. }, n* V2 i
} w" q5 I# o& X, [$ F8 F
在其下添加:
) }, K' T1 N( T G0 V7 F; Uvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)8 ?$ {+ o) b0 M5 G8 B7 n3 [
{
J& j8 ~: v2 w. g. p1 {m_wndMenu.DeleteAllMenu();
9 l1 ?3 f9 K1 U k6 g1 e7 zm_wndMenu.CreateMenu(this);# e6 @- |1 s2 O
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");' _: i8 Y1 }) e* l9 w1 s% g. P$ H2 y
5 V( f% _1 E+ J& H6 J- Sif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))# \5 ~& t, K. D
{
" e7 B8 X, y, G" B! y" I4 l //P以上级别才可以删除所有道具
' _7 E5 N6 y9 s4 n9 F* T m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
% f: b7 N: o0 b) w- D" C}
/ G k% P5 V2 S' i5 N6 d+ A; `m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
* l3 y9 }3 @* c5 {' j9 G& K+ qm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );1 G; R0 w5 \* Z
m_wndMenu.SetFocus();* K, S- i5 M( o' b0 g+ h* {
}5 i2 G. q- V1 V$ x# _# ]- I
------------------------------------------------------------------------------------------------------------2 Y: w+ T. i. \* d: X
*************************% g$ N! h# {' t5 G+ [, q6 _8 s( A
WndField.h文件/ z- X' G1 A7 N% g/ I. R" ]
*************************+ t, Y+ [0 W) R8 I5 }
搜索:BOOL m_bReport;
8 O, V9 S u5 r! S2 f( G+ V+ m; O其后添加:; O3 ?8 y+ R/ t( l: u
CWndMenu m_wndMenu;1 W9 P; S, n6 ?
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);2 r& T1 q P e5 t* m
其后添加:0 R8 ^% x9 z/ }0 A
virtual void OnRButtonUp(UINT nFlags, CPoint point);3 j" j d) `4 V. F' Q
0 f, f( x" b) \1 h1 [; x: j+ Z$ k1 |9 `$ Y% I7 Y
|
|