|
|
源文件中_Interface文件夹下WndField.cpp文件- U9 `3 @# |6 R& W0 _
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ); a+ d {, D3 H' A7 M2 M; V
' Z. l, d& A- Q' ]- ?" m
struct sItem- R+ }& T" ^: ]9 S
{
" f/ ^8 k% O' aDWORD dwId;) n C* Z- O+ I9 c G- p9 G
DWORD dwKind2;
0 w0 t+ m3 p6 t1 v7 |- b- J2 o- LDWORD dwItemId;8 @6 A3 @8 w2 s7 C c, c1 K8 }
BYTE nIndex;; I G* \, A- C9 G
sItem(){
0 G. x7 T5 v ^, ]( P7 }9 f, M) O; Q dwId = dwKind2 = dwItemId = nIndex = 0;% }. X! ~$ {& @* V7 `1 `6 U4 ]
}
4 u) U4 x; }" h+ b$ bbool operator < (const sItem p2)
5 d# M @9 {8 X! m# D8 J{
G5 h. B! W( u" G- c if (dwKind2 == p2.dwKind2). O; l% X4 t) g
{
# i9 U6 O7 o0 m$ |& R# e# C, T return dwItemId < p2.dwItemId;
* f; m1 R* p" H/ n# Q, S8 v }else{! B* M7 ^! z( b
return dwKind2 < p2.dwKind2;, }' @; }$ k. z- A* n, L' X
}
% E3 g4 m+ U7 b- a8 P2 w# x}
4 {; C7 l, l: `};; s; h9 s E* w6 S; v, ~
class CInventorySort$ U3 Q% M& o6 j& s
{
a4 E7 c/ Z' X( }public:; |5 o ~( S! W* W
CInventorySort()( S/ l- Y% {3 f4 P
{
- ~: N/ |, Z! w3 ] m_dwPos = 0;
, X- _2 X$ F6 b b# i: U}
n$ }9 m( Y8 S~CInventorySort(){}
* b; }* Z# q% ~! B) k/ m: P- j7 iprivate:
0 ~2 P( P2 x( a4 q0 JsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息; ^* `. Z1 _) ^
DWORD m_dwPos;
T% v+ x& o8 a$ ipublic:
" D+ d. u+ A# G; Tvoid Add(BYTE nIndex)
) b% E$ o+ b8 |" i8 o1 F{, _/ B% o/ ?9 _
if (m_dwPos >= MAX_INVENTORY)
* x* g$ q( B x; r; P4 K+ u1 i {4 u4 H: e) `* F; Q: N" T4 c
return;
9 |+ ]* ^. [% |) B- i' C }8 k; M# h& C4 ?8 G. l
m_Item[m_dwPos].nIndex = nIndex;# ^: f) C y" x
m_Item[m_dwPos].dwId = m_dwPos;+ x" y# |$ a" z$ q6 R0 [
m_dwPos++;- T1 ^3 P, D: F* j# q. t) _2 U
}6 S4 e4 u% b1 n
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
* q8 d8 ~3 M) h{
6 d2 ~, ~* r' z( R2 N' s for (int i=0;i<MAX_INVENTORY;i++)3 J# A# m. h4 J4 Y7 @( [( P
{1 R7 W$ A& Q4 r( G3 a
if (m_Item.dwId == dwId)
& Y0 q6 P% ]0 d. g { j8 L% n: ?' o% s
return m_Item.nIndex;2 v4 }/ @% L/ B6 L
}
3 d: X5 V6 _. G+ V! [8 v }
% ~& K0 s" v/ }7 A. Q return 255;
$ Q% K1 \$ K) c}( @ b) {( j9 \4 e! r9 [, E
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
0 r2 O1 [3 T. {{
1 G1 E) } o2 @+ j# q5 v BYTE nTmp = 0;
5 f. g: H) |4 d; I- j bool bDest = false,bSrc = false;
" q% g. n& Z- \ for (int i=0;i<MAX_INVENTORY;i++)2 h# L, M: f+ X; m$ i
{$ n$ n% g4 h1 J; R5 S( \# o, A* [
if (dwSrcId == m_Item.dwId)+ }3 p& Z' H4 |
{
* @% F2 j! n$ C: D. j: d //id相等 则 改变对应的dest和src- Q: W5 b7 @6 i4 p
nTmp = m_Item.nIndex;8 I m8 l" N& X, e5 I
m_Item.nIndex = dest;; F9 M( h2 ^& g: s' h
}
! K& w j) r* s3 x }
: `+ Z. ]8 n2 j+ E4 c/ P //临时数据保存完毕,交换开始2 B, h$ {0 c& ?0 v/ \
for (int i=0;i<MAX_INVENTORY;i++)
; ~; q2 r- v* N* j1 i6 I {5 [& V4 Z# a8 T: J
if (dest == m_Item.nIndex)
5 O2 u+ q. L5 N: w0 K+ P {2 ]5 J5 r) B; l: T! Y3 L
//id相等 则 改变对应的dest和src0 D, ~+ q {, i8 C
m_Item.nIndex = nTmp;
4 ^+ O: D+ W! [ }
- K7 [2 r4 Q" m }- Q$ W# R }
. j$ _& G" h' P1 \}# U o+ ^* V3 w$ G) ~; c; `8 c8 x& {
};( ?* k4 z% h4 `( _' @0 Y
-------------------------------------------------------------------------, \5 |6 I8 n! f; A4 E0 _
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
' l7 \. _, _% U4 |2 G4 Z9 T搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);* u4 V" |) o) U3 e% s& N
紧靠其上添加:; [9 |& W( y- J$ D3 G# U- V
if( pWndBase == &m_wndMenu )& _9 p- C5 E: t
{/ u6 R8 [7 I4 ~: G2 P
switch( nID )
; r, } _# c2 n9 Y7 n8 l4 { {! V# U; r. a( K8 e1 ]
case 2:
* p2 C+ V/ U' u a {
' Y& n. ^) n0 g* v0 D2 f //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);- p3 ~) D3 z, i. I. {; ~3 }
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
6 k7 ]* s0 H/ r$ p( J1 T1 C: s {
, i) _6 T( E$ w3 Y8 L, q- j break;
& v: w* m8 ~: K6 J/ R" A }# p+ @: \8 ]$ E' Z6 r
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)+ F! J% L! n1 s: [
{" M: K0 D8 d; ?
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);' m6 G" _3 [, F' T
if( !pItemElem )6 r* A& C- {1 V# h: W- v
continue;* `% D% }/ H) X* n+ _
if(pItemElem->GetExtra() > 0); h9 `& [- m6 ~8 J+ A3 w, z$ F
continue;
) x+ L& v1 \# Z8 L7 j# z' ]8 Y+ O if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
: ^4 c# q- c. E continue;
$ |7 s: s. g/ h. ]# l if( g_pPlayer->IsUsing( pItemElem ) )
3 Z* z! p: f/ p continue;
% V* I- p7 G1 g" k2 S( m if( pItemElem->IsUndestructable() == TRUE )
1 ^9 L/ F6 _8 y& _ {
" W3 x1 i6 y8 E* l B g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );9 f& u/ W4 B* c* X2 V- W
continue;
! V' d7 W# ?) h0 K, r } R! o! }- n- y# d- J# T+ l+ J% T
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);/ P, @5 C h4 K
}
" I) O0 }* H7 Z8 r break;
. G0 b- N! ]& r0 F6 \ }: U& |. r* s- D+ a' r
case 1:
K1 r. d2 Y, v0 C8 o7 m( j {1 z J6 @. C% r5 F8 H
//整理背包; w" l4 {9 j; _) A! F2 w
//////////////////////////////////////////////////////////////////////////
' N' n; x. A1 z5 j2 n //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );# u4 U" r& m' ~1 X& C3 e# v
//////////////////////////////////////////////////////////////////////////1 e7 B- B. l0 K' G3 t
//////////////////////////////////////////////////////////////////////////
+ S; V: H/ J% @8 [ CInventorySort* pInvSort = new CInventorySort;6 r# G+ f2 ?: |2 z/ O, x. |' ?4 O. e% ~
vector <sItem> vItem;2 m3 E6 l$ M/ E
vItem.resize(MAX_INVENTORY);//初始化大小: U( s0 x" F K: Z1 s" q! L5 `" ^
//////////////////////////////////////////////////////////////////////////0 {/ Q7 q5 A* ]! O+ r8 x
//填充数据6 {7 N% H6 S' @. O4 F. e7 ?
for (int i=0;i<MAX_INVENTORY;i++)% Y, m/ s! u) F) U$ b1 ]
{
i9 L3 c( q' }, _; w! D7 j CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
" X9 W2 X0 \. n# L if (!pItemElem)" \& V4 Z8 v. e/ H$ I$ _
{, _. Z( m, l5 G9 J1 x# [
vItem.dwKind2 = 0xffffffff;2 R' Z7 Y9 D/ M' m
vItem.dwItemId = 0xffffffff;
( ^6 Q$ }0 w) _ Y" c: `) a- z vItem.nIndex = i;' W; T% C0 B: [# @
}else {8 w: k& I6 g1 W4 S6 T
ItemProp* pProp = pItemElem->GetProp();
8 H) C( z$ M E0 r2 k vItem.dwKind2 = pProp->dwItemKind2;
' z! q J" f2 [ vItem.dwItemId = pItemElem->m_dwItemId;" }. n) f2 L. h! P* G
vItem.nIndex = i;
; ~3 X' y$ |/ J. R }
# z! r1 z4 m5 Z3 w2 i //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);. b+ K ]* \6 D5 t t9 d
}
- Z# R9 P2 l% g; ?4 ?3 p9 j //////////////////////////////////////////////////////////////////////////" \' c) R7 w4 b3 u9 i, A( E/ ]
sort(vItem.begin(),vItem.end());//排序. g; S7 ?/ R# h/ g) r4 {
//////////////////////////////////////////////////////////////////////////
, `# Z) u( \" q9 c% N //交换4 c- @9 U- z& d s$ Z I3 z
for (size_t i=0;i<vItem.size();i++). u4 a9 `# j7 d" h7 P2 x4 X. [- m
{0 C2 b: N) { C8 z8 [$ E
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
( C U8 j2 U5 C0 [6 [# ^: e5 _ pInvSort->Add(vItem.nIndex);
6 s% ?' m! z% `$ C9 F0 G, x }8 U3 M" j$ F; Z. m. a1 O
BYTE nDestPos = 0;
4 j |( V" a( |" i3 d8 ^ for (int i=0;i<MAX_INVENTORY;i++)
3 C( c! c, B8 V {
7 }' t$ `7 P$ I CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
" t& ]8 u9 p0 Y/ }* c if (pItemElem)
) b$ R! N- B' k* Z- K* e% [ {. b& c9 ?5 o# @( \- L' p1 {
if (IsUsingItem(pItemElem))
. |8 g$ H1 b5 H1 B2 e$ T {
( Y: _% W1 }3 w4 N+ e4 w5 {! e //这个位置无法放- a" U3 a8 X; l. K: Z z( @: @
nDestPos++;, J. Q4 u" o0 Z( B* v2 N( c2 f4 X
}
# t- V# N( O; }; B+ r } a! r3 S9 k( G# w/ i/ z
BYTE nSrc = pInvSort->GetItemSrc(i);
: A8 q& P9 h9 X, j% q6 B0 S/ B, R pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);5 S$ D" G9 P/ N) a8 f
if (pItemElem) e% ]% U9 K+ [% Z) Q$ L0 q. `9 M
{
- ~$ M$ {# M" T% Y if (IsUsingItem(pItemElem))" Y- G9 s" D' ]1 r6 g$ e5 C( _) {
{2 e% _: _* g. v9 q. x; `1 z
//这个道具无法移动,跳过& E, a( e* k# H! @ D
continue;5 m% a3 _ h5 k& @* h
}
a% Y. P! X L7 }! o* ] }else{
2 I G- S' Z. A: `' b0 v/ }/ X D //空位置 不用动
* ]. n: i6 e4 J( |2 g3 e continue;! J7 n& P! S" R" Y8 R# ~
}( k! b% M! C6 U7 L5 X
//////////////////////////////////////////////////////////////////////////
# W# a; I) D5 d; k1 x" e/ N //开始移动4 c1 @+ h) ^# {; }7 B
if (nSrc == nDestPos)& a! T0 ?2 i9 ^' o9 j. V n" j
{
* }; P" u1 I8 a6 X O' U //原地不动. r" O8 f4 ^- c- C
nDestPos++;
9 S: ?8 q- W2 x) f0 | continue;
! `: S+ C O+ m( G+ H% a }) x" d+ l: t; q
pInvSort->MoveItem(i,nDestPos);( `' [6 k5 k: x3 B
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
" r4 Y3 p, {* x1 g/ _' T% |2 H0 p Sleep(5);# ~" t9 U1 b$ h* M4 b% _2 ^' v
//Error("移动 - %d->%d",nSrc,nDestPos);2 H3 ^. `: e" \$ r9 W! N* I
nDestPos++;
4 I1 J7 e) x. S/ ^8 Z' m }9 ?8 S N/ S$ S* R- v8 ^! ]
//取第一个元素的信息, S; t" z0 f9 Z$ {
/*
9 ^: Q2 i" L& ]1 h* Q$ p if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
4 d+ r* R2 ]% u1 P) b/ F0 c {
, C- e6 P" k* K4 Q1 L0 v Error("Move - From:%d,To:%d",vItem[0].nIndex,x);, z! \2 ?& {6 A0 S
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
0 z5 E% J8 }; x9 U, K }* q! e# V+ v0 k8 i
*/ Q0 A- _3 X1 h/ t# v
//////////////////////////////////////////////////////////////////////////
4 z, b( J0 M* |) z break;
, k- b* ]5 s) P: K% a3 y }
X, |. B+ ?5 R( {5 } }
8 z7 a* G/ H* N9 Z1 F}# X' b. m' `% f# R% x6 n8 H& N, v
m_wndMenu.SetVisible(FALSE);4 S; }! L0 i$ N9 x
9 Y" T5 Y" h0 s! J; O--------------------------------------------------------------------------------------------------------
; T# ?7 \& G4 S* z$ m% r6 r搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
1 \/ K, Y* A7 M. k M2 W! K{
/ M: f$ k/ C3 i' ^7 PBaseMouseCursor();
' C8 R$ Q; u0 D7 Q4 L" T}
( u$ o! _2 ?0 Q# _在其下添加:2 ~" A' m: K7 m$ [/ O. j; s1 Z
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
+ i6 I5 T9 K1 J8 [" U: h{
4 g B( `' t1 \; t9 |. ^7 Jm_wndMenu.DeleteAllMenu();
& I- n$ {. H2 { h& y7 b Sm_wndMenu.CreateMenu(this);
# f- r+ W3 j# W1 Y* v; am_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");- d: D8 D) H% d( Y; E
% n2 M% C; d1 [& S+ @
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))' ]+ M( F& V L
{
3 R; ^; B% |& \' i4 p2 y) S1 i& ]3 f //P以上级别才可以删除所有道具
8 B8 n7 p$ \3 \! N m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");- ]& @' p9 w' }/ u0 [ u; C
}. i) Y- }4 q, M5 Q$ g5 s4 A
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );: T( E' v& V' o
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );: B) }4 s/ N/ D1 j
m_wndMenu.SetFocus();
8 ]/ L+ a0 N% T# I5 j3 b: s}
$ \8 J8 p* @2 j$ D------------------------------------------------------------------------------------------------------------
6 p6 w0 g5 n1 n! M! s: \7 j1 I*************************
3 C8 l0 P6 F4 _) hWndField.h文件 c" l& U J v/ Q1 e
*************************
9 N6 M$ i" ?; J" |搜索:BOOL m_bReport;, v1 Q9 N! G$ c+ H8 A
其后添加:# R+ I4 F% s2 u0 }" j
CWndMenu m_wndMenu;
8 Q% F3 }$ k; R# B5 N: h搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
% Q% s! `) W0 \( b6 |4 g其后添加:
/ n" F0 [. u7 A3 m F7 x$ H" h2 cvirtual void OnRButtonUp(UINT nFlags, CPoint point); g6 Z8 W8 {1 |
$ r; e) U' t7 W# z6 j
4 N+ l8 t% l. l5 T9 R) z
|
|