|
|
源文件中_Interface文件夹下WndField.cpp文件& [& E" |5 }! ^% i% d
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ), h4 }+ {5 Z$ i4 E' i+ W
7 V* E4 o. Q1 R6 O! W
struct sItem
. {3 t" p% W- C5 K# T{9 Y- J7 I: ]( r3 `6 t& ~ s! I: f
DWORD dwId;
9 @1 d8 P' f) YDWORD dwKind2;
8 U5 B7 L q {2 ^% HDWORD dwItemId;
% s+ l% T) d: o" R6 U+ j+ pBYTE nIndex;* ?5 m( B: A; H% [$ y* A+ q
sItem(){
$ ~ \/ S) s3 n& Y0 a dwId = dwKind2 = dwItemId = nIndex = 0;/ e" A9 a% K) @& u4 L M- Q
}
- }$ [3 i/ z a; f( `bool operator < (const sItem p2)$ J% V4 K$ f8 {( D( c
{; y# Y7 L9 Z% R; l$ R* P
if (dwKind2 == p2.dwKind2)
! I8 o, e( m$ W {
+ ?+ O$ M- ]5 w, [# s( m return dwItemId < p2.dwItemId;
: a4 @ h# J3 f0 z }else{
5 c8 p) @2 e) A0 l, F return dwKind2 < p2.dwKind2;3 D* |4 a% h2 d$ L/ m, U8 Q( Z7 |
}
6 ?- w. _5 B1 u3 f}% t2 V3 n- ^. ?& r) p
};" e9 u3 M7 p% ~: l
class CInventorySort4 r1 r3 t! ~: j; J2 X4 R$ q) U
{+ y$ C5 t$ Z/ o& U3 ?$ Y8 z
public:% E6 Y/ z+ Q. H# D' @
CInventorySort()2 r+ G8 ?5 I% e5 K4 v: f! u1 u
{
6 k' i+ Y$ _$ A! T6 H3 A, A$ O m_dwPos = 0;; E p( {; h- t: k. ~/ m
}
. G3 ^9 n) c$ U- d4 U2 P9 ]6 {8 z~CInventorySort(){}
# Z1 h# E$ N _' F' G+ b6 a! Uprivate:
! x* ^% c) d) F, U, [/ i o& osItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
* _4 F) r6 e1 X; i1 R7 Y& `DWORD m_dwPos;' \ Q- o& g3 C3 w$ b3 n% t
public:% X1 M4 k4 k: ~. j z: c, e) j
void Add(BYTE nIndex)9 u& W T) Y0 ]* T' k2 y' E
{ P/ N3 X. @5 y) M' ~* [" x
if (m_dwPos >= MAX_INVENTORY)
2 ~; W; D0 |, U( K$ g+ z, t {' d6 W, G1 G! N8 }7 B
return;
7 c' F' M5 U/ l! X* V. Z& w }
7 g, u" {" {, Z8 D X# ?6 m/ U m_Item[m_dwPos].nIndex = nIndex;$ Z2 x: U& l% a4 {
m_Item[m_dwPos].dwId = m_dwPos;
# |& o) f0 S6 o5 Q0 w% {0 t m_dwPos++;5 Q3 V% A( @1 L# t6 J' w1 h
}2 [% _/ L" T* C0 x! h
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
/ ^: T, v& r8 P{- ~: i e" v& F/ H
for (int i=0;i<MAX_INVENTORY;i++)
' `; {* b# [8 {5 Z0 N( U3 d {
6 Q8 @/ |, }# l" J# z6 u; C" K! m if (m_Item.dwId == dwId)
2 D9 z1 J+ D' q/ v5 c: U: E {
8 s1 N1 S* ]( P return m_Item.nIndex;
+ p3 G: R \" a/ h; e( ]( K& ^" {1 s } D0 S' Q" H6 e
}
+ l/ M1 I+ [4 a return 255;6 q$ [2 c0 n; J5 c$ X5 A
}
! P" E: P8 b m: S5 @9 qvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置4 J9 {6 I5 P6 }( I+ R* S
{* G: X- J/ ^1 D, i8 j! j
BYTE nTmp = 0;
# x' y9 H1 ~* `& d/ Q9 E( t/ m" b bool bDest = false,bSrc = false;9 T$ r& Y- r m+ P
for (int i=0;i<MAX_INVENTORY;i++)
3 \. I) {& u1 i9 T+ Z/ e; C1 C {
0 i5 O$ ?6 C3 g% t/ i; l7 ^, V if (dwSrcId == m_Item.dwId)9 H/ b% j4 N; \6 D6 W+ X- U* a
{
' r/ t0 n1 Q' A7 s //id相等 则 改变对应的dest和src
$ T4 m3 l" `7 h, L2 _ nTmp = m_Item.nIndex;
3 r: @% J5 m: _1 k- \/ l- r m_Item.nIndex = dest;. U7 J6 S$ p$ u, x- r
}" R/ i1 v" W2 H
}! H6 u- B6 b* V7 m& t
//临时数据保存完毕,交换开始
. {6 B: g$ o+ b( U8 V& S for (int i=0;i<MAX_INVENTORY;i++)
0 I" y3 o: v+ k3 ]7 h+ w. Q2 M) i" e {
0 h( H8 [$ a, j! i0 ^ if (dest == m_Item.nIndex)
. D. q7 ]3 M( y* }+ c$ l- {0 J {( [7 Q2 f1 Q" ~0 @; \3 Y( n! X/ G
//id相等 则 改变对应的dest和src
. t, a7 m: B" ?% c m_Item.nIndex = nTmp;
2 }9 P9 M$ I1 R1 i }7 U9 ~6 n# E. X8 |! S: M1 E1 c
}
0 L2 \3 k- O2 W$ ~4 z}8 w9 I6 T9 a% [0 R9 o$ R
};
7 W0 N) e( Y1 b" ?-------------------------------------------------------------------------
2 @( u8 ~* |( t3 c依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
# W: a4 ^+ _2 z% @/ U搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);- o5 w( {" w5 `1 ?2 k
紧靠其上添加:2 ^& S! ]5 D! ]9 C
if( pWndBase == &m_wndMenu )3 m% h( }2 ^6 W7 m* c ^* r
{
" S$ y2 F- ]6 O% i, c% a% Q switch( nID )1 p* y- _& X, {; s! i8 h9 D
{$ k' p, h1 }( M
case 2:
) m" `7 L/ N! o {
0 }; i, E& z b! v }* c3 w //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);/ L, u5 q1 y. x7 n
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))# \4 H7 H5 |. K1 f
{8 \1 ?) q" @- r! W& X! g) h- L
break;
. b9 I) z; i: E( Y" g }0 \4 S; @/ S E1 ]# `9 P
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
/ A6 P* e& _! A% |. W {
* L0 `3 i/ H& s4 I& H7 J& v3 y CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
+ j+ {1 |8 |: p5 f+ E" N4 [ if( !pItemElem )& ] M$ d3 t: [6 s
continue;
1 t1 m7 a. ]+ R0 y! h2 P if(pItemElem->GetExtra() > 0)) @; k! J$ f6 z3 f9 X1 f+ P! T
continue;
: ~- E0 ?* P2 N: K8 t+ `+ o9 V if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
V6 d) ` Q$ y$ g continue;
3 [) W0 _& U! T, R: j if( g_pPlayer->IsUsing( pItemElem ) )2 A# P' q" C2 O' _3 P
continue;
- z" w6 g O8 \* q if( pItemElem->IsUndestructable() == TRUE )
9 d u7 p. r3 w+ z8 ] {$ Z: V$ [7 A3 c) g$ Z9 h! i
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
6 S& F8 V5 n0 _ continue;
' S: m* e8 I3 ^; ? }
, f. u7 ?& N) t, b" ~" m$ z g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
^, u4 ]& G7 |+ r9 A }
1 q2 P `# h' c1 E: d break;
+ D# k7 `3 e; F0 `7 q( I+ H }
6 y5 z, D0 p) r5 q% K3 c case 1:
! N3 |3 p! C& R" v5 E2 S {
: u$ x/ x& V2 K3 S5 U$ { //整理背包& o, N( T; l, e! Z7 f
//////////////////////////////////////////////////////////////////////////
. C, _$ |$ d& c: j) E //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
: p5 O, C4 b4 k D2 j: } //////////////////////////////////////////////////////////////////////////% w* k; K4 W% E* t! _- Q: R
//////////////////////////////////////////////////////////////////////////) ?/ [6 j* D6 r" }4 a
CInventorySort* pInvSort = new CInventorySort;
7 F m' ^: m& w4 p vector <sItem> vItem;
2 b& A2 J9 `4 W" X6 f+ K vItem.resize(MAX_INVENTORY);//初始化大小
( ~. |7 T$ g3 z" Z" D //////////////////////////////////////////////////////////////////////////9 b0 C: s/ N! V8 s# x" I3 i
//填充数据" p8 H. z. i) M
for (int i=0;i<MAX_INVENTORY;i++)* |' f6 @: x3 D. `
{
8 }9 o: ?, F& i$ G7 {/ t CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);+ X9 m) C: J. Y7 K; m. U
if (!pItemElem)
6 D$ K3 y1 K; K) p9 W {
+ U' z% {" b [8 z2 v4 ` vItem.dwKind2 = 0xffffffff;# m3 {" [. L5 [0 J3 w
vItem.dwItemId = 0xffffffff;2 s M" F: h$ L
vItem.nIndex = i;
1 l8 V5 J: {9 T/ T: a }else {/ c+ A& _2 M) \' }, u
ItemProp* pProp = pItemElem->GetProp();9 N8 V# B1 c- k" }/ ~; D. Z
vItem.dwKind2 = pProp->dwItemKind2;
/ ^ z. g& b. }6 G vItem.dwItemId = pItemElem->m_dwItemId;6 W! E, o% Y6 g. e; T& x- ?' X
vItem.nIndex = i;
) j5 ^ }& w: J0 F7 k8 L* y }( [/ P: E$ K" N
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
, D0 y6 _" @" ^( t/ o1 v } @7 g9 A! N6 \+ N5 {
//////////////////////////////////////////////////////////////////////////
3 y1 }3 F/ f) \ sort(vItem.begin(),vItem.end());//排序 `" @; g5 N3 ^& N }4 E$ t
//////////////////////////////////////////////////////////////////////////% N) g2 c/ ^! U( s/ J& j
//交换" o! @0 V+ ?* R' X1 z
for (size_t i=0;i<vItem.size();i++)
7 \6 g, m( _$ `+ b" k {& v; M1 Z: R# E6 j/ f0 J
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
) z5 t% g4 Q* ]' }! } pInvSort->Add(vItem.nIndex);
" Q9 `) W5 z+ \! P/ C2 }) \ }
! z$ |+ {* n. z! W+ T( U1 X2 h BYTE nDestPos = 0;3 S1 n& Y% ] o3 ^- L0 M; O
for (int i=0;i<MAX_INVENTORY;i++)/ p; o4 r0 ]/ N
{6 l; ~7 j# t3 I/ H( U; m# o
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);9 o: R6 i* v( J; G8 e8 z
if (pItemElem)' K8 B& J) q) Y* d" W) @) W: S0 H
{
' a+ J# a& e. ?* e6 T9 S if (IsUsingItem(pItemElem))8 ^' {+ N0 i$ i+ z3 w
{5 {3 o# P3 N! _/ D: Z+ i
//这个位置无法放$ T" s' H8 Z, q; F( q6 {
nDestPos++;
6 @( e3 G# \+ b+ ` }
/ t2 L5 P1 T3 y" C }
+ _$ z. x' `9 w& u3 y6 l2 c BYTE nSrc = pInvSort->GetItemSrc(i);" t4 a+ g, \4 q; `, A( R9 j
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
5 x8 s: Q) v' v# M# ] if (pItemElem)
. Q; {$ _+ r) Q9 A7 O# V {$ D* x$ T& \; H3 y- P
if (IsUsingItem(pItemElem))' v9 _# A" C/ n8 } i4 C5 g
{
- j$ c" h8 B& k4 Q //这个道具无法移动,跳过
2 E$ x+ Z! z: n& Y2 s continue;
n7 n1 _, k3 i% m, n6 J3 L }
' V2 }' k) {7 [ Q6 T* v& R+ y }else{6 v3 B1 p1 d9 U
//空位置 不用动; j5 E" A' m+ h: Z" O/ V
continue;& C& k7 N7 {) a/ F4 C( S: {
}( o& V! X/ V/ V! `
//////////////////////////////////////////////////////////////////////////
' S7 z+ q0 W; B: t //开始移动
( \' J8 h) r7 J c# s g if (nSrc == nDestPos): q; ?/ v# R3 X. Z9 X0 M
{
7 c T# D! m0 S& W5 M$ _, F //原地不动
( l; K: u1 v* W' y6 | nDestPos++;: h$ T" ~2 z$ ?4 n( t- z
continue;+ P' d" p! \5 U7 ~2 E F
}5 Z* C! ~/ x% G/ k1 X5 Y2 P1 w: k7 A
pInvSort->MoveItem(i,nDestPos);
- E8 E; u' a- h) M4 r g_DPlay.SendMoveItem(0,nSrc,nDestPos);! l3 n9 r2 J5 h E* m
Sleep(5);
' \* F1 M1 S' a; b' |2 o& p! n //Error("移动 - %d->%d",nSrc,nDestPos);
- I; n8 J: ]8 G' a" u: T nDestPos++;
1 j5 O. c" x9 A( L$ ~; l }: Z" a0 N6 M2 s% ~0 w9 A4 @$ `" K
//取第一个元素的信息
' u F7 k7 k2 }6 ^* C /*
6 r2 j- a7 }5 G9 C if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
2 e7 d( w5 r! a {
$ Z" j& O. t" N* s. s. ~ Error("Move - From:%d,To:%d",vItem[0].nIndex,x);: {" L5 q% n5 j g* B j
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
$ @# C l- n* b5 F9 V) C8 V }& A5 E) N: E3 E4 c
*/
6 ]3 X% ^ j, a1 S+ l //////////////////////////////////////////////////////////////////////////
) [$ u$ z9 |' d8 K. ^+ i break;
$ G. V( _- A/ E5 j/ H+ n" w y }
' R, Z" ]1 Q6 O: s# h! f }
* j- M F8 g1 q7 ^) T+ G" K}
8 D; O, H* P. n+ S. n* {; pm_wndMenu.SetVisible(FALSE);
* s; o( M; u& Y6 g% p( { _
. c- A+ E9 `6 D2 c" W& D& Q--------------------------------------------------------------------------------------------------------+ P, x; b! n: [7 {' @9 R5 [: ?4 @
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
, X6 f, T* v" f3 o* M- D2 z& k{$ }& g8 L% v6 z
BaseMouseCursor();
3 W" N, W% S/ G# h. z4 [}
' j% O% f3 i0 a. Z在其下添加:
1 I5 |) B0 x6 Gvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)# V ^6 L- Y, c( i# e( n. d3 p- `
{- J5 W$ o' h: ~+ x; g# }" v
m_wndMenu.DeleteAllMenu();
- A& L( F) l& @: lm_wndMenu.CreateMenu(this);
6 t8 U( \0 z, f4 q6 a( d6 Z! Am_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");( \/ E/ Q+ D5 j- M8 R
: b3 v7 i; h4 v4 R4 kif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
- b: G1 j/ Q) i{
1 _. N9 u( J1 L7 o" H //P以上级别才可以删除所有道具. J: m4 ?, W, f, X `8 y
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");4 T: D# s2 F/ G" n; l8 L
}
: d" j- e" V; ?9 t k. Jm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );( D/ r. _ b3 ~7 L
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );5 ?3 z7 Y% o% V7 \
m_wndMenu.SetFocus();" n; E! C& Z$ P- N9 S3 u/ J) z& |
}, }: ]% M2 u9 h6 K- X# F9 b' K3 F/ y7 b Q
------------------------------------------------------------------------------------------------------------" ]" ?5 v7 L2 f
*************************
8 W" c+ q9 s1 n3 h$ [WndField.h文件+ u" ]6 Y9 }8 O- {. z
*************************8 V. A9 F5 p( o% v1 d6 S5 z) ]$ J
搜索:BOOL m_bReport;
( p: j8 `) H( H* d! N! D其后添加:
6 A9 g. u+ N8 ]1 L, y0 g+ ^5 x5 zCWndMenu m_wndMenu;4 R* |0 x1 p8 U( G7 B
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
( c9 H( S- X8 u. q2 |其后添加:
2 P& ~( E9 u y8 pvirtual void OnRButtonUp(UINT nFlags, CPoint point);
6 ]) ~4 L2 Z6 |) n" l x0 M6 ?
- ^0 }7 t; i: c+ ?+ `6 ?' m" A
) G! |0 G' w- {( ?9 O9 p |
|