|
|
源文件中_Interface文件夹下WndField.cpp文件1 A! g$ w) k0 { V1 a
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ). ~: h" m. V! i+ ?- L* h! }$ E$ m
3 B" f- R* L, C0 q$ \& p
struct sItem' Q* ]2 B7 o8 c, B$ ?) ?
{0 c5 X" @/ ~. q6 [$ ]
DWORD dwId;
3 j2 g7 Z& R6 a; K8 k' NDWORD dwKind2;# W2 j1 c: |( i
DWORD dwItemId;
3 U# _+ H* G5 W8 N( E0 ^% VBYTE nIndex;
/ ?- w/ e! V+ y/ o9 h9 wsItem(){
9 I: }( L! H1 F: Y/ I- p0 A dwId = dwKind2 = dwItemId = nIndex = 0;: I( C4 ^& N8 M$ k( ~
}
1 P$ @ f$ R; I0 ^, `bool operator < (const sItem p2)
0 v: I X7 F! R0 T. b{, H! k4 Y0 s& R% B2 Z, r
if (dwKind2 == p2.dwKind2), M% P" A- q) z% U
{/ I- ` @2 u; U4 ^& I8 |( }5 c
return dwItemId < p2.dwItemId;
9 |: W* }. q u" L }else{
7 s; d! i* I7 ]& V+ h. s) |0 M return dwKind2 < p2.dwKind2;
; c9 t2 W9 {0 W" Q$ n. ]9 Z8 r }
4 A8 G( O; f2 m7 k1 V$ ~3 {}
- j% I4 e8 P) R5 j7 z1 r- w4 \' R3 ^# O};) G7 f- i2 |8 F9 f& s, Y
class CInventorySort" v( l9 ~5 O' M9 n% S1 ?
{
6 I3 d# C# d, J! Spublic:
' q! Z6 B2 Y* w9 xCInventorySort()
1 h$ t* ]) b4 F7 g( U- g1 j{
) g3 f. @ w& k3 M: X m_dwPos = 0;
* H% \1 `" Z- t& W( i& r}8 r$ P9 l3 f- P* c K _
~CInventorySort(){}6 O6 n |, B; u, o: w
private:: ~$ a4 z( v+ z1 g: G: y# v% [
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息* i* `& w+ b7 V, n
DWORD m_dwPos;; o* y* h9 i) u; U
public:* c' f* i: z @4 T9 E% u
void Add(BYTE nIndex)
( i% ^1 t E! o0 |- u1 E{9 j: v1 C7 Q& q q, U
if (m_dwPos >= MAX_INVENTORY)- Z% K* ?% } R+ i# d
{+ z9 t, \2 d. m
return;3 K0 U/ c! u6 { R/ W
}
* A4 |* Y% P8 ^3 U9 f- O7 Q m_Item[m_dwPos].nIndex = nIndex; `% Z' {- f3 T6 N+ b: W
m_Item[m_dwPos].dwId = m_dwPos;$ s1 v$ a. y* |# M! l; I' s
m_dwPos++;5 @3 F& w& v+ A2 C( G) O
}
- i9 z- v* x% s; Y5 FBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列: z. I* b r9 ~* G' s
{: E( x, b9 m3 |8 F
for (int i=0;i<MAX_INVENTORY;i++)
! O: ]2 ]% P( U0 Y {
n9 |( j" Z" a' a if (m_Item.dwId == dwId)7 w. y( L8 N9 A! \- S
{& Y2 \3 C( X9 x
return m_Item.nIndex;
+ t7 n7 }% }6 n T }+ |1 ]) S# ?& r
} J% X+ \/ H* |- d
return 255;+ ?1 k- Z* ?+ h( D
}" K( K* I: d. D* z$ z
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置5 v& L% Y* E7 g, T% c2 t) P5 N
{* z" E5 U1 T7 m& w$ w8 ]
BYTE nTmp = 0;
- }; c. L% m, M. l bool bDest = false,bSrc = false;1 ] Z: S0 y2 X. X; S7 H% g
for (int i=0;i<MAX_INVENTORY;i++)
) ]9 g% K2 O- V! m: r {
G8 P5 f0 Q6 R* d6 l if (dwSrcId == m_Item.dwId) p, `4 m% N, L, ]
{
! Z0 w3 w0 |) @5 d9 S1 W //id相等 则 改变对应的dest和src' Y( S; H [) i
nTmp = m_Item.nIndex;
! U' K* m5 y7 Z m_Item.nIndex = dest;$ p" p0 }; e$ D. e, }( i9 ^
}6 M$ p* X7 y# Q
}( r# x# `8 g5 x* ?
//临时数据保存完毕,交换开始
5 d! {/ q2 G, }5 f U- i for (int i=0;i<MAX_INVENTORY;i++)
?6 Y5 Q0 z3 A0 b8 z: @+ p {4 e0 F& t2 M& g( ~, U
if (dest == m_Item.nIndex)# @0 W# Z5 @2 N9 E; r
{0 l9 Y1 U) Q, k* _
//id相等 则 改变对应的dest和src) O4 F( \! \& C6 I* ~% T$ ?; S' E
m_Item.nIndex = nTmp;
3 ~ D3 p1 w" P8 u7 y0 W }
, G6 n+ ]+ |$ U9 F0 C4 e5 `# U }
" B& B. |: ?: C* X V5 I}2 N# w+ F; G. m5 E9 v
};
7 O: p3 r; \3 O" \-------------------------------------------------------------------------
. ?- e" ?: W) Q5 u* [, o依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
2 W* s% \0 u3 J `搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
4 j# p; x* J: {7 L) k紧靠其上添加:' G7 g: L8 D6 e" c3 C
if( pWndBase == &m_wndMenu )
' C0 s; J* ]. v7 s$ B; o{: p/ w3 u! T; C/ p O" R3 S
switch( nID )
|3 V: P- O1 v6 `. D/ j6 p( q {' I* _2 [1 [ D) ~8 c$ @! }
case 2:& k4 u4 y, r2 V; y$ L
{
% w3 Z3 H- \2 p' g# } //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);- j. l. f' P% x7 p9 P& ?( N3 M
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))1 E8 i, T7 i% V1 `/ [
{3 r' i3 G1 u1 M+ @7 S: ^
break;! }% j: u n+ S! d/ }
}- T' T$ j9 l9 c9 x
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)( e7 A9 n: B H3 Q
{
+ f& F/ Y% M S% b& V/ P5 E CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
2 R. s u% E4 ]% i* ?( S7 w if( !pItemElem ). O& w2 Q* w8 v4 n! T2 b; b
continue;
( l8 t+ h V0 R7 T g2 F$ F5 w if(pItemElem->GetExtra() > 0) K* k4 s; e0 k/ {/ O
continue;( W, j# n& @. A
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
, |/ s* A3 m* M% @( u9 x+ q continue;
' \& c4 L4 ~6 l8 Z( x: J+ y% m if( g_pPlayer->IsUsing( pItemElem ) )/ ?& J* V2 V% w4 |
continue;
0 c& k8 e# A {5 C; Z! ^- Q* p4 i if( pItemElem->IsUndestructable() == TRUE )+ c6 P; m% Q3 ?- O- h# z
{2 l+ x- e5 t r( e
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
) N( T3 }! ]6 t continue;% c% ?8 q7 t: y) n; U% X% [4 y6 O2 V
}
" g6 f. x4 e! G$ q( b* b$ G g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
. T. O! s0 v! d2 F; X2 a }
# E6 W5 }( @2 ~( R* z1 f break;
2 u1 }$ {/ ?( H: r, p }
$ Y9 w( U( B; ]- X( w4 `7 h: p* o! i case 1:
* b* P+ @; `2 V- F. G1 C; X! G {9 `* f7 t) z* I: N
//整理背包$ F( m3 K" m, L! f4 V
//////////////////////////////////////////////////////////////////////////8 O5 p# A4 b& ^5 B
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
4 P* B, v; D5 u3 p( u2 ` //////////////////////////////////////////////////////////////////////////
, R. y3 r* T f J) c5 [: E+ [ //////////////////////////////////////////////////////////////////////////
r2 s1 V5 o; {! `. l( N' h N CInventorySort* pInvSort = new CInventorySort;
8 J8 _8 |! a, u; x: @ vector <sItem> vItem;- i$ |0 q1 q! g0 V5 w
vItem.resize(MAX_INVENTORY);//初始化大小* N c8 m1 e: S1 m
//////////////////////////////////////////////////////////////////////////" u; B, D& j$ T6 O
//填充数据
* E6 w5 i, j6 \, g for (int i=0;i<MAX_INVENTORY;i++)' s4 l' y) G- \3 @8 r
{+ j# y3 V/ k0 h
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
4 V, k/ @) d! J if (!pItemElem)1 H; q& U+ b8 C) I8 r+ \
{: r) X& F* G" j1 g ]* m* f1 p3 r
vItem.dwKind2 = 0xffffffff;
4 d) y( M5 p/ g' p; j* Z4 K. m5 m" l vItem.dwItemId = 0xffffffff;! A2 l3 K l, x: k5 l2 u9 j. V
vItem.nIndex = i;9 C1 r( g% C6 b5 p
}else {& \ l+ C. o# m
ItemProp* pProp = pItemElem->GetProp();+ D! j- ^3 I9 e* e
vItem.dwKind2 = pProp->dwItemKind2;
( x+ A) J% b0 P" n( G vItem.dwItemId = pItemElem->m_dwItemId;
: d; D8 Y3 Q* P# y. e vItem.nIndex = i;
; J8 U* V& M' b }- f3 g2 M* M& I* R
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);: F( F% D1 L* y$ O2 ~
}
" c7 M) Y. s: J% r: L" d8 z //////////////////////////////////////////////////////////////////////////
2 P7 t: c h; U! ?4 `; q9 M4 @. e sort(vItem.begin(),vItem.end());//排序
2 ~* g4 c0 [5 ?/ a$ F //////////////////////////////////////////////////////////////////////////
: O$ m# e7 m; z! K3 x& y //交换1 L8 @. |% P8 q
for (size_t i=0;i<vItem.size();i++). U4 T. f* W1 B5 s, @# n
{1 {+ S+ y. M0 ~# x) [2 y
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
4 @9 W. L4 C) i$ K* A pInvSort->Add(vItem.nIndex);
) k4 Y! p$ J! a! y) p# D3 Q }
- @& ]; Y+ D" y1 L BYTE nDestPos = 0;
; X+ P4 X/ v8 L n+ ^* S$ H for (int i=0;i<MAX_INVENTORY;i++)
$ F, A8 ]% \6 G' v6 T. {* J { u* I; u$ y) r& ^
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);2 p# k* v+ x1 M O7 l* g" z
if (pItemElem)4 B u3 J" _4 A( M4 m9 P+ p6 j
{
7 | w" D0 j* M if (IsUsingItem(pItemElem)): x3 V6 F% Q- Z- x- \. J
{9 p8 K( V" L- D6 q1 ?
//这个位置无法放# w. a5 M+ a1 B3 S1 D s8 N
nDestPos++;
# w- t+ P& r0 ~2 k: N. s8 w# Y }/ `0 e8 G3 n9 j5 ?# u; J5 g# h
}
" f- [- y, H* t2 c6 X4 r! | BYTE nSrc = pInvSort->GetItemSrc(i);
7 P- k7 ^; Z8 z+ q pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
4 u* _# K* R- y+ q if (pItemElem)
5 m0 g. V: [3 u: n; o {
5 t5 i7 s! U0 l. B P' @" C ~ if (IsUsingItem(pItemElem))
. S/ {0 `$ [+ t0 Y" J {5 _( [! F' p3 `3 N
//这个道具无法移动,跳过/ @/ H f* N: y6 E
continue;3 ?! y6 o* G: Z9 b/ n7 h" ~
}
# M. t5 ^8 F$ G0 H3 y( f6 x7 ` }else{* w8 E+ U- g: D; Z
//空位置 不用动
; P7 c3 i7 \ s3 a9 | continue;* T, S8 Q E. S" J7 l# d6 K# r
}
, {6 x: s3 v4 q7 w2 U //////////////////////////////////////////////////////////////////////////
* W: I( a) M+ v! w8 P5 S. h, ` //开始移动* d2 E" X5 I" @1 A) S
if (nSrc == nDestPos)
6 ~4 V* G2 | T3 Y& V r$ V: d {$ M5 T! ~9 _- L. B
//原地不动3 r v) c ~6 u9 a! J# V9 j
nDestPos++;" Y9 ~4 f* R& [' l
continue;0 I; b c0 S" P0 ~5 |5 c1 `- x, @
}, Z7 X5 v( p. v/ l1 c# N' b
pInvSort->MoveItem(i,nDestPos);
& Y- L7 j+ ^9 m& Y g_DPlay.SendMoveItem(0,nSrc,nDestPos);" B7 g* C) \; B& n5 ^* X3 z! ^; z
Sleep(5);
* v. \; ?+ G# Z1 H //Error("移动 - %d->%d",nSrc,nDestPos);! v% S4 G. F' `+ `
nDestPos++;
2 P0 d4 q8 \' I7 u2 P% d# X }& v2 e: W9 L) {4 B8 |' O
//取第一个元素的信息
1 G U5 I J0 ?) Z! F /*
+ U2 L4 }* {; ` if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
! i4 L2 ?3 M6 C( @9 h {2 `% a. _' q/ t* z- n( i/ v
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);# n; Y7 [7 z/ L: j3 Y* k4 C g4 p
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);8 B U0 M& R1 D9 j
}
% h' F2 h* o* { */
" ?' D& q- Y3 \& ]# H$ r //////////////////////////////////////////////////////////////////////////
: `6 ~- S& f' Z# [* U k break;
9 h: P* m6 m. A+ I' E! f' e/ ]" V }, P9 f& S+ e* U5 U" `
}
; G9 f( b, p& \/ A7 ^9 V! [; v}# j0 h6 b2 }4 i3 u7 U' l- N" g0 F
m_wndMenu.SetVisible(FALSE);
0 `, K4 K7 f0 b0 t
! s- K6 U+ F: ]. d* }0 o5 I--------------------------------------------------------------------------------------------------------" t7 K2 \# G q# E0 ~2 o- `4 Q
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
4 a8 }; h8 @; l, G{
8 K" _" g6 u% PBaseMouseCursor();9 ?) s7 N: a. Y; Q
}0 a" P! x" o, i2 |3 P2 M
在其下添加:8 v1 T- n% I1 e+ N# O4 A
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
9 E$ Z' ?# y+ V{8 K: ^2 f6 @1 O, k: y# R7 t, k
m_wndMenu.DeleteAllMenu();
( f* ~: A5 i( ~+ @m_wndMenu.CreateMenu(this);5 K: n3 H! l* e* D: n8 O+ w
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
+ m6 E8 m8 D1 W: b1 [ E( E$ Q r. U
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))1 w+ f' d0 M) p1 r1 ~6 f
{
H! o/ p/ @: V! I* M! c( j6 [ //P以上级别才可以删除所有道具
; Y9 m& ^8 l( U- {8 I m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
1 w) V" V6 n! W+ u2 R}
+ u* }0 H( b& ?- r& E: Z4 P1 xm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );9 i [8 Y# r- m- o" f% t( Y$ o! ?8 _
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
7 Z2 k) A, a, `m_wndMenu.SetFocus();
1 p" [& @# y! L; v; r}; w9 c( N: d: r& o6 ]) R
------------------------------------------------------------------------------------------------------------3 H& p* E! t- v( ~
*************************% h- g& Z5 \) y4 n$ C$ \
WndField.h文件
% E$ _/ u/ k0 C************************** @( N7 N& a9 C" I+ M+ I
搜索:BOOL m_bReport;
* a' y% Q' E( k+ U% U2 r/ q4 K其后添加:
* D2 A! S( C* `% Z: Q, O3 qCWndMenu m_wndMenu;) E, v9 J6 F& q- N/ b. Z" E }4 \
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
8 V+ Q/ h, {1 o+ i4 O0 K$ B其后添加:7 H# N, p$ A1 l4 o7 }
virtual void OnRButtonUp(UINT nFlags, CPoint point);* w5 J0 H+ X0 i2 J2 }; ~' e' l
/ L# u* t5 r- r8 M; i2 P, p
3 j7 D" L5 X) A9 a! d# | |
|