|
|
源文件中_Interface文件夹下WndField.cpp文件5 f- [- E ]/ _
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )! F2 u1 C& j3 I, i1 S
8 ~2 ]6 L, E# ^ C( a6 N. l+ Q
struct sItem
% I/ C1 o( A" l5 H. S. m% e5 C{: t7 \, u0 k2 f) W" p+ h
DWORD dwId;
+ ?+ A. c! n, V! q6 z( e3 S# jDWORD dwKind2;
* x7 W0 v3 j% H8 bDWORD dwItemId;' G" m8 ]/ U2 a( s+ k b
BYTE nIndex;+ k! c1 S0 [# X
sItem(){
4 c" N3 Z: P g/ p" x. R* F dwId = dwKind2 = dwItemId = nIndex = 0;
9 f, r( {5 k+ D _ T}8 A/ u& ?& I# |7 Q6 z3 V, _
bool operator < (const sItem p2); D5 U% z% @8 D9 _$ P% s
{
3 N( L9 E; v' @4 n L" v if (dwKind2 == p2.dwKind2)
( |$ @2 D3 r3 @1 K0 Q {
* a5 L" v& v2 {7 m return dwItemId < p2.dwItemId;
e8 R) {) R% i8 W. V" x2 q5 f' X' } }else{
; f5 z3 v+ x* r7 p5 r return dwKind2 < p2.dwKind2;
. @& @+ [5 I3 i. Z2 y }
1 [5 j z0 Y5 `$ y. W' F}, Q: x0 L# l$ O
};5 L3 I! O1 |! y4 k0 M7 W% G
class CInventorySort
* P3 `$ C. C7 J& A2 M{
( t0 ^+ E; B& K% ]0 }public:( e }, D" X( D, t1 e
CInventorySort()
4 X! @1 Q- Z% u W{3 k1 E: W, q8 w, P
m_dwPos = 0;
9 H* _1 i3 M9 ?( _: Q0 l+ r) k}
2 ~8 L+ g; z/ I: o( n9 m. ?~CInventorySort(){}; m( [/ z0 y( j1 O( g- b9 b
private:
" A7 i0 E- }6 hsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
0 ^: `! F; _8 vDWORD m_dwPos;$ V4 c4 U$ `' Q2 ?* ^
public:
. f3 N' x6 A5 k) Y2 N) Zvoid Add(BYTE nIndex)
& `, G: N1 m+ f0 ^/ [{: h5 J& ~3 H$ }
if (m_dwPos >= MAX_INVENTORY)9 r: }- V% R Q2 ?
{! E/ c6 u' L4 U+ ?
return; c) y/ _' @* `
}
8 G( Y, C3 R v" B! [; K' a m_Item[m_dwPos].nIndex = nIndex;
- s0 r- t$ x# N1 X+ s5 ~2 e m_Item[m_dwPos].dwId = m_dwPos;
5 H9 Z) [/ Q7 u; X, R; ?' { m_dwPos++;( i# R5 p8 Q$ d) E/ [) s8 k
}
8 X+ ?! H- {- [BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
5 v% D5 M0 c: s6 v% F X+ K. ^{
9 u( {$ J) h# O: O0 b& } for (int i=0;i<MAX_INVENTORY;i++)
( W2 V- C- ^3 A1 q5 s8 e {
$ {3 ~: {' o4 e- G0 V7 B2 Z if (m_Item.dwId == dwId)
+ V2 D5 K& u$ x9 Z2 a {7 s# T/ z( _) z$ J
return m_Item.nIndex;
* x7 s1 B8 a. ?" m }
7 x- @* H) J) Q! X' v- z4 { }
& w, r* f/ @- L5 G return 255;+ Z3 h& {. V/ B! s- P5 ?) R
}
* _) ]7 L8 U1 ~5 jvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
# I! H+ o# [$ J, {2 q$ _0 |{( E& v! M# Y3 s4 j. o; z
BYTE nTmp = 0;
4 i* l" R7 c0 @# y2 H; l6 l bool bDest = false,bSrc = false;: k5 Y; t" ~1 r
for (int i=0;i<MAX_INVENTORY;i++)
% d" m2 F% t% s {, h: |0 g9 H# C" j. I" x
if (dwSrcId == m_Item.dwId)
9 U! X( t" F7 L, {6 E+ i {; [$ c# U/ ~- u
//id相等 则 改变对应的dest和src
+ K( O. Y8 u0 [* B3 t6 H: q3 X, P nTmp = m_Item.nIndex;$ ?; K! b7 R p0 S! Q3 d) D
m_Item.nIndex = dest;9 |* s# M, D$ [9 s5 g
}
7 q6 W% v' j; t6 Y4 { }7 q3 n# W+ ?: j) f* ?! v1 _( ~
//临时数据保存完毕,交换开始% U$ O1 { Y C5 p: p
for (int i=0;i<MAX_INVENTORY;i++)
' x7 M( {0 D- V {0 Q; E. n; d' k0 U, V
if (dest == m_Item.nIndex)
- J+ {. [# w9 q- k& Q {
4 h' F; _: r7 k' H1 [! ^ //id相等 则 改变对应的dest和src
+ M7 K2 v. p7 a+ L+ W l4 k- ] m_Item.nIndex = nTmp;* D1 o& {1 O5 v9 O0 A- {3 w
}3 q% f9 s) G/ e' W* P
}7 @! }* `0 A V" d8 H
}
?0 w% s$ F- N6 h: K};9 c& A. L% C, f( v# \2 P4 |
-------------------------------------------------------------------------4 W" T) z" }0 T3 B9 h+ j
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ). ]" _, `% X8 C- V9 Z. U, @; G
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
2 B$ x! k, j( F8 H) [紧靠其上添加:9 u) }. p) B7 |+ X
if( pWndBase == &m_wndMenu )
) o/ Z, s3 X2 H6 U+ |* X8 F{
( e& d" V* }5 }& ^4 y+ o! Y# P' \0 C switch( nID )$ e6 W1 @5 E0 [' m6 a
{
" Q$ f; d* q# z* j9 k case 2:
9 ?7 { i2 o3 p' T/ ]1 m- F5 g1 X {, E8 f ?( Y$ s8 n8 {, }8 |
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);6 z8 |( ^8 J8 b/ P
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
- D9 O6 O$ O! L+ x% P4 S% i1 u0 ` {$ b u( L n9 M# ]5 V8 z
break;; N( d, R6 u v* {0 E& w) t/ I
}2 _+ G5 ^8 B" v5 j
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)( X3 c8 Y2 C5 X1 W
{$ Z8 e9 i! }5 z' Q# u) S. g7 ]" F
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
& B$ f, q4 Y; D if( !pItemElem ); w3 H1 [ Z ?( n0 X% N3 l
continue;
) p4 s3 v, E2 Q- {( D5 G4 M" ] if(pItemElem->GetExtra() > 0)4 r- x9 u$ ?, n. \# P( }! e/ w) U
continue;
4 [- w* a2 ~; A- A/ J, |% [* _ if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) . J# h9 S5 a! f% m
continue;* i: [( ]9 ?/ \0 @$ {" M% N8 j
if( g_pPlayer->IsUsing( pItemElem ) )
/ z* ~; Z7 R; \0 m continue;
5 p1 x$ U9 C% u) N& A, _ if( pItemElem->IsUndestructable() == TRUE ): z2 c8 O8 u6 p& A$ m: i' Q! G+ Y
{
0 B* E# I% `0 I6 r g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
6 V# C5 }' r9 V! X9 _/ {6 t continue;
+ t! e7 h7 T$ C }% G6 C" |2 I( R5 `1 R) c; ^
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
/ ]8 G+ ^. C/ f } a0 \' k* ^' |/ b
break;
$ R" ?5 p$ H0 c/ O- F }
! Q/ X+ x& W' H; s case 1:
$ ^4 z, d2 ]% s5 f! g; F4 ^0 M {: y; ]) X5 D: D1 U, S" E6 }
//整理背包* |+ i# L9 o8 A# v( A/ M/ w
//////////////////////////////////////////////////////////////////////////
+ z) p5 n8 ?0 q8 T2 [8 l' I //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );. x% Y6 k5 P- A, B
//////////////////////////////////////////////////////////////////////////
: S" Y3 Q0 L3 \5 n //////////////////////////////////////////////////////////////////////////
& N0 `) H) M4 d- Y2 D. k. w5 ` CInventorySort* pInvSort = new CInventorySort;
, ?' x3 ~5 y4 ~# M2 P vector <sItem> vItem;# T5 v, G1 Q3 g" v
vItem.resize(MAX_INVENTORY);//初始化大小
& w2 {$ z6 Z9 z, @9 A1 @ Y/ f //////////////////////////////////////////////////////////////////////////7 ^; v4 m, d/ y6 s/ I% I9 B- Q! o
//填充数据% O4 F& y9 v6 p. i: ~
for (int i=0;i<MAX_INVENTORY;i++)
7 \8 `6 F# D3 y h7 _ {5 y3 O$ Y0 Y- \* e. _) ?, @
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);" m" E; P0 X$ s- K; A; k2 ?
if (!pItemElem)1 R1 k2 b: `! Q- N5 H" ~( i+ e6 K& Q
{4 |& U7 t, C0 @2 C# R
vItem.dwKind2 = 0xffffffff;
+ E- G0 B- m, q9 x vItem.dwItemId = 0xffffffff;8 j" q/ t2 H$ j i | y! \+ A
vItem.nIndex = i;+ t* b( V4 `5 C5 @5 w1 F
}else {3 L/ a3 r. K1 i
ItemProp* pProp = pItemElem->GetProp();* x/ F% d* L; w+ Q
vItem.dwKind2 = pProp->dwItemKind2;& n; Z! l" B1 u' w' D6 [3 F* h
vItem.dwItemId = pItemElem->m_dwItemId;
: K/ [- D9 D K7 r0 K vItem.nIndex = i;
( Y% g9 V6 S( h1 ?. V5 H4 \ }
7 Q: h: C; @; O8 z( ^: w! e/ ^4 G //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
! s; }# Y- V# Y0 q- k" x }7 N( U. a. g) K" K+ M. O4 {
//////////////////////////////////////////////////////////////////////////
6 K f3 l: B2 B% h/ o: b sort(vItem.begin(),vItem.end());//排序
! w7 g. M9 i8 x ////////////////////////////////////////////////////////////////////////// c& |- ~6 p* @- X, l4 s
//交换5 i _( K$ G8 w5 f9 J( v% v& M
for (size_t i=0;i<vItem.size();i++)
|' u6 s7 X0 j: A {
$ ~: M1 \+ e3 n3 X: O //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);# {% S' a/ @1 ^! K& z( b
pInvSort->Add(vItem.nIndex);
, P' k3 A2 R! B+ j9 A: R5 I" p }
, {6 @3 [) O: q+ _ BYTE nDestPos = 0;$ ]8 R/ S5 B8 [" i3 p
for (int i=0;i<MAX_INVENTORY;i++), j" U& G( Y3 [6 K- k7 P
{; y- S$ x5 J& S
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);4 e, p X9 ^3 {5 r
if (pItemElem)0 b. r0 Z8 }: D! |) P- s
{. [9 Q" {) D6 d+ t; K8 h; D V
if (IsUsingItem(pItemElem))2 Z$ l$ j( t5 p X- C5 Y! k
{& T1 ~7 r# o# V3 d* x" k# t9 H7 A
//这个位置无法放
t @6 @' {: ~2 u) N8 x9 k0 } nDestPos++;
P9 e8 T5 k0 g D! s+ n* e }0 \9 a0 W3 A7 h8 h% y5 _
}* `2 S7 [6 J; i7 W t' d, o
BYTE nSrc = pInvSort->GetItemSrc(i);
6 z0 n1 [6 k4 N$ l- P! d pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);! r5 g& v# s5 D6 a% y5 V
if (pItemElem)- O% l n( i1 }9 L/ S8 A; E
{* M+ o$ f; ~& l
if (IsUsingItem(pItemElem))
1 P' X0 \' ^5 Z! T( F {
! r# Y; B9 S6 |) D" q: F //这个道具无法移动,跳过
) j8 y* ^- n, ]6 p8 i: Y I continue;7 j; t- l V; b
}
$ K- l3 N* G3 h5 x }else{4 ~ _9 A- ?2 l3 q
//空位置 不用动
# z3 H& e1 J! ^+ \' h/ r: q continue;
: H2 y+ k" M1 ?& a }
# J1 b _- t7 L$ }; ?9 F //////////////////////////////////////////////////////////////////////////' C4 g, H5 @3 r% M9 ?4 [2 n* w
//开始移动8 d; C# c/ c% b8 b& r
if (nSrc == nDestPos)
u _0 R ?: j+ l {
# }: C& p9 R- k0 @" B- Y& l; U //原地不动
3 x( P9 L$ J2 ^* C, S' p. e nDestPos++;
5 f: |, g1 F' S, r1 L$ ?9 J continue;
, A3 r9 t. ^0 W" Q4 a9 t! T }
: A0 J0 l! e0 q6 A5 O) X2 V$ g/ g pInvSort->MoveItem(i,nDestPos); O. r p" a) A D4 J8 J7 P2 A {
g_DPlay.SendMoveItem(0,nSrc,nDestPos);2 w/ T' x }' w% @3 h
Sleep(5);- h! s8 m" L3 d4 d2 Y# \- ]
//Error("移动 - %d->%d",nSrc,nDestPos);# X8 H1 z; m* }7 a
nDestPos++;
, ?) t. p0 \" b" X }
9 T1 A5 s1 X1 \+ n6 f, f* x //取第一个元素的信息/ _4 O' @ y% w; u& n3 M
/*
/ }% C% H9 B6 E0 C5 K( u$ Y if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)$ `: B4 g) D' B/ }) S3 O
{& O: ~, R' c; s' E& l! G
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);4 l8 h& R: G f* _* A' j5 M0 E- j. \
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);4 Q. u" ~( I' Z% s8 ?( l
}# d, h2 I( j6 A; j) L
*/
d( f2 F2 v, q6 d //////////////////////////////////////////////////////////////////////////7 Z C' R5 k5 R$ {
break;# f$ c" m/ [+ s: ]6 B
}
. m y b; x" B6 I, I }
; _* o7 h! r4 u7 W( Y2 q: a}
* c+ \! r7 C. \# jm_wndMenu.SetVisible(FALSE);
3 {" A$ a9 d/ V' U4 D+ h; @! W4 L! q b5 [
--------------------------------------------------------------------------------------------------------) i. c' D. `0 t: F( z; X/ o
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
3 e6 M/ m1 {+ r{) j0 N5 s: S# M, h8 O; S6 \; G2 V
BaseMouseCursor();7 j# v1 s1 e$ H2 B4 X3 l+ z) o: @
}; @4 \3 S, d3 K" t
在其下添加:
& [% `3 p. e/ K8 E, Lvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point); J5 A4 F; ?0 Z: T9 J8 h
{
6 b! V! R7 f1 o' jm_wndMenu.DeleteAllMenu();4 }1 M% w- p3 c7 ?: _& P
m_wndMenu.CreateMenu(this);* Z; W D' a5 U( S
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
" ~8 E b5 O0 \; J/ K' r+ [
5 `+ o/ y+ F- z3 ~! A s3 Z+ n- F" pif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
: n' l4 f4 K$ ^1 g, c{5 t9 p9 Z7 ?, }* N/ p0 {% g9 F. H; w
//P以上级别才可以删除所有道具
& w+ }: g4 m. ^ m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
$ }0 S1 K8 r% B# k! P}* u& Q7 m! n: ?: @6 S# ], G& Z0 I
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );! J& r, u1 G h& j7 d
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );) f8 L& G& R7 m, n5 k j7 l
m_wndMenu.SetFocus();
7 X. ^$ h; j8 g4 T}9 j a/ X: S9 G, f0 d( F4 w5 a* T6 `# U
------------------------------------------------------------------------------------------------------------# _: x0 t% v' ~# ~$ N
*************************( [/ w' k( l& s% l$ \" }5 W, ?/ e+ x
WndField.h文件
' M: t5 E8 {# Z9 E) H0 }- t*************************: l1 {8 b5 e5 v% J3 O
搜索:BOOL m_bReport;
$ P3 k) U( _* o6 T r% `% c8 w其后添加:' {& X( ]4 I+ F _
CWndMenu m_wndMenu;
" b7 a, G6 b0 m# V0 U搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
9 Y, w: e0 q7 Q7 j0 A F0 @其后添加:' O( ^3 @4 P7 Y% D. Y- o5 A2 b
virtual void OnRButtonUp(UINT nFlags, CPoint point);
: k% H" {# R; M" z" z
]' |0 e% M5 W1 x P& B
; K3 _# m: H2 D% ~+ S3 n; R |
|