|
|
源文件中_Interface文件夹下WndField.cpp文件- [9 ]5 u8 M* V* ~4 t" X) @! ~
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
7 _( Z& }* @: G/ `# f- b7 u( X" G$ ? U2 x1 r& h* \. z
struct sItem; L" y- Y, d# ?1 p9 ?6 F. _" |, j
{
* O4 x' u* G! Z4 TDWORD dwId;4 @2 L% E" a& D7 y( C% \6 m% D- q0 [+ |# t
DWORD dwKind2;
. ^. u- e: J T/ o) ]DWORD dwItemId;' t1 C5 \' V/ X- a2 p8 ?( G
BYTE nIndex;
/ G& p! h' v4 ^+ l; ?sItem(){
" s& x/ d9 q: u- a% o/ I2 @" p dwId = dwKind2 = dwItemId = nIndex = 0;
& Q* Z4 [& x! g" [}# i* n9 i5 g4 V( P1 Q1 V% H
bool operator < (const sItem p2)7 |* a" Z; b: @* m
{
$ k0 f, k* ^* S, S* Q4 T; q- L, @' b if (dwKind2 == p2.dwKind2)" y1 |! Q5 n0 r% }8 P
{
" L' W/ f: @9 f! |0 C! V return dwItemId < p2.dwItemId;
$ }/ g) Q5 @' C1 [ }else{
2 C3 D' v/ B! [$ K7 d; `5 K return dwKind2 < p2.dwKind2;1 [0 t# F- k0 x b
}
h' x& C* D. Z0 {}: j r v. J9 t' L C9 o2 W" I3 F
};& k/ H3 i1 r; z2 e9 k
class CInventorySort
k; ~7 p# w6 y; F{. g# z6 M7 B- J2 t1 B5 l6 J
public:
$ f- |+ i5 v& B2 J: NCInventorySort()' S' n$ _9 m' m. v! |# z
{
! h3 v8 \/ \; m; n* k; T m_dwPos = 0;# L+ b- n4 }, T7 ], q6 ?
}1 \, j! m' y; X' t4 O
~CInventorySort(){}
# M# e5 J4 ]) @8 X. O8 ~private:
4 s1 o) _3 o3 E$ O! }. S- WsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息# J3 L. P1 C0 t
DWORD m_dwPos;" |. T5 m+ k W( X; c" H
public:8 P3 \1 E7 _( V
void Add(BYTE nIndex)" A0 D. c) [) Q, ]% r8 s
{( W6 w9 T- Y9 k& H$ s/ b+ n
if (m_dwPos >= MAX_INVENTORY)9 ?* L5 i! v7 g* i
{$ h% @6 h& V; d y& B5 Y3 z# Q
return;, M' w( J$ ?/ Q$ F' ?
}/ h. w" w0 ~% A( P |0 q
m_Item[m_dwPos].nIndex = nIndex;
0 |$ {, Y) ]" Y0 B. O m_Item[m_dwPos].dwId = m_dwPos;
1 W* \/ B2 `! W2 B1 }7 O m_dwPos++;
, }, P' {6 I2 n5 U6 t% z}" ?& u6 Q3 h! [0 y3 ~
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列: l& T% Y$ p+ E* N i" ]9 D
{1 u) X7 A7 v2 W8 Y
for (int i=0;i<MAX_INVENTORY;i++)
4 h3 ]) T; R/ i& k% H8 Y {
; f: e8 S2 v, I7 h" S( }% a3 z if (m_Item.dwId == dwId)
% T5 Z/ L; ]; H' Q+ K {# F( N# z- \* K
return m_Item.nIndex;1 A$ x$ J2 ^0 U
}8 w6 ?* W: o* M0 C6 w
}
/ m8 s. x- _. f return 255;5 o3 h6 R) K: F2 |$ {
}
* m' v2 y* h/ m9 E0 d# g! Gvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
5 a1 U: D) N" R{
3 Y, k% Q! @7 l' J2 J/ Q1 T BYTE nTmp = 0;
" F) g; L- y8 { bool bDest = false,bSrc = false;
. c6 I: l5 V' J0 K) H+ ~2 |: W for (int i=0;i<MAX_INVENTORY;i++)2 ?" Y& f# |9 \: Q
{) r+ u; R; ~8 x; A. _5 B8 z
if (dwSrcId == m_Item.dwId)& ]( t9 J" z5 [0 p; ^6 R3 f
{/ w9 F+ R; A$ \/ |2 i/ G. v8 S- L
//id相等 则 改变对应的dest和src! |& u9 q; T% p, X
nTmp = m_Item.nIndex;& v3 g5 V# i# n: n e$ t
m_Item.nIndex = dest;" u& l/ V( \/ ~" `, z- W
}4 j$ `3 Q; w' L- F" z
}
5 q: p; H- n% @: w! `+ p' N1 I" ~* y //临时数据保存完毕,交换开始
/ v; w" U2 O( o! v for (int i=0;i<MAX_INVENTORY;i++)* n5 H. i6 H& I3 w. }
{. C+ [4 s. U1 A" B
if (dest == m_Item.nIndex)
5 Z" r' O$ w$ ^2 H {
8 p I" U% @2 f8 g7 w2 Q //id相等 则 改变对应的dest和src- x/ {4 w: m/ C/ J5 S" {5 x
m_Item.nIndex = nTmp;
_* C5 B( C0 v, V* | }
( [0 U6 ^1 X8 |' R: B$ q, \ }) W- v8 S$ S9 o; I8 z3 G% f3 A$ j
}
4 y3 H# Q0 {7 J3 u) Q};
) c2 B9 H: K6 h-------------------------------------------------------------------------
& ~( z8 Q! h# k7 L& m依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
' n( \1 J' g7 S0 |; x& E: U搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);+ r% W# d2 v$ j- Z; {
紧靠其上添加:
$ M5 u0 B) v7 b' {' Z5 w3 ?if( pWndBase == &m_wndMenu )8 l, Q/ u; R" c9 h
{
% O# J/ k- R" O# ~2 q1 n switch( nID )
: O7 ?9 {5 ^# Y/ g {7 w& T/ P( v S0 ~" o7 h- N
case 2:
+ k! [* q% r! p/ {) W% A {
0 _- R, V2 v* ]3 d' i8 P$ O8 h. m //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);1 D2 }6 W7 h) N) O$ n# \2 n1 ~
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))4 Z0 a) V. v" ]4 v$ i9 J
{
3 K2 e7 j0 G% }0 q* r break;
0 e. y$ V: I* G& I }
8 U& t+ c; z/ {9 f& `: N for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)3 U ^+ i% X! m0 \. }" S
{, C: m2 D" G7 V$ O7 M: n
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);* \2 t4 I1 |4 E, W6 o9 D
if( !pItemElem )
3 N( V$ F6 c* `* H) ]3 f( C3 w continue;
0 X2 J4 A' P: E( F& F/ b if(pItemElem->GetExtra() > 0)3 @. r9 r5 }) o0 t
continue;# \" X3 M, c& R" p/ Y* @
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
! E; E& a* @: ]' n- X continue;
8 l# w7 o4 Q B8 X" Q4 \ if( g_pPlayer->IsUsing( pItemElem ) )
! F% k& A/ L* G _6 \ continue;$ A5 [& }' a3 V. \% h. M! Z
if( pItemElem->IsUndestructable() == TRUE )
) T( ?6 a( x' {/ X {" m+ l! Y6 T7 w
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
5 v' W0 U. [3 F8 {) m! V continue;
" S4 A. w" o; T6 v. ^+ f7 i9 ` }9 q6 w2 J8 ~: v
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);8 L$ K& N( M) _& A( H
}" x8 k/ g; ]' U C2 Y3 j; H
break;$ J) b g& b5 p I+ ]: \
}
. V T2 \& n& p7 f/ U2 \ case 1:) F6 X! t3 `4 U$ b: |* ~0 E
{
+ {8 O4 |( _: s- E8 o7 | //整理背包. Y- `& M7 P R; G4 q! Z
//////////////////////////////////////////////////////////////////////////0 _, f% h$ z2 z
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );! @8 ^" k7 _! O/ }
//////////////////////////////////////////////////////////////////////////5 N# `/ F$ J9 X/ c% v! Q
//////////////////////////////////////////////////////////////////////////
$ c4 v7 x1 S2 u9 k; H CInventorySort* pInvSort = new CInventorySort;
. n2 x; t8 ?" X/ ]* b vector <sItem> vItem;
! H7 O8 i6 m! D( m" N6 g vItem.resize(MAX_INVENTORY);//初始化大小
5 |- G9 Z$ ?/ i p //////////////////////////////////////////////////////////////////////////8 ]2 [4 g3 ]4 a. ]' e
//填充数据' P9 t$ }# `' F7 V2 }2 C% o
for (int i=0;i<MAX_INVENTORY;i++)
. C8 O" o2 G' ] {
( `6 a# ~( u/ ^, N# @$ L, i CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
0 P1 b+ [& j; @& E5 w if (!pItemElem)
( Z, |: S8 [- E4 N2 Z6 a2 g1 w {! ]. ~" B( o2 f7 F' E
vItem.dwKind2 = 0xffffffff;
" Z! E8 |. r+ @) x vItem.dwItemId = 0xffffffff;. B4 P. U$ X0 ~1 z! [
vItem.nIndex = i;6 C7 y9 ?$ X& l) X- D# \) L
}else {
8 m3 |, k) B, ?/ M7 C ItemProp* pProp = pItemElem->GetProp();
0 E" W3 E( k R/ X vItem.dwKind2 = pProp->dwItemKind2;4 U) L: B( W0 O( w- h4 G/ k" P& u W4 p
vItem.dwItemId = pItemElem->m_dwItemId;
, h0 c' S: Z' m. Y) Z0 x! p3 ^ vItem.nIndex = i;
' g# }6 M& L+ V0 R }% ?/ C/ G5 @. E: P
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);% t9 m, U& h3 F: h
}
: S# a0 Q" `8 p2 N //////////////////////////////////////////////////////////////////////////* q* k s8 \/ W" m a
sort(vItem.begin(),vItem.end());//排序
8 Z2 Y# g6 \6 v+ ~ //////////////////////////////////////////////////////////////////////////6 ^0 L9 t7 | n
//交换
4 R3 q8 d! }. G. X g for (size_t i=0;i<vItem.size();i++), @ n' r8 G$ p8 Q
{# ^- z! _& w1 X+ W8 }
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);* n' h. j# n7 N: R, c) w9 E
pInvSort->Add(vItem.nIndex);" D6 l$ C6 S) ]* k! i
}
( e+ _( O9 T8 t' \- ` BYTE nDestPos = 0;) m0 _3 Z7 F/ w( N+ G% f
for (int i=0;i<MAX_INVENTORY;i++), t' w) X# m5 @' Y M7 l
{
( |% Z" T/ m6 M CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
6 n7 a5 K- d# g- d3 g3 s) { if (pItemElem)
3 s5 X+ p2 R4 V {" b6 U. T* F. B" E8 {6 ^" x- ]# K
if (IsUsingItem(pItemElem)). A" ]6 ~+ I6 U+ f, m! n
{: s2 a2 R# r( A
//这个位置无法放
8 ?# q7 C8 @% b3 h nDestPos++;
5 I* \6 g* n3 s6 E }
% E- d, v$ E1 J }" j, J' Q& K8 z- _
BYTE nSrc = pInvSort->GetItemSrc(i);* Q {( W7 o+ h W! Q0 N* r$ p
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
2 g& f; _5 k1 B; F8 f# J" k if (pItemElem)
8 T& L3 I) a9 X+ _+ ~ g {
0 u# `$ c6 ]! G" Y+ x; R' ] if (IsUsingItem(pItemElem))4 h; J+ n7 d: V1 `2 \
{
# G: _1 Z% }: c( Y: A //这个道具无法移动,跳过
5 w W6 v" \- R continue;* G% h& d* r5 w' t; j
}
$ o7 Q* l" w" c0 z8 F$ p/ B! Y }else{
% [, B7 i D9 f9 R //空位置 不用动1 F; Q5 a# E& |& F2 K" W) n
continue;
4 A) i9 ]* n/ K0 @& A/ K }2 L9 e' F" S& H
//////////////////////////////////////////////////////////////////////////
1 [. A( b; d; w0 l: V3 x //开始移动
' _$ R( s5 ^% z, r; H F if (nSrc == nDestPos)9 v i; O) F$ H. r
{
: J" c3 ^8 D% m$ J4 P9 i //原地不动9 E* x" }% j( f8 r
nDestPos++;
+ Z2 [; L: E6 v continue;
y- s5 c( r& P }
7 ^/ g* \* x7 x( O- w pInvSort->MoveItem(i,nDestPos);
3 U" Z& w) f- w9 \0 E g_DPlay.SendMoveItem(0,nSrc,nDestPos);
/ I e* f8 P* C' a3 ? Sleep(5);0 w T% V0 M" ?* h% M& f
//Error("移动 - %d->%d",nSrc,nDestPos);0 C. d2 v5 j/ [& M7 p. B
nDestPos++;% v- y2 [( m, z7 k
}
: E2 Z- P' r3 m& E, }9 ]/ s //取第一个元素的信息
6 f/ O/ H5 B# K4 W M$ B" U /*: H% u& s6 G9 j
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
& x% B$ B& w3 M) @ {& b( a/ P" U+ L2 {1 w% A% M; z- K
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);! ^* y4 A; P, O
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);4 u! g o& n# T# X5 r9 K
}
% w; E: A( f3 D4 o% K. y. V1 j */
- F! c* B j# O6 x( a" w2 U' R( w //////////////////////////////////////////////////////////////////////////
8 V' N' a5 `$ v0 p6 P, A break;4 E6 t: s/ U, |' I* O, b
}
$ Z# E& o. o9 L: _( k7 R! Z }
- ~0 c% C3 i+ E; L4 R6 v5 l, V4 h}
6 `+ n( L* H W) |9 r: K1 Dm_wndMenu.SetVisible(FALSE);
# |# f# B+ ~# Y7 a
1 t2 H3 N# ~# U' }& `--------------------------------------------------------------------------------------------------------" }6 x3 g% Z/ e, j$ C) m; k( F- z
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
, ~! ?5 ?# t2 F+ W. W* B: C{. Q! F4 U3 s$ ~6 n# G
BaseMouseCursor();2 `! w1 R8 U- t
}8 N; X( q. h, S9 a [! Q" I
在其下添加:
( Q |4 I% E5 J. Avoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
t: L& h/ L( {{$ z: s( ^2 A% I- a
m_wndMenu.DeleteAllMenu(); Z! ]5 f. G+ h) O8 T- ]6 Z
m_wndMenu.CreateMenu(this);
& w- K+ T+ m+ r1 C. h: @m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
, f$ `2 R* U3 _7 ?; l
" W" ~1 z) m6 b1 c8 Aif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
$ ]) o. _$ q S! x9 z{$ Z+ }6 x# H% `' T
//P以上级别才可以删除所有道具
" X! u O+ R: b W3 Y m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");9 ]' Y9 H a3 C1 Q" Y
}
# l8 t) T' y5 e* ^! Km_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
, b( ^) R" Q5 k Wm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
5 k$ g- e( N9 R. i& r! [& T8 ^$ I8 Em_wndMenu.SetFocus();
! K! b; v" ]# }& A! x1 h}# O5 x5 r3 ]4 S% B
------------------------------------------------------------------------------------------------------------% ^4 Z+ C: t9 ~# o6 d" S
*************************
1 H# T3 _# F, q& e: D& ]+ pWndField.h文件
6 t. i' M8 X7 E+ z+ m*************************8 U; H+ i9 u) Q1 ? Z
搜索:BOOL m_bReport;* V9 T7 Z. D/ L# t: x
其后添加:$ K) h% O' i F9 P+ B5 {+ t" {8 q
CWndMenu m_wndMenu;
5 N E9 K$ h/ Q; n6 `% v$ Q搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);- Q7 ]& L" ?0 k. L% W7 O2 d" e
其后添加:
. M/ T% a4 v. Q0 rvirtual void OnRButtonUp(UINT nFlags, CPoint point);
0 u/ t4 U6 P* z
' S; w1 v3 s3 f% K* C; A2 D; U1 X+ p6 f. ?! W
|
|