|
|
源文件中_Interface文件夹下WndField.cpp文件1 p% J- k. F! V
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ): c' v7 p& e/ ^' `# Z$ W, y% a
5 v$ i# k. Z" m6 x
struct sItem
& |$ \6 O: Q1 l{
% \$ N. K5 V: E$ o6 xDWORD dwId;6 u( p8 E4 w% h* X8 g
DWORD dwKind2;
7 a: H" W8 R' k9 L6 ADWORD dwItemId;
d6 c6 g0 x9 ^( S2 `8 C& GBYTE nIndex;* B; w8 z) c0 ?+ q
sItem(){
0 ~7 S3 t7 A4 u [3 T dwId = dwKind2 = dwItemId = nIndex = 0;0 `4 Z% i, C% ?) f9 e
}+ r6 {0 @4 G6 ^$ U% O
bool operator < (const sItem p2)2 A$ w+ O! Z* G% u* c r4 ^
{
! t6 t7 _! M$ s2 r if (dwKind2 == p2.dwKind2)- A. ~1 [+ T2 l7 Y9 c5 K
{, ?& v7 ]) V, n9 z% |8 Z6 C
return dwItemId < p2.dwItemId;
1 ?7 s/ ^/ d1 g3 c9 k }else{
# ^( u$ s( N" l return dwKind2 < p2.dwKind2;5 j. N( ^' o% P' b+ z/ q
}
5 S* v" ?" \& x}
) @+ ~# l5 C8 `1 a- s, s};
1 N. ]+ q3 d8 F+ _1 N4 ?class CInventorySort
6 Q; H% g, {9 u- b# x+ P/ `{2 h0 `1 u4 V' `0 r7 u
public:* K3 O, S% d+ ~) U1 l0 f2 e
CInventorySort(); L" r1 p/ D, f- [
{
# y2 w! z+ e9 \7 A% E3 ^ m_dwPos = 0;2 ^. d8 V |! S+ @
}
5 }% O% O3 B- w' y; e~CInventorySort(){}( P* [# T1 @ Y' o7 `
private:
+ Q* N1 d- f& t/ IsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息3 C3 e2 v U3 g% J9 R3 b/ n, v
DWORD m_dwPos;
3 U/ X# I: P9 [0 J4 C7 ipublic:
0 G# ], Q! X2 D+ rvoid Add(BYTE nIndex)8 I0 i# k W' F1 g5 ~( s3 _
{
% S- r. X+ [) e9 j, t: b3 G if (m_dwPos >= MAX_INVENTORY)' m7 O3 P# q! l! [$ w9 h' u. [
{
! O* E! ~8 b, O. O& U" z6 U return;
+ p8 O+ I2 Y* X7 M7 @; X% M x6 x }8 y M& z+ k* K8 s8 c) `
m_Item[m_dwPos].nIndex = nIndex;
! u4 K4 M3 R& ? m_Item[m_dwPos].dwId = m_dwPos;
0 R: j/ Q2 }, e! ` m_dwPos++;* o' O8 y; M# v& l
}
; f" c; R2 A8 D5 n3 v8 K" ?BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列 A' \& p( r% a
{3 Q0 i1 l$ y1 X' O4 }# q
for (int i=0;i<MAX_INVENTORY;i++)
! _1 p4 _2 J2 O {
1 F, d5 i |& {$ u! D& v9 B0 V if (m_Item.dwId == dwId)
2 S" ~. |+ h" @) @; Z3 T {8 \9 X0 X% K1 y2 P# H8 a$ u
return m_Item.nIndex;
- \8 P9 {& V6 n3 m" O! t4 ? }
, k) l& `! G6 p1 V }
! d* G. ?- s/ C0 _# h/ j: f return 255;% o6 x4 S0 l! Z$ \) S8 B6 l I
}: {- Y# M4 p3 U, a
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置5 F$ [' r0 C8 v; Z! b- G
{7 Y' h0 q8 f+ B+ _$ }
BYTE nTmp = 0; @- E% i* c6 p5 `, r2 ~6 |* ]
bool bDest = false,bSrc = false;" t6 Z/ l2 f* s+ x) e0 J1 o! Q+ a
for (int i=0;i<MAX_INVENTORY;i++)8 A2 n5 G/ a: s1 E0 s. ~
{- U; U2 X" q" y, m
if (dwSrcId == m_Item.dwId)1 x4 I) p$ g: z& i/ [7 v( w
{- J e$ J$ Z' t# ]
//id相等 则 改变对应的dest和src U. @# n7 Y% D7 r4 g! b
nTmp = m_Item.nIndex;/ m. p1 f& [1 l( F4 i
m_Item.nIndex = dest;
& d0 i' {# a, ^, j; f }: D3 G1 w) H% M2 L' H/ ?, g6 h
}
4 \& V' M) E9 @) S u //临时数据保存完毕,交换开始
9 _/ ~, [) r' q+ i$ f for (int i=0;i<MAX_INVENTORY;i++)
' q! ^" L8 {- w {
! F; f! C$ w; |3 q2 w5 I$ n0 t Z if (dest == m_Item.nIndex)
1 L! y+ g; O4 u n( f {0 {3 m& P ?" v
//id相等 则 改变对应的dest和src5 U' X' @9 _. V9 ?6 L, f! f
m_Item.nIndex = nTmp;
6 a* Y1 U; ~8 P$ }* I. ~1 c }
' Z% W! P1 X, M% |1 R/ n }4 t( ~# i" h, h( F- ?
}( w( I( K% |! B! d- @
};
# |% v# e# K# h-------------------------------------------------------------------------
" Y, o' S& n# J; a' P依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
$ @0 i) e: B* ~搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
, }( k/ h" D1 h0 @, F紧靠其上添加:
( V* s; _0 W! Wif( pWndBase == &m_wndMenu )
& m3 d4 R; g l% V" y- n, _6 A" V7 C{, [* Y. G3 U3 N) |" n
switch( nID )! u; F5 Y; F8 o- F
{
9 T& ~- U5 q! H- c% A. [- [# v case 2:" E' i- E$ K- ]
{: m: ~/ b; G4 |# ^( s( a
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);. z e/ B( l& S K, x/ B% J
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
* k2 ~: L) [: }$ b8 U$ ]0 W {
% S: t' n F" I# y& u& W break;
* r2 Q! @" o/ |9 B7 \& s8 K9 W }
, b. v! l# p, n" _$ k; v, t' ^' @ for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
Z7 j. P% ]9 |/ o5 u5 w) T {
- m( _5 m' k7 ^8 K/ z+ O CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);6 U) H6 F$ i# [
if( !pItemElem )1 ~$ O( n! N/ S% _$ m+ q( M1 V0 U
continue;9 n+ A5 e9 J8 z
if(pItemElem->GetExtra() > 0), N$ m9 i. b: c6 H( @' ~6 A
continue;
0 {# ?' u3 k, X$ b- |% F7 r& F if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 1 a7 ?+ _" n* `
continue;
: Z8 m) W9 v9 e6 x: h# M if( g_pPlayer->IsUsing( pItemElem ) )4 v* {& v9 x, U. T5 U; u
continue;
0 X2 S1 Y( H8 W5 c5 q if( pItemElem->IsUndestructable() == TRUE )2 R+ e) Y9 l9 q O# P2 d
{
8 n$ b& |) J8 N5 N g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
% l1 ^( b; t+ k9 p" M& E continue;
4 ] n5 R: V" C/ T }
# _2 {# D- h. h& ?+ [9 r* j5 m' P g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
% F4 F- I8 r% |5 q }
) K. E# h& r0 u5 x break;
7 m3 P, n* \* | }0 [$ \3 e0 ^" A# q a7 v
case 1:5 ]# F& y1 ~6 ?" `
{2 W9 i- Q) C6 D4 _7 z3 l+ M
//整理背包+ i" c. B7 k2 p& `# ]1 D9 I1 f
//////////////////////////////////////////////////////////////////////////
" t9 O9 a6 T3 D% `9 u+ j2 q //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
9 z4 [! p. ~* v: B& x //////////////////////////////////////////////////////////////////////////4 Y9 D5 g6 U }; |
//////////////////////////////////////////////////////////////////////////3 E8 V5 o9 h! b: t
CInventorySort* pInvSort = new CInventorySort;
8 |1 t, R+ M) m+ Q vector <sItem> vItem;4 Q6 t- B% e* |: ^# Q
vItem.resize(MAX_INVENTORY);//初始化大小; j# S' A% C) b, I t1 `
//////////////////////////////////////////////////////////////////////////
/ b8 a, N7 L# ?5 D7 r K. h //填充数据
2 p& H! |% j+ J G. B( {, b for (int i=0;i<MAX_INVENTORY;i++)4 W; X( Z( F* ^4 O O
{( W* I$ ^& u# Y I0 H" ^' E! C
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i); J# X4 ~0 _0 N+ C
if (!pItemElem)* ^4 U) j/ @) }4 q1 T
{
+ |$ ^$ ~; s0 J4 R5 s- O vItem.dwKind2 = 0xffffffff;
9 [4 ]8 \ e) T; l1 v" H vItem.dwItemId = 0xffffffff;
0 M4 v7 T8 k9 t/ W/ p vItem.nIndex = i;
5 `* T8 c; c0 D( ] }else {
2 O' }& D# r y K1 {: w, B4 n" j ItemProp* pProp = pItemElem->GetProp();; o/ h7 @2 j8 C# o
vItem.dwKind2 = pProp->dwItemKind2;
V: S5 C" a7 {* g D vItem.dwItemId = pItemElem->m_dwItemId;) T, L+ Z M$ c- H/ X( j
vItem.nIndex = i;
) A- } n4 y2 L, Y; C8 R }
! z6 [$ o+ D4 B+ F/ I //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
1 [2 g$ e$ o; e+ K. K }
" m2 j2 }9 q) x+ @- C //////////////////////////////////////////////////////////////////////////
1 N! h, G+ q% |8 Z8 `3 Y" J. Y sort(vItem.begin(),vItem.end());//排序$ o& V; f% Q9 x9 Z: U
//////////////////////////////////////////////////////////////////////////- p( y$ N+ V- [5 m7 I: E
//交换
+ @8 K$ m/ v1 ~/ b7 @& g( L for (size_t i=0;i<vItem.size();i++)3 N( X; Z# `& U" n5 @9 m$ l( u5 h4 V6 @
{
! ?- x& T6 B) y% j& _- i //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);* o) B4 l2 Y3 L& S. }
pInvSort->Add(vItem.nIndex);
/ B$ g7 B/ J/ a0 v) ^$ | }! o, q# b: k' b$ m2 n4 D
BYTE nDestPos = 0;4 q6 N5 a8 O/ ^0 [" k3 u$ P
for (int i=0;i<MAX_INVENTORY;i++); P0 [+ \ W& t( x4 s
{6 A: `0 u% J6 j/ r
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos); E1 Y+ M; t' A) M! ~, x* E
if (pItemElem)
7 s& Y/ R! z1 ]+ C+ d7 l {
9 H2 J- f1 W; H) _ if (IsUsingItem(pItemElem))$ E, A0 T. m: y
{
- a" f8 g& O) ^/ H* E //这个位置无法放
5 f2 o8 Y, @% |& K. {6 J nDestPos++;! K: a% K% c! l1 c, E' G9 P: q
}
* K$ H D+ W1 C% h8 r. h6 ?7 ^ }' I; W# E, i, L7 C+ Q9 W/ g
BYTE nSrc = pInvSort->GetItemSrc(i);) ~8 U2 D5 w. y2 U: U+ |
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);, S8 C6 `8 t5 K. e. H& ~
if (pItemElem)
' `# Y Q1 G4 B8 C2 `/ F# ^ {- x5 q# [% P2 G+ D' S
if (IsUsingItem(pItemElem))
% U- I- l; o$ t1 J6 ^8 l {) ~- S2 X$ `8 {
//这个道具无法移动,跳过% x I6 z1 ]; W
continue;
+ T! L# V) P6 X ^, d }% F; i' p$ r6 T" r' Z
}else{
$ u) k/ P6 M1 n% m //空位置 不用动
. {8 }2 G* g% t6 k- w* ] continue;8 E% O7 @1 g1 S4 z( a
}
6 J7 N) c/ K# `/ {# Y8 @+ b //////////////////////////////////////////////////////////////////////////
& {4 e+ @1 ?6 L* O //开始移动; B. _; a4 O9 O
if (nSrc == nDestPos)9 X; J8 x4 S! ^7 k
{- `# x# \, u; T9 d* V
//原地不动
3 h0 o7 i% ~+ z8 W1 y" C nDestPos++;% L/ e8 t) U6 Z9 b2 |6 i0 p7 q" L" k
continue;
2 `( Z( a5 e- G }4 c$ A; ~6 v. N& \
pInvSort->MoveItem(i,nDestPos);
9 M; h/ f% F2 C7 P g_DPlay.SendMoveItem(0,nSrc,nDestPos);
% b3 {- K% g2 T4 z. e$ y Sleep(5);- q9 O, q* P1 H$ B. g2 U) u+ v# V. V
//Error("移动 - %d->%d",nSrc,nDestPos);6 h) W6 o# \0 S, L
nDestPos++;
' U. A8 E0 H3 a& w. Z# }- ? }
- D: o# O8 H$ S% J1 J //取第一个元素的信息% C2 H7 G1 n& r& q% V' [: m
/*
3 v" H& o" X$ k) C3 K4 r9 K if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
# M k7 y' ]* i: V {+ F! ?- `" G. z. L& Z0 E
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);! ~" ~% K F* I% Q( B1 k5 R
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
! W3 s4 \6 Y$ [- ?% J }5 u4 D" I- q8 L6 O
*/. X! ^1 L% ^; g3 W3 q# `
//////////////////////////////////////////////////////////////////////////
j l% a8 x1 O( i3 E break;7 }: \' y. O) w$ V6 _( E( {
}1 k) y! y9 y* e# W
}
/ X* P: U0 ^ t- Y}9 T5 V2 y2 s& A$ g
m_wndMenu.SetVisible(FALSE);* f. \ U4 a% a7 u* f& e( w
- o4 q; X( [# u) A& Q( j--------------------------------------------------------------------------------------------------------
* K. e4 q. r! P5 O搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
# E. [* y1 R; Q1 H) s{3 h& `8 s3 s4 ^4 f& P0 V
BaseMouseCursor();+ A+ |) X. a* g
}, O2 B! e2 B; Q5 w! X$ v! V2 h0 ]
在其下添加:
7 M( j$ z1 O8 ?8 s W0 `, Vvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
# v( ]9 S7 ?: U( Y. |9 r5 b{$ \% T' b4 |* |
m_wndMenu.DeleteAllMenu();
! B$ D9 [% o: L. dm_wndMenu.CreateMenu(this);
# i: Y* b" W; O3 Tm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");+ v! H* s/ N# t
/ j) A. H2 y; i o& r' Z
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))5 }+ G- D M9 o
{/ ^ T7 m, `+ z& Y0 V- E# O
//P以上级别才可以删除所有道具7 b" ^- V. i( s8 M$ b6 g4 A
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
" }; x8 k5 ^& X! z5 t}
) u- n; F/ i5 d' w6 F' \m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );' ^0 z9 n4 ~3 J3 ~7 W
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
2 n/ X# D- _6 A3 pm_wndMenu.SetFocus();4 M( G7 J: {& h( u4 U* J! m1 p
}' U% g; \' T! q2 q
------------------------------------------------------------------------------------------------------------9 Y( J) E; ]8 K# k* b. o
*************************- R% u1 d) _& ~8 |/ D
WndField.h文件. O3 M# `* G2 N% L3 ?5 N1 c! {+ o
*************************
0 ~3 q/ S$ y0 Y. [$ D! P搜索:BOOL m_bReport;
0 s2 K+ {1 S8 _. z9 D- W, z+ o其后添加:! T& ~: ~: X: B: [0 y; A7 `* {+ N3 @
CWndMenu m_wndMenu;
6 K, Y* Q( e$ w: `6 B4 q5 |' p搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);3 c. M2 |% {- x+ d4 A
其后添加:
3 ~ Q# v0 S9 N- [$ v: ~+ R; vvirtual void OnRButtonUp(UINT nFlags, CPoint point);$ M" @. K: X) X1 K5 q+ D8 N
6 V; X" v7 [. m2 T+ H2 w
# S5 f* f/ r" t- S |
|