|
源文件中_Interface文件夹下WndField.cpp文件
1 `' U8 ~* U5 K) s7 f搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ); H, R/ j9 N- B: Z* Z
9 U; z ?; _: t( u% f
struct sItem
H- X5 S- N- A( p7 {2 r{
8 ]. ^( S- i! N' \DWORD dwId;
$ S4 J2 _1 Q* lDWORD dwKind2;( R( P2 K9 I5 A) s! [
DWORD dwItemId;6 F" r. I) ?1 E$ X1 @
BYTE nIndex;4 q) \! m# G8 Q, |; P5 X
sItem(){
; Y8 e O( ]2 `6 o dwId = dwKind2 = dwItemId = nIndex = 0;
. r4 v! @- _# n! K) |}) X3 L9 D/ ^" o4 {
bool operator < (const sItem p2)
, F/ _- u) L; B3 C, C+ ^{; d$ [0 I g- B
if (dwKind2 == p2.dwKind2)
8 a* H3 _& J$ v {
% i' |( j- A- c' O3 G return dwItemId < p2.dwItemId;
, j) a. M% f0 K! n$ ^; R }else{
$ R$ D* l$ n* ^& F5 R return dwKind2 < p2.dwKind2;
6 y0 J* [( E$ J$ S$ T# }/ k }% ~4 J5 y4 Z: b$ N) G0 }
}2 X' A( g& ?; P# H) U
};$ B9 ?- D7 }0 _$ Q1 n _
class CInventorySort
3 f |% z! u7 Q' [' F' ~3 [" c( g! {{
7 x% o- Z# R5 i9 ?6 z1 A/ \$ Lpublic:
' q( |/ ]( e |2 DCInventorySort()9 D) z$ B6 r# x4 [
{$ V, Y, Z# w. L- [
m_dwPos = 0;4 x4 u, m- p- A/ t
}
5 A- L2 W8 W) n' _7 H( n! Y~CInventorySort(){}
4 {( E8 y0 A) w8 k; G& ?' Gprivate:# y q5 I3 W( Y7 ~- [( S: X. N
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
7 {0 \4 l5 @7 o0 l% V3 sDWORD m_dwPos;3 y- ~6 F+ @! g* `, b+ o# s& K
public:
/ B* Z' r6 L. w! e! g2 Bvoid Add(BYTE nIndex)
" m0 d; w! y; W& d2 J7 @$ _% w{
: O5 T+ L* _" Y$ Y+ s) |$ B$ \3 b if (m_dwPos >= MAX_INVENTORY): K( j. a3 {- F3 O
{' I; V$ D3 d, b! x
return;" M! {" u! I1 e- T$ m1 K y
}
, G k& J. S" o0 |* o' D1 s m_Item[m_dwPos].nIndex = nIndex;7 r4 ^/ x& |. D( ~0 Q+ Y
m_Item[m_dwPos].dwId = m_dwPos;
' L) ~ u9 w% A8 i& }* s$ M0 ?* q m_dwPos++;# L! N" p* S( N4 G9 S; O7 x6 c
}
" i y5 v% A9 J6 a) bBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列5 [# u; V: Q% X& Q& j
{5 K% B. Z! o1 y# B
for (int i=0;i<MAX_INVENTORY;i++)
) s! x2 b/ M; z/ W4 y {+ v. r) h# h$ ], n
if (m_Item.dwId == dwId)
! g7 D; Y1 h2 k6 ?; p: K+ _* \6 A {
4 ^% n, P9 f( X: F6 L return m_Item.nIndex;
9 S1 g4 x6 c. x( r }) F1 m$ y' u5 T* |& }
}+ f7 ]% w, `2 c: [ W2 c% _
return 255;
( A3 b Q) r. F}
, O3 U0 }6 V, Wvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
1 {7 D. e" m) _7 G$ K* E: n: V7 K* ~{
; U: L& k& J$ V7 F2 T. J; b" N BYTE nTmp = 0;2 n q/ E1 h% @$ t
bool bDest = false,bSrc = false;- U0 z* d6 r7 y2 C( E
for (int i=0;i<MAX_INVENTORY;i++)+ `( s8 j! w1 q/ i5 T3 U
{
+ [5 k, T$ A ^; Q$ U if (dwSrcId == m_Item.dwId)
0 c) r# L3 u* S1 [9 v* s: p: U/ j {/ Q1 t; x/ j8 K! X5 {
//id相等 则 改变对应的dest和src. E+ c! v+ d& R1 T1 Z4 ?* T8 }/ d
nTmp = m_Item.nIndex;1 f3 d. F6 r% G/ [
m_Item.nIndex = dest;# o$ x8 \1 K; a% I+ M' R
} O; K" W, N* P; m5 c. ?
}/ F) b8 D+ _+ f. F+ R1 M
//临时数据保存完毕,交换开始+ M% z2 X+ U6 Z* F3 d
for (int i=0;i<MAX_INVENTORY;i++)
( ?& }) b0 {2 Y" Y4 m( E: u! F {9 b# }# x7 K! h
if (dest == m_Item.nIndex)) W% G0 X) J j
{
! Z* B" S5 ?4 m ?9 W( j //id相等 则 改变对应的dest和src3 u7 K" _0 t3 e4 o: w
m_Item.nIndex = nTmp;- r4 V& I# ~6 M
}, S% k' E) B7 L4 W2 k( E, n# s. z
}
$ y+ w- p; t9 f* @}5 K% J. K0 ~3 A' w' t3 a
};$ v/ |* ?- V1 |# C/ i7 \
-------------------------------------------------------------------------
. D/ o0 C. E7 m! R依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )# o3 K0 Q( ] L
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);2 v, I% s1 H5 k
紧靠其上添加:5 _% p8 o2 H9 d; g. S
if( pWndBase == &m_wndMenu )+ h/ y/ y7 M& V3 c
{, I; k6 ?( @" V
switch( nID )
# T. b+ B& O3 B4 S {
% d6 M5 d4 } g+ a- s: c& c0 p1 c case 2:1 X7 [" L3 {! ~' X# h
{+ u: B( D4 h3 H" `$ c" e- M
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
0 F( l1 j" E6 N- } if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
. B: q1 `6 c% Z. N {% \+ G) w. P6 k: G* _7 i2 G
break;
( F. B7 g5 k4 g) z }
# n) |; V6 z0 K3 E+ V' z `; j for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)! P, C; n+ a1 S( ^: a+ v! _5 Z
{( H) B7 a/ X4 U/ A
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
) P! Y8 B& o; `0 |0 h8 c# {- o0 O if( !pItemElem )
1 a5 D3 t/ a, o continue;4 W0 ]" q5 x& J+ h8 o" w. g
if(pItemElem->GetExtra() > 0)
3 y! K* i# L( X* p- |( C continue;
, r3 b* T7 G/ ^7 d2 o' n) R if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
4 u& x) v/ H6 F9 t: J& \" r continue;. ^; Q4 {) h. R7 r- n3 N
if( g_pPlayer->IsUsing( pItemElem ) )( B- J9 Y% b$ w
continue;$ p2 s+ P0 y$ B9 K8 N/ T
if( pItemElem->IsUndestructable() == TRUE )
; G% J2 `7 Q+ v: V* V$ X& X2 v* S {& v- S* P8 h4 M$ J
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
6 ]# N4 I$ ^! x' I continue;# o# z2 t, O) B! K- X4 S
}; f+ u5 l3 H: ~1 l9 q- C4 w
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
# Y: G0 U; v+ n0 ]& F }
z. Y! ]$ ?- ^( ` break;$ J1 J) o* Z9 {' @% e
}8 _: m7 k: g% E: u8 `
case 1:% s9 i9 Q' `- s( s
{) h) x3 _2 {+ |3 @$ L
//整理背包1 h' _) A* }+ ]/ H7 ^. X
//////////////////////////////////////////////////////////////////////////' Z7 Y! R* B1 c. R+ O2 d
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
4 _4 b: g3 L5 H$ f //////////////////////////////////////////////////////////////////////////1 h6 u- _9 N" D" Z- q% H
//////////////////////////////////////////////////////////////////////////
6 @+ v& }' \8 \8 G$ k5 _* q CInventorySort* pInvSort = new CInventorySort;
) y0 n! [3 \; B3 |7 b) E vector <sItem> vItem;
/ [. @& W( p0 {# e& z* }% j, e, M vItem.resize(MAX_INVENTORY);//初始化大小5 L9 e$ | F$ [, y: R1 m
//////////////////////////////////////////////////////////////////////////, Z7 }& Z- I+ [% o G: ]7 _/ @7 c
//填充数据& `5 W" P8 D, U- l- [2 D
for (int i=0;i<MAX_INVENTORY;i++)# {" F; b, U; b0 n+ H
{ E; t! D# ?! J( {
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
+ x2 ~+ T" O- h if (!pItemElem)
5 q* s! v! a. Z. R8 |3 X {
& |0 h# i: w' ~1 x# ^ vItem.dwKind2 = 0xffffffff;
2 [$ @! X5 o7 d( l& C vItem.dwItemId = 0xffffffff;3 n0 @9 \; {5 Y) n5 L
vItem.nIndex = i;- X- T9 ^& a- E) [
}else {
* }* w. ^% M- P6 i C2 ]4 U; t ItemProp* pProp = pItemElem->GetProp();
0 ?& y: F/ w* x& U1 \# { vItem.dwKind2 = pProp->dwItemKind2;
, r ~1 z% c0 ]1 x& R/ \ vItem.dwItemId = pItemElem->m_dwItemId;* {* G$ D6 I1 k* a( u( ?( Q7 ?
vItem.nIndex = i;- G% T- Q8 r5 S/ W# U4 O8 B1 G
}$ K& A8 @+ u- a( D
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);: z8 E% L. Q6 s+ ^# A; Z, N
}* _; I* U+ A7 B
//////////////////////////////////////////////////////////////////////////
) j: S% _3 u" x l" R sort(vItem.begin(),vItem.end());//排序1 C; m& m) @6 x: B
//////////////////////////////////////////////////////////////////////////' R9 _' f, b' _8 ^
//交换5 s) w" Y) O, S+ ~) k# y/ M
for (size_t i=0;i<vItem.size();i++) F, v3 U( j; j. i
{
- p3 o; k7 o4 R0 U //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
7 n, N9 a9 T, c7 @* c o' N( s pInvSort->Add(vItem.nIndex);
5 I; j+ Q% c# j" U7 t( v }' [( i; ~! }) g% `; {( J t
BYTE nDestPos = 0;- Q( w( w8 F4 e2 F+ h" j1 f0 J
for (int i=0;i<MAX_INVENTORY;i++)
! S! z# \2 g% z% F- m# i$ m/ T {
. K5 Z' u7 H2 K/ ?' M1 w8 }$ ~ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);7 J X& I; r& X( i/ [: j
if (pItemElem)+ `' [8 u& I0 q. W
{6 Z) i) ~. P, d/ ^
if (IsUsingItem(pItemElem))
1 L. r, b! Y* N: ~/ t$ n3 T5 m {
& }* Z: {8 Y* b9 D //这个位置无法放+ {: g2 C% x! _
nDestPos++;
9 ` @* k. w- k: ]! { }
* U7 J6 a: `" j1 g& E }- }/ e2 g0 n8 _
BYTE nSrc = pInvSort->GetItemSrc(i);& B# H- V. n9 d1 {! L
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);) T- t! {8 h2 B) }$ ~" [
if (pItemElem)" T7 M0 J4 c7 B+ p
{
% t( Z- [- T6 U" y h7 { if (IsUsingItem(pItemElem))
! H- c2 Z% S$ E9 U" [; X {
6 S! W2 U3 A( d* I; w. @8 P/ c //这个道具无法移动,跳过$ h) I" N$ h/ C A" s% Z
continue;# P3 Z. ^/ A2 l0 f/ E6 w& _
}( q9 [4 E; i& ^" \& K% P
}else{
2 m5 X( D1 K u/ D //空位置 不用动, @, y+ _; B9 u+ {8 }% k; E; R! ^
continue;4 a6 U- D: D' V+ D# j0 L: u
}6 y, l9 Y' w3 w* e3 y) x
//////////////////////////////////////////////////////////////////////////1 X" _, P# {# A$ O& z
//开始移动* T5 b- M6 x) t/ C- H: b
if (nSrc == nDestPos)
! j; q6 W4 J" ]- N {7 o! e: g8 l" j, \
//原地不动4 r( j& R* _0 w" [- K
nDestPos++;
- u+ M' J5 Q0 S3 Y5 O+ N4 g continue;
" ~4 l7 J( U3 k1 R o }5 g9 n9 Y9 A7 x- @) v( m i: ^
pInvSort->MoveItem(i,nDestPos);
, x: Y0 U" w5 p g_DPlay.SendMoveItem(0,nSrc,nDestPos);
V: \3 N9 n9 }8 ]/ `! }. d) A Sleep(5);
9 g' Z* o3 a# ~9 ^ //Error("移动 - %d->%d",nSrc,nDestPos);
8 i2 V) K/ {2 t3 s6 _9 c- j nDestPos++;
" E/ p) V t, n }2 @ h% w: w8 [: u d
//取第一个元素的信息8 Q$ s; I# z" {7 D4 ]
/*
4 t: `8 n8 ]# m- Y if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
" \+ ] D. x; Y* l, |$ S1 c {
- @' b8 e. H& M& }1 f7 k Y Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
& X. T& Y- M5 p% v2 y! f5 q g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
0 ~& L( e$ R% l) Y }* l; U C; {. E+ x; D6 j, n8 I% t' S
*/2 F* o0 y1 C* j& `
//////////////////////////////////////////////////////////////////////////" g+ J6 F" _& P! r0 ?
break;2 u2 j N( q. R' Y: ^ a9 P
}$ k8 \- d& t- a: W" s) z8 P
} % h! v* R; ^$ j+ J& Y' h
} g0 I& v1 u% F" j5 ?
m_wndMenu.SetVisible(FALSE);5 l* K! Z& v" D4 u8 s
+ M. M5 ~, T/ o( |+ r& P+ ^) i. T--------------------------------------------------------------------------------------------------------1 ^4 U( l7 B6 l% P) k
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
* y! e# l5 C, R1 {' `{9 _ Y( T4 l3 K+ b
BaseMouseCursor();. d& E8 P' {0 S5 l% r7 J
}1 O; s! u, G$ q: p# p
在其下添加:
7 ?9 i. {' `9 z/ d) e Xvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
& _$ K& A; J5 P8 m; j% S$ l{( p& ~2 t3 a) n1 D7 h3 R
m_wndMenu.DeleteAllMenu();7 Y( `8 {& {3 C. u* u4 n& s+ d5 ^
m_wndMenu.CreateMenu(this);* k, m. q+ x% f$ G' v7 F ]! ]' \
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
! X& i/ M3 c' Z# U6 F: j5 o
0 c+ W+ h: G* V; G* e' aif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
7 n, `3 [- c9 B% U{
1 M$ ^0 {* r6 e4 m' l# {6 ~6 S //P以上级别才可以删除所有道具' i6 u0 U, G! v+ j# \) c
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");9 Z: n% v# q5 u+ w4 o0 u2 x# N
}" Q$ f% A n9 R+ o
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );' R) a4 J1 ?9 `6 o5 ?
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );5 r! D5 D5 `+ r8 q6 F; Q4 H7 s3 |
m_wndMenu.SetFocus();
4 h4 }3 s( }7 A- { \6 }}) e( \8 J% Y! k, U+ K
------------------------------------------------------------------------------------------------------------) w) E+ {1 r5 A3 g# h! O4 b
*************************
9 G4 ]- S. e% O. \1 \) m% ~7 v( PWndField.h文件
" S) D8 H: r" q*************************
3 b1 b! N! J2 ]' I* ?" L+ t搜索:BOOL m_bReport;
5 r2 T4 J$ ]/ x \) J m& C, L其后添加:
) d" O5 n+ W8 y* O" @( X, T8 ~CWndMenu m_wndMenu;
# |( ~' A) C, D" j Z9 w6 H搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
5 V; B: w2 d* q; }: @7 I- ^其后添加:7 i3 L! P* J( Z
virtual void OnRButtonUp(UINT nFlags, CPoint point);( ~( \7 ^: }/ H, w2 F$ M
8 E: B$ O- G2 H
$ j( y5 l+ s X# `3 C% U; h |
|