|
|
源文件中_Interface文件夹下WndField.cpp文件1 W) p2 n$ A5 j
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )& Q. |: ]0 l4 Y4 s$ S6 `
C2 u# c) E9 `5 `! A
struct sItem3 P5 K2 F- a+ E7 z' Z% p. _
{
: V) U8 }& A) d% u) v5 ?DWORD dwId;
. j* P8 C3 ~& h7 {7 }# x) G! {DWORD dwKind2;% |) f8 m, Q8 f
DWORD dwItemId;
8 W- }: s- j- mBYTE nIndex;
; X. G+ s, d4 N# @1 jsItem(){
8 ?# ~: O1 d W& d( \8 O3 D dwId = dwKind2 = dwItemId = nIndex = 0;
- k' r" }+ b, Z4 K& Z# N! E}: ~. w$ @# b% k. ]; r
bool operator < (const sItem p2)( U& J5 x: O8 X
{) N- b' z; v) h2 x: M/ t6 g, o& ?3 F& Y
if (dwKind2 == p2.dwKind2)0 X8 ^, n' E3 }* d( n
{ c9 ~# p1 s. b2 G; i( _4 H E
return dwItemId < p2.dwItemId;
: @9 x' P9 g0 T; w" W, Z/ j }else{7 b# F' ?3 n" B7 v( c. M. |) Q
return dwKind2 < p2.dwKind2;2 Z% Q0 Z( @- [
}
2 [7 ^" U- f5 o! m2 o}; z* A: }1 @6 I3 R$ P
};
4 B8 t2 h% e- Nclass CInventorySort7 Q- N b7 ]) t2 t) a
{
4 b D2 Q& W4 e6 {& e4 Upublic:! o: g8 m) J0 T, b
CInventorySort()2 h( Z" ]% }9 ~! O+ W" l
{
! |. n: I e1 @, c q! S& g m_dwPos = 0;, P9 g' y' A. u7 G8 F
}* z7 K$ V3 T+ D- s2 a8 [+ L
~CInventorySort(){}( D7 i" V" D& ?# Q9 z+ k
private:
' j/ C1 ^1 D2 B& w2 m1 S& ~sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息% e8 z# |! k8 {5 f
DWORD m_dwPos;! o* V! q8 M) d2 S, ], E
public:- t$ z e9 k) R6 T( E
void Add(BYTE nIndex)
! x' e# R$ y$ N* a{+ e. ?& m; N, ]5 @( m4 I4 r
if (m_dwPos >= MAX_INVENTORY)/ w" J( W$ }; |0 ^
{
: N; T g$ B: a8 W return;+ j+ H) ~ b H- s1 \$ A, a9 s P! f
}
( S: x: ?) X# f2 m0 E' A {( J% k+ P) H6 e m_Item[m_dwPos].nIndex = nIndex;
3 Z4 X4 V% P7 n" i4 g0 w m_Item[m_dwPos].dwId = m_dwPos;
6 L3 [& T3 n) J: [( H7 G# y0 m m_dwPos++;; I" c0 J5 B! J" Y9 c
}
. `# x1 Z9 v$ j6 a% |BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列* L, b0 D* E+ V" w/ m
{: p" p% r9 O% b6 U
for (int i=0;i<MAX_INVENTORY;i++)8 u6 e ?" Q t. S% Y/ E
{3 y C) e- {" ^0 d3 C- N7 U1 N# V `
if (m_Item.dwId == dwId)' [, Q+ V: R: ^
{6 C6 ^7 q, W' b/ K! w9 H6 Z
return m_Item.nIndex;6 v* @$ c, e5 U, z7 p. v- J
}
6 {; ^% ^8 X1 k9 l }
4 Q s' F: b; O! c2 g return 255;6 I& C9 s7 B3 P4 ?3 }
}0 o' R) [( L7 X/ x8 E8 G1 K, R
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置( n7 M3 t9 m. W; ~: v
{7 E' j. a% p+ p5 J7 `/ l
BYTE nTmp = 0;) a1 q5 I! S0 c7 B
bool bDest = false,bSrc = false; L/ i1 U* T& i& v9 t, m
for (int i=0;i<MAX_INVENTORY;i++)
- H; Q0 @/ L/ o* r1 x% q {3 A5 k# ]8 j! I- F2 z7 E5 Y8 }% `
if (dwSrcId == m_Item.dwId)
6 @" ?: R3 J2 c5 M6 } {
4 T! t4 u, w2 S9 ~: u0 i1 F //id相等 则 改变对应的dest和src
5 C3 U4 l, d* p% W6 Z0 g nTmp = m_Item.nIndex;% U- }0 ]( U7 J2 R
m_Item.nIndex = dest;& u, z+ n) g4 ]% k' t' ?* Z
}- x& i5 j% f$ _, W0 v. s0 l
}
! k8 @7 E7 j& Z C$ ~- F1 F9 S //临时数据保存完毕,交换开始+ \/ I" ^3 G/ y* G/ l) a6 E
for (int i=0;i<MAX_INVENTORY;i++)& i- X- M* B8 T4 r
{
" O' a% R F o/ i; j if (dest == m_Item.nIndex)
) ]8 {; V" b, J! v1 e! N6 X {; F" _# p/ L6 Q/ J5 C! {' T
//id相等 则 改变对应的dest和src
4 h2 g, R- m7 D M* K } m_Item.nIndex = nTmp;6 E. H8 K( S! s5 }7 I! {) {$ f
}8 H9 H1 {: r7 R% }2 r" W, O- g
}. o$ y5 J2 w# D+ b' D3 _% Q* j ^
}3 ?6 o& U/ K d3 [
};
$ F" a% S. Y# v1 `1 T, n$ A* z( z-------------------------------------------------------------------------. }2 r1 m8 @- e5 p* `2 S
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )7 V/ i+ a! p1 E: p" @; n
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);" M0 C# Z4 i. P
紧靠其上添加:
7 o f+ [! X H/ W2 m2 }/ `if( pWndBase == &m_wndMenu )
# Y5 a; t7 }! {{, X- D1 [7 B. F+ d# b; X
switch( nID )
, K( ]2 o: X7 j% n4 M) ?, F/ [0 o {
. \, b) h3 _0 E0 }- ~6 h& T case 2:+ f: U5 x: D: j% C3 M4 Z" V
{
8 a' B3 |6 X8 O) y, N5 G //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
+ i' u [7 |- f% S9 |) ` if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))& u( F. {- K6 v; O$ ?$ ~6 \6 `$ j
{
* Y5 ?" j6 P+ \; K7 z j2 W break;
7 U: e5 [- g2 h2 J3 z }
- i5 b) W* t$ }' v$ u( Q2 R for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)' e/ O- }" t0 N1 x6 d8 P& y
{
" O: u- }0 z$ R- V0 [ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);& J* y# C8 H! e
if( !pItemElem )
1 z* y( N* A% k. ?! V continue;
# g5 {$ P$ ?) [/ m; U3 H3 Q( [ if(pItemElem->GetExtra() > 0)2 M* {& Z+ u$ f0 K
continue;+ s+ F; p: P4 L
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
8 x- f# g' O( O/ U9 ~ continue;
: j# `+ _7 E9 F, Z P if( g_pPlayer->IsUsing( pItemElem ) )
8 t) A: I5 f; a/ n continue;
3 A7 M; @' t, f! e- v7 U* Z if( pItemElem->IsUndestructable() == TRUE )# X( D& ~4 v* s( ~$ H# i1 w
{
, i% C a( R5 X, ?. V( I( { g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
$ D D1 i5 T" D! B7 C/ @ continue;: c5 f3 c* e3 [" o% h
}3 j9 W2 I* N1 Z9 K% O4 u: Y- f
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);1 u; T, S& ^- S8 }2 T- D( }0 e- g) u
}4 c% P7 J; R0 o \# M
break;8 ?2 ]! G- C& `1 H) r2 v- ~, J
}
% E7 u( u; j; n( Q0 ?# c( b3 K case 1:
o# ?2 C1 J! B9 J3 H4 @ x Z4 F7 ? {5 D+ Q# y- U: S- [# }4 h- |
//整理背包1 p) t' P# p% E) d( J
//////////////////////////////////////////////////////////////////////////
) G$ Q, V g# J7 h5 {% y! Y% C; ] //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );2 O* t1 G6 g: {: w( X# D2 _* C
//////////////////////////////////////////////////////////////////////////% T/ H+ ~4 ?3 D# x1 j
//////////////////////////////////////////////////////////////////////////
5 u! g! `' ?' A ?/ ~ CInventorySort* pInvSort = new CInventorySort;9 r; |! ?( L4 T
vector <sItem> vItem;
! C) i6 p. q1 ?8 V7 x3 w6 v vItem.resize(MAX_INVENTORY);//初始化大小; `$ t; k$ d+ [. B
//////////////////////////////////////////////////////////////////////////
7 n6 K- B3 m2 j8 r9 @ //填充数据
3 Q. j! [! E8 j$ _% W% q- [ for (int i=0;i<MAX_INVENTORY;i++)
# S( ~4 R& u, p6 j7 Z3 d& Y( D {
7 y# @7 _$ X! ]) Z CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);5 d# w% K# @0 B+ K3 [7 ]+ j
if (!pItemElem)4 k% e+ ]: o) }; s9 m; ?7 y. X: t+ Q
{
' D" A3 D! ]$ p2 i) @# F vItem.dwKind2 = 0xffffffff;
- N. b3 d [ Y+ i+ Z' }5 P vItem.dwItemId = 0xffffffff; X3 V4 O0 b. Q# [) |2 f$ [7 i' ]
vItem.nIndex = i;
/ u5 v! M, a" m5 }. w% E }else {
C# Y6 b/ s' V0 x$ g/ e ItemProp* pProp = pItemElem->GetProp();/ P7 |6 I' D; |" B3 m' d% _' |: {9 A
vItem.dwKind2 = pProp->dwItemKind2;' j! l5 C5 V3 O
vItem.dwItemId = pItemElem->m_dwItemId;* x$ f( G, \, W; }
vItem.nIndex = i;
) M: }" V! i2 H) w- @ }
& p% s: I/ k1 ^$ S0 v% X //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
+ G1 z3 r! ^" z5 Y; Y }
' x5 D3 v# e1 |" c0 C( f //////////////////////////////////////////////////////////////////////////) k- o9 i8 a! g7 s" t7 I
sort(vItem.begin(),vItem.end());//排序
: K' R/ P! p7 J$ l //////////////////////////////////////////////////////////////////////////
/ c) N/ T/ y, j7 Z- d5 A //交换
- O Z; ]; D/ A# p% c5 m for (size_t i=0;i<vItem.size();i++)
" p2 ?( c+ U5 l# c6 R$ g: k {
& w6 w" i3 S4 ?! e" \1 V //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
, F2 Z/ g& s- A* Y2 @ pInvSort->Add(vItem.nIndex);
) ^9 G+ J' u; ?$ f. I }
' K+ Q% p" Q+ z5 n1 ^0 c BYTE nDestPos = 0;7 F0 ~7 R/ M: l3 h: n6 a: H; I
for (int i=0;i<MAX_INVENTORY;i++)
& k" ?; n: z$ Y r9 T {
; [# g# J7 @- _, S CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
3 S: Z( ?" l2 s8 M5 s if (pItemElem)6 g2 A t/ J& n* p" _. e
{
) q k5 {, o4 v* Q$ A" f if (IsUsingItem(pItemElem))
; W1 P% u& f5 ]% C3 M {- E1 ^" u; m, k1 @
//这个位置无法放8 R. D, {- G) L* Z5 Q
nDestPos++;: ^% B$ F2 F1 }, H l$ `5 }
}
. E6 `0 ?: `- E, q& m } t0 Z! B3 W. g0 [: s& a. s/ {$ H9 M
BYTE nSrc = pInvSort->GetItemSrc(i);2 x4 ~; I$ D& k; p8 ?1 P: T5 l! N- _
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);5 _% v1 Q' y- k, B( g/ a: W
if (pItemElem)0 C Q0 [& n( F/ H/ `$ G9 j
{
7 W9 ^3 c! Z1 @! ]/ V* k- W if (IsUsingItem(pItemElem))9 @: _% h _) ^; z9 d
{
: L) z0 } q' l* h0 O //这个道具无法移动,跳过* j6 V O# G& W6 p& [
continue;
9 V4 E4 {# a6 T8 U+ Q( \/ l }
: U# S. p! H D }else{7 d& M/ x3 c* Z3 V: ^( M
//空位置 不用动; W1 O7 }0 J5 Q4 [! c$ O0 c
continue;
3 F4 u- g8 U( b O( Z. Z }
4 j9 X; ?+ }- Z9 j& z$ o //////////////////////////////////////////////////////////////////////////
1 ]/ Q* [" U6 R k1 s- i! {9 ~ e6 | //开始移动
8 V1 X i! u6 l6 [ if (nSrc == nDestPos)
" m9 x, v5 W. y$ y, z {
" x+ n \2 t g, w, a: t; U //原地不动
% \1 f: s% N0 h, d* S nDestPos++;
* b7 F5 V5 Y1 k7 c continue;1 z, o# V! v8 a" r/ h8 h& _* ^6 @
}
. w/ M3 H% \0 e2 A3 b pInvSort->MoveItem(i,nDestPos);( r" u2 r z$ ?8 v% [: e
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
5 k- [3 m2 Y0 j& G/ p Sleep(5);
$ N; _, S( U1 g) r. [) E //Error("移动 - %d->%d",nSrc,nDestPos);
6 F0 ^0 G6 t" Q4 j: G, c' f nDestPos++;
" K) o/ S& y5 @' [7 ^5 }$ Z }
& U% y1 x0 n$ @7 H# P, y" ` //取第一个元素的信息
/ D: j' A8 r: B4 T$ t; r- C. N /* ]2 ]% e" h/ c) y2 H
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
& Q. a+ C6 q% j# u+ O) M: _ {! l3 }7 a9 b8 F" x( S
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);8 B4 h' I4 {3 f4 |( j& b" @% h
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);) P3 n7 J" }1 r# C" g: R
}
# t& p. h7 R( k/ ] */
( I/ K) y. ~9 N" W5 ?6 m //////////////////////////////////////////////////////////////////////////; Z0 W) f$ e' U2 ?
break;/ [5 L/ @2 n/ c8 k6 L
}
1 ]8 U* s8 Y% X5 f } . w B0 D( `( _' H4 E
}8 m/ P, S; B0 D& {2 r
m_wndMenu.SetVisible(FALSE);
. ~1 [+ V G1 U* n! {# J L' K( n: f6 C) U
--------------------------------------------------------------------------------------------------------
& `$ D4 t' ]6 l& `搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point); |* p& C$ T$ u
{/ t4 v" H% x8 i
BaseMouseCursor();
2 `( L9 j: r6 `: O1 s}6 A3 O k$ n6 p* f5 }( W% {
在其下添加:
, C$ r; ~, _+ y3 Rvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)0 ~& G7 A1 l2 ]* J D3 R: a: G8 j
{
$ U' I: W2 t1 ~- `6 ~5 ~9 E+ Om_wndMenu.DeleteAllMenu();0 l# Z7 R: ^" [/ K. ^& i! _
m_wndMenu.CreateMenu(this);$ w# k8 J% A4 s) Q/ k- _8 e
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");4 M* \) d. [3 U& H% Y9 ^
, K5 R) N1 ^& ]" Z
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
% P% o/ ?; J. \, w7 x- Z6 b{: g( A2 i. {8 `
//P以上级别才可以删除所有道具+ s9 l5 B4 \( S; `' k" ~
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");( w5 w1 T) K7 ?" S# |# |
}
) S' `( u4 E) W0 r% X, {m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
) f0 Q+ ^+ L6 @- w7 r3 }" xm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
/ x* F3 i5 [ ]* Lm_wndMenu.SetFocus();, W3 ~$ O! ^4 n3 l. e' I
} H3 ] t( n3 _/ A0 u
------------------------------------------------------------------------------------------------------------8 }- k5 V6 t$ p$ t! X+ E- u
*************************! P4 _4 e( }! ^2 O1 ~2 A( \: p/ r
WndField.h文件+ l! r, r8 r& K3 y; f
*************************! i/ E5 F, I8 x, U h1 D1 N
搜索:BOOL m_bReport;
" `, C6 g/ C7 X- _, @其后添加:; l/ s" v( R m4 u0 d
CWndMenu m_wndMenu;
/ g" U" B1 F4 B$ f搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);' b. o9 d$ M6 [5 i1 J
其后添加:0 f, n0 t( \6 `$ a- z0 b2 G2 Q
virtual void OnRButtonUp(UINT nFlags, CPoint point);, W0 h0 w' C3 y4 w: z2 A
* W# |$ U# e8 S3 z- |) ?
/ h2 V- I( V% l6 K |
|