|
|
源文件中_Interface文件夹下WndField.cpp文件/ O* S2 X8 p3 g$ v
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )7 a( w p7 ?1 p# p% U
. k+ }" r- D2 n t7 m r: |# h+ g- J
struct sItem0 q/ m( J- f) x: C' y
{
b' ^2 x' d! m7 c4 ^. z. }DWORD dwId;
$ C7 H4 G! d6 H% H' M- iDWORD dwKind2;* ^8 O5 A3 P* D! \( `
DWORD dwItemId;
3 C; w+ R( `) ~4 Y- EBYTE nIndex;
5 \9 B/ f" \# `5 RsItem(){' _: {6 ~& M# t6 a* N7 E0 e
dwId = dwKind2 = dwItemId = nIndex = 0;
. K+ W8 L& P: u0 E}% O# s: S/ ~$ d5 o4 e
bool operator < (const sItem p2)2 D. g J3 T) [' c: s' T7 ~$ J
{. N8 ~. E) ^/ i8 ]
if (dwKind2 == p2.dwKind2)2 a, y; Y3 Z4 K8 }
{) X3 v& ]( N0 j* ^8 B3 ^* W6 y
return dwItemId < p2.dwItemId;
5 g* v7 H* {! Y! P+ a$ C, @ }else{
; `- o/ {0 w, p8 I, p; k$ p return dwKind2 < p2.dwKind2;0 T8 z- z- n1 N) c, E- E
}
. l* i' |: j, ^) j2 H4 w}
& T# G5 }+ M f: H5 O};) ~6 l! `, L( T& I# k% ]& d& }
class CInventorySort
) Y' E- w: k; {4 ~- z{
7 _" `3 u, `" e4 kpublic:
% s: ^+ I9 J! E- s0 {3 DCInventorySort()* U6 x; y! E/ a4 M$ ]& A( o$ n
{
9 G2 p1 {! w1 o m_dwPos = 0;
+ ~% W. ^3 ]4 _}; W0 ~5 i7 g# g0 k
~CInventorySort(){}8 H+ Q O& S9 s6 X
private:
: L5 i% j9 v; D- DsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息- J, f' v% E( m. ?5 }
DWORD m_dwPos;9 U- y5 f' ^+ K1 b. f+ n: {; ]
public:' m5 |5 Y, x6 |& F) K3 \
void Add(BYTE nIndex)
5 `+ U( S( q" W, T* l{
& r: e3 ^# h# f2 z# N, F if (m_dwPos >= MAX_INVENTORY); u5 _ t, u1 {7 t. X) i# T! w
{
0 W- j: {& d* `9 m2 Z0 g" v& j A return;9 Q" }0 G z: O2 z( H2 s
}
. Q+ X' i( F3 ^( j m_Item[m_dwPos].nIndex = nIndex;& p, _) D+ l9 y: P& @
m_Item[m_dwPos].dwId = m_dwPos;
; I& E f" e/ M" d8 [! s5 C( o m_dwPos++;5 h- e6 Z) }9 H, m
}
: k: ~# w4 m2 x5 K$ ?' W& oBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
; u6 b) n+ ]3 `4 F. r* A{
% k5 A2 l. e C7 _% \ for (int i=0;i<MAX_INVENTORY;i++)
/ @3 {% |; l% O3 l2 z* |( i {: d L6 @. ]+ R. o z5 p) y
if (m_Item.dwId == dwId)8 `8 h' i/ a# x) i2 M
{
7 w& J: m0 a/ G: V* { return m_Item.nIndex;
) G0 N. l: k5 S }! f7 w# t" S6 @0 `$ i9 S
}
* ]3 ?8 _ {, k2 |/ `' N return 255;
& t9 v" L, X, J6 W5 g }} q( l3 j* D K, @( V
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置, G$ H0 e. v7 q% }
{- V7 i/ K; d" v; G1 S4 v
BYTE nTmp = 0;
% Z; L4 X. X$ d* c7 f8 J8 \& E bool bDest = false,bSrc = false;
+ x# r) u# ]+ ^) V. F* ~0 Q6 x8 L% D for (int i=0;i<MAX_INVENTORY;i++)3 G0 H* b7 c D) g' d9 h
{( P( {. P8 \* w
if (dwSrcId == m_Item.dwId)
6 A0 @% {! n( E0 t {, v1 ]: |! n' F1 M5 b( g
//id相等 则 改变对应的dest和src
# [ c. y' c; \$ k nTmp = m_Item.nIndex;$ ?6 V4 a4 j+ V. H
m_Item.nIndex = dest;; U% V2 N' F; l9 h) N
}4 `* b7 x4 n5 u, K6 t' r9 l
}8 L' D) J0 _& z; y% w$ {
//临时数据保存完毕,交换开始
1 Z' D" h9 b" j( O- w/ v1 } for (int i=0;i<MAX_INVENTORY;i++)3 z4 T% H4 t0 x# _- l* S! \8 l$ T
{
8 n, F) [. ~( V6 {% E, h if (dest == m_Item.nIndex)2 T) a8 c( b7 t) a5 d* L' S* p
{; K- m; B" h* ?" B1 L
//id相等 则 改变对应的dest和src
, _, ]2 C; O! ^, ]4 D m_Item.nIndex = nTmp;: B- K/ |7 T z1 v4 `6 I' S
}
0 Z2 l) a* `+ C H4 j. @: x }' ~/ N- x/ U& s6 x X0 `2 W3 _
}
- E, L, f) o: Y( L};+ R0 t; J. `: s) e' h/ J
-------------------------------------------------------------------------4 J% B/ N, S: Z/ v' w
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ): A& r) N; }8 ~9 \" M8 U/ d( B
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
8 h7 `% d0 }4 y7 N! Y紧靠其上添加:
4 Y. m$ _1 p3 l2 z/ wif( pWndBase == &m_wndMenu )
+ W M( c. r# I1 x{
# ~( n$ C* `( g2 t/ i$ B switch( nID )
- ?, J* N! p# }" w3 K; N2 {( u {
) k) J% u3 C( H, L- J0 G" M' u case 2:
# Z9 |3 M! S! V$ j8 z4 h/ @' n7 q1 p7 [ {% K0 W. h# C+ B8 g4 d
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);& l! n! a7 o- O
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))% w% h/ E3 C6 T" r+ l( J! _ f) b( N
{9 s" k! T- B" G) @8 X7 b3 K3 R0 V
break;
) s; S9 Z; {, [. v: A }
9 v% k7 t7 Q8 m n for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
X( A( y- A3 M5 E4 E+ w1 T {
. P3 ]& x9 k" c( r, M; y& B8 b& Q CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);& a+ S6 q5 V+ E9 k
if( !pItemElem )
4 G! V9 E3 n* H7 T continue;
0 D- [$ ?) U5 ?: s2 {4 [ if(pItemElem->GetExtra() > 0)
3 e4 l% I0 |9 p6 g6 c5 ? continue;# J. p! p5 @( M
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 7 K3 K+ M# t. A; h" Y. x( _! ?6 e7 M
continue;8 }. {$ {. W# b, U: q
if( g_pPlayer->IsUsing( pItemElem ) )
]( ~8 B2 p% Y2 e5 |0 w- ^ continue;
: [3 [1 A3 }+ F6 g% p if( pItemElem->IsUndestructable() == TRUE )
% H+ j* k8 K2 A$ g) ~! @6 i {5 n: D. i: K( k" Y
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
( G. V; ]/ a9 L- ?% [, S% a continue;. @/ _0 o4 X. o
}2 T% L5 ]: _: Y0 H
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum); [6 o2 t5 C7 `, q9 z5 Q: x: J7 m, K
}; U. C3 y z* V) H* h% \
break;& r7 b; B' O7 j
}
V4 V9 w6 V7 B, C; J- E case 1:
& j- `. k& q0 z( {) R$ X& l {+ p( h8 B3 K% K6 x! P/ W
//整理背包
* z; h6 [4 n" `& e //////////////////////////////////////////////////////////////////////////
4 \3 q0 C, g+ r1 u4 V' ~1 R* x //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );( ^/ s1 L9 X" s) k$ Q X. ^
//////////////////////////////////////////////////////////////////////////
; _! M- P/ F3 f* N9 K+ z$ H //////////////////////////////////////////////////////////////////////////
5 [0 e9 R/ w0 Q CInventorySort* pInvSort = new CInventorySort;$ \& t b) S7 ~8 {* ]7 S- X
vector <sItem> vItem;
5 w3 i+ G' G! `1 v( A6 o w- L5 A7 W vItem.resize(MAX_INVENTORY);//初始化大小
/ p; J2 ^% f9 s+ x. F7 z+ l( ~* q //////////////////////////////////////////////////////////////////////////
( A, i7 D. [; K, O8 Z //填充数据
* @3 t- @* J- w for (int i=0;i<MAX_INVENTORY;i++)
% E& l- n1 c: [8 _7 U+ e {
! I" b* X& x7 \$ ` CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);. x2 z4 B) E) q
if (!pItemElem)0 h6 e( t( x0 y' n' P
{+ w. z" Q; e8 h
vItem.dwKind2 = 0xffffffff;
0 ]& J3 _ j+ |* C# s vItem.dwItemId = 0xffffffff;
4 A' {" A& k$ U- J% @1 n' F5 _ vItem.nIndex = i;( n3 C r- I$ r$ U9 h% w% \# z
}else {4 F+ N' P: N6 Q
ItemProp* pProp = pItemElem->GetProp();
3 z+ l5 E! P( i4 }7 V5 Z vItem.dwKind2 = pProp->dwItemKind2;
: T3 ]/ ], F" U6 T vItem.dwItemId = pItemElem->m_dwItemId;
+ `8 ^2 i8 c$ Z+ m% \ Q vItem.nIndex = i;
% v+ o! V- M7 x: m }
% \4 E" Q2 r# Q- d4 _; z6 X //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
2 k6 i7 u* y" T& T+ p }9 N3 z( j. P; R; F
//////////////////////////////////////////////////////////////////////////
: W2 I) h5 F, h" d sort(vItem.begin(),vItem.end());//排序2 D% D7 j( T* A; z
//////////////////////////////////////////////////////////////////////////+ m( Z$ E) `$ M2 w$ b
//交换3 D: k/ d2 O* V/ {; L7 X/ a
for (size_t i=0;i<vItem.size();i++)
9 z$ S( P8 o1 W+ ~( }& C {
. J* m" m0 E% L4 ] //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
$ e3 X; k- Q- t- e |3 j$ D6 n pInvSort->Add(vItem.nIndex);6 v7 Q0 G6 A: r) w' [8 D
}; q& f8 h m, l9 P
BYTE nDestPos = 0;- _! j0 t) O+ X6 H
for (int i=0;i<MAX_INVENTORY;i++)
5 e+ `8 X# \9 E! S% t ^% u% Q- C ] {: \/ {1 m1 R0 [( p
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
. l1 h; p+ w" i1 T; H4 t$ L8 @ if (pItemElem)
) f: c2 b- a, T4 i8 N {, @( S1 ? l$ T; {( o2 ^
if (IsUsingItem(pItemElem)). Z" i, M" E0 ] V1 {9 D: v( W
{
1 H; a" g" y L: p9 [( | //这个位置无法放
|1 g @9 m. Y2 q nDestPos++;
) K' [9 D3 O, N% v7 W( e }. E* |3 m" P' V; _5 T/ t
}
2 K% T8 a9 Q$ n. f) x: I2 [ BYTE nSrc = pInvSort->GetItemSrc(i);6 }, Y. [- q9 _8 W
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);9 }4 Z# P; g/ Q( v
if (pItemElem)
9 l/ D* E3 @& [ {; z+ b) \ l7 P# f
if (IsUsingItem(pItemElem))
& C% X* }4 `. V1 x) m {' v5 F: q9 | |# X/ ~, s+ @# r; P
//这个道具无法移动,跳过7 w0 U3 J# d8 M6 p2 H' S) r) C4 ]8 G
continue;* p" A: U+ |* i( R1 ?/ f
}$ g$ T" H- k' g4 v5 _
}else{
/ P; p% {) P8 j //空位置 不用动8 \' d! ^8 a: X% h2 S
continue;
1 J, E |- C! ~8 P+ ? }8 O" p9 ]* [; s4 Y9 ~& m
//////////////////////////////////////////////////////////////////////////
) E" } l: e6 f( X2 n //开始移动9 T) [0 i0 g+ l* t& v
if (nSrc == nDestPos)# `5 F8 T2 U: ^& P
{/ m" |& ]( f7 E. z9 Z5 D
//原地不动6 a- E t* V- O8 G/ b1 O
nDestPos++;
+ t- N$ h0 W1 {# [2 L* ?5 J continue;
% q8 g! W6 @8 N; w4 Q0 H% V }
9 C( U6 w5 ~0 i0 z8 ^* f8 s4 e pInvSort->MoveItem(i,nDestPos);4 m$ A, s( v& a: g
g_DPlay.SendMoveItem(0,nSrc,nDestPos);4 Q: N, @3 \* f
Sleep(5);6 k$ m D* m( L# ]& x: M9 D
//Error("移动 - %d->%d",nSrc,nDestPos);
. c0 [3 u' A% n% O# S nDestPos++;% ]7 t3 S- C% f* @
}5 Z2 c s1 l0 i. z! a) F- A) J" k, n
//取第一个元素的信息3 v% D6 v7 K& L. f6 N
/*. k* i( v$ N) T
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
. f0 Y$ x# t, W9 k {
9 T! N J0 Y I" n% M7 X Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
# q5 y9 m5 z; Y9 |' B9 ~/ r3 @4 T g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);5 j2 C3 a; G: y& i# J
}6 A6 Z8 [ Z6 U# h+ O5 {2 ~7 G
*/
6 j7 q* S9 g* S" Z //////////////////////////////////////////////////////////////////////////, K! w# K1 P, C4 @6 {4 L
break;# u' s6 r+ b. w$ Z/ \% ~
}
, u) Q; X! C. |$ D5 F1 ~8 {" G }
& G) F- E- n5 j! d. G} w3 ^3 V, I4 H
m_wndMenu.SetVisible(FALSE);
' c( v8 S2 |, W% n0 g' h5 _0 T: v
--------------------------------------------------------------------------------------------------------
" i1 }! u9 A) a% o8 g- V+ z' U+ [0 i搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
3 _& {9 b+ u r# v- H* m; J2 P$ G# r. P{
. v7 H L. I+ U- l; [1 t% _BaseMouseCursor();
p4 y9 T; s. D, @, r$ a}
' @* b2 ~$ F$ _6 L3 R$ C在其下添加:
7 L! L; X+ ~; d& D, J/ r2 nvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)0 N `2 a* {" J. q) }: t
{
" I$ g% a, E% E- m4 E- V7 j5 R+ vm_wndMenu.DeleteAllMenu();9 Z z2 w6 K0 x
m_wndMenu.CreateMenu(this);
7 L( d0 p4 @9 vm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");% u. f1 ~- S/ u3 y4 m; b4 L
$ W5 s! x( _ E; P0 }2 Y' c& f
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))2 G$ A4 e2 m: o# A) ]" [1 r
{
% k) A; w4 x! J+ w1 `' F //P以上级别才可以删除所有道具0 ? H( j% S4 ~( m% G7 a
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");1 j$ K" q5 R. h2 S" {( J
}( }! {! p0 k3 Z. j6 x' d
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
# I! [0 `6 S* L7 B3 \5 s. H5 G: wm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );3 Q- X5 j$ g' y; y I: R
m_wndMenu.SetFocus();
1 B) W4 f2 `, M}
3 D1 [% |* B* ?+ ^------------------------------------------------------------------------------------------------------------
: ]$ u% v; G; u& U2 }*************************
7 A$ o g7 l) BWndField.h文件
) V# e D% D) @- v*************************
) o, D/ _4 t6 K t. m搜索:BOOL m_bReport;# |5 Y8 B! i9 q: l! Z
其后添加:
! q3 q1 Z1 ~* }: b2 dCWndMenu m_wndMenu;
0 G: \5 |9 p3 p p5 n: I搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);5 X0 |9 |2 J. t9 C7 P# o
其后添加:
7 D* q1 Z" l- M* fvirtual void OnRButtonUp(UINT nFlags, CPoint point);
0 k) Y0 l$ P& v: U: o0 k
% G% k3 d8 I& b5 Y8 f1 E% O& g' X# M E9 K7 S/ ^5 b
|
|