|
|
源文件中_Interface文件夹下WndField.cpp文件9 n$ _! Y$ \, a' b# ]
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )) Q+ I- C0 H& T9 k
' E- @8 ]0 T$ r6 d6 T" y0 H( H
struct sItem
- c& g& w# x; J8 O& X% n& |8 f{
# K; s7 }1 _# T% L, w! F4 _% V$ uDWORD dwId;
h, I7 [" y1 f" K) f$ P# j: F, fDWORD dwKind2;
+ H. m# L* X. P, h6 q( CDWORD dwItemId;
0 x7 \2 q$ z [$ c# o$ G3 ^- p( GBYTE nIndex;, i# ]1 Q3 Y7 `/ N. L" O9 H/ X
sItem(){( _) g& L2 o# [
dwId = dwKind2 = dwItemId = nIndex = 0;; z( a1 N7 D0 d$ w2 q: d' B& e6 R" h
}
0 r B' D: n a6 m6 Y, t6 t9 ibool operator < (const sItem p2)
K2 B" C+ n- \2 {6 G, D{
* K. W, F! q4 ]! @) d) ] if (dwKind2 == p2.dwKind2)
9 d* _) m% z5 w6 `! X+ ] {
( }$ q0 I5 p* T$ u! v8 ?. S return dwItemId < p2.dwItemId;
# k! `1 W v6 l: _ }else{' U8 R3 J' {. U/ H; T5 x0 \7 Z
return dwKind2 < p2.dwKind2;& i& e) W$ j1 w$ j5 P- ]
}5 E" b/ z. v5 s2 g1 x& Z
}* X9 D% E% ^( | E7 X8 E
};+ B0 C4 j8 a- M$ j, o( F P7 `
class CInventorySort
: r. y8 A$ S/ B( [& ~{
' N- [, T* Z o8 b0 \0 S2 lpublic:
5 b0 {; Q* M4 F- V/ M MCInventorySort()
+ v+ J3 ^+ Z0 q- w7 d/ s) P{
- o6 g( |+ h& P# }$ | g6 ]3 g m_dwPos = 0;% c( n4 v1 b3 [/ I
} c6 \$ M, L5 k7 a; g% w5 R/ p+ O
~CInventorySort(){}
8 Z1 y* C7 S& W" pprivate:
/ z! F2 V; F6 D# m/ l! b2 O/ PsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息; d; C* l/ Y4 q' x2 \
DWORD m_dwPos;
# `( r6 H# c5 O i! qpublic:
# T8 i8 \9 J/ w' I. w1 d0 kvoid Add(BYTE nIndex)4 Q% O' Q. s5 O* P( j
{, W; K7 |9 D' b
if (m_dwPos >= MAX_INVENTORY)
0 Y Q) z+ {8 W+ n( \2 ^ {
! h$ l( F1 m! } return;: L6 k i; j, ]
}
! Z- y) } R$ ?. b m_Item[m_dwPos].nIndex = nIndex;
% K0 Y' |( |' S& e! `" c" E2 W1 r m_Item[m_dwPos].dwId = m_dwPos;
+ x' ~. ?. I# S, O- w0 `; J4 D# T m_dwPos++;; f4 ], ]) @9 ?. W6 W& L
}
: g9 B0 V* q: R7 e1 h- l I8 G6 HBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
; p* j: e, j" _; j# I% G8 x{: Z! l& o) V7 | K' z
for (int i=0;i<MAX_INVENTORY;i++)
- Y+ q1 @1 \* D+ a& Y9 c {4 i* a n; G0 \5 x& m- |
if (m_Item.dwId == dwId)( I7 U" a2 U% P
{
; S Y3 I. Q; Z; m. V/ @3 Y return m_Item.nIndex;
8 @* a- o2 L& ^4 D8 t! d% {) S }
% X/ V! q- {2 P' N9 ]2 R9 ` }
% y' K! i) m8 k return 255;! v6 Q, I/ N6 i U) s
}. x" y1 D U& _% b
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
0 m, r v3 }8 |8 Y{
# U# i+ }3 b' R+ i- \ BYTE nTmp = 0;7 A- S5 G6 P# y, A* x q, x" q
bool bDest = false,bSrc = false;
Y$ F1 ?- L2 h for (int i=0;i<MAX_INVENTORY;i++)2 k" Y& _9 k7 Y. a T6 J. x
{/ G) }& v* R+ i1 `) p3 `
if (dwSrcId == m_Item.dwId)/ e) M5 u' W7 G! O8 ^( z3 j% k
{# U6 p. R" K/ l8 H/ L* J f7 _
//id相等 则 改变对应的dest和src" a% @( ~0 ^. C' D; h5 P
nTmp = m_Item.nIndex;& @" _0 p1 L: W& k2 F5 F7 u
m_Item.nIndex = dest;% k5 b; i) i: o: r2 V
}
6 M5 ~. W, h- E& y6 }7 I. |, C3 _ }
4 W. Y4 f h9 [ g' ~$ h9 d0 d //临时数据保存完毕,交换开始: }+ }, U3 v+ m$ q6 \
for (int i=0;i<MAX_INVENTORY;i++)
& l* c m; g# O3 J/ x {6 O+ \. b2 C7 T
if (dest == m_Item.nIndex)* ]( m1 {2 G- ^3 w( \* Q
{
3 M3 v& ?$ N0 w( k/ f( d //id相等 则 改变对应的dest和src
% q y3 U5 b( B% b1 f8 [. L9 } m_Item.nIndex = nTmp;
; @' L: K2 c( x0 L }# |" V0 k1 }0 F+ \! S
} H, n3 f# _! k- l6 M
}/ E; A1 i2 h2 ^; {: R- O
};
; p( ^/ `4 M* ?; @5 ?-------------------------------------------------------------------------; L0 M7 f: c. J5 c- Z
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )2 `8 F d3 }3 I; t
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
" e s. n1 M' ` x1 g0 V: j/ m紧靠其上添加:1 e' s1 Z* N$ c* Q% k7 F
if( pWndBase == &m_wndMenu )
6 y0 n. U! l! N- }6 H6 P{
; h. p: U3 i2 Q- E0 ?2 d switch( nID )9 [3 o& [* @: }7 `- {
{) _0 b; p2 u% j* y) {' `
case 2:
% {+ t+ Z* ^$ E8 [* r9 ^+ ?# L {
% p8 \! m! v* O" j" | //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
( L' A: u/ x7 l: ]# b' m( J5 S if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))0 x" e1 l) |4 c) { [
{
) Y$ w0 W& P0 a! i break;
+ O3 Y0 G- V; e- v1 t! U T0 x }% f# U. T5 c# ^. ~! [
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
' {0 t q: j1 l {
/ J$ r4 t% N) {( ? M CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);9 Q s: `5 N2 Q/ m
if( !pItemElem )9 n+ ~' s4 e. Z* X$ b
continue; ]' O; J( z- R4 i
if(pItemElem->GetExtra() > 0)
! p9 z$ H& l# {: S1 k1 d/ J continue;% j- {# m# e( X s% Y
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 5 l1 ]( C1 f& Z0 j+ q
continue;
5 Q' w# e& [1 V if( g_pPlayer->IsUsing( pItemElem ) )
( H% h! F1 {! i/ s8 G3 @: {9 | continue;. o4 u* {% i+ ^9 r" K7 h5 y0 O2 P
if( pItemElem->IsUndestructable() == TRUE )) b2 ?) n8 k: S: Q9 I( d9 e
{
! A: k. h8 t* ~; E* e4 k g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );, z4 r* _# Y8 J
continue;
; _# ^# E9 x% B/ {, d3 u5 u }
$ E, Y1 t. O8 I$ z" t& l g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
& @2 J$ L- E* H2 T }& ^" V# u0 y2 r
break;) q8 q9 d/ p7 u% }( v
}
! l( p1 h& U; b! ?( M case 1:
1 g/ G' y! E0 e5 _& B {
/ H- C* v5 j. ^ //整理背包
5 E% I' T- D+ H4 P/ q //////////////////////////////////////////////////////////////////////////
% w' R/ t- n* E6 {, ^! c //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
T0 u- |' X, r5 ]# { //////////////////////////////////////////////////////////////////////////) [) S& w# o+ u3 D. t" \3 R; R1 c
//////////////////////////////////////////////////////////////////////////; s1 e/ u( x- v! }- ]8 {8 Y; M" K
CInventorySort* pInvSort = new CInventorySort;
- q" V; s- \0 ? vector <sItem> vItem;
5 H" w" {8 P, q$ f! `) M3 S vItem.resize(MAX_INVENTORY);//初始化大小0 \$ U: z$ ^2 K. x! l& c6 o
//////////////////////////////////////////////////////////////////////////
H# g/ g4 Z4 o //填充数据
" |2 k5 ]5 `0 g; K2 @ for (int i=0;i<MAX_INVENTORY;i++)/ n& W5 K, t2 U, K- S
{2 }* {3 Z: S, D
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);, [; _) D6 d8 L9 i( Q! b7 z
if (!pItemElem)
/ f8 P: P5 g- p" {5 b {
% b' y6 n8 q# t vItem.dwKind2 = 0xffffffff;
) |: @! ?' J- r. o4 S: Y5 e6 } vItem.dwItemId = 0xffffffff;
/ E/ a7 s# |# o h vItem.nIndex = i;
; l! f. V ~' { }else {
( [9 f" p* H0 [: Z" x" g ItemProp* pProp = pItemElem->GetProp();5 a- |! ]7 g5 x' l! }2 K0 O
vItem.dwKind2 = pProp->dwItemKind2;
: {, a6 d- j7 b! T6 }$ Q vItem.dwItemId = pItemElem->m_dwItemId;
; s4 u: O2 d" {0 F vItem.nIndex = i;) Z: r8 s$ b# r3 e0 I, ]
}+ d( U" b. n' \7 t) z. s# z- @& [
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);4 Q0 Z) l* o$ i8 x. N
}+ I* h7 T- f& l, @ d
//////////////////////////////////////////////////////////////////////////7 z0 j, Q! P! Z. K: ~$ V
sort(vItem.begin(),vItem.end());//排序
$ {, n4 Q- W+ n m( f //////////////////////////////////////////////////////////////////////////
! k9 s: [7 Z! [3 F7 U4 R //交换
4 i; Z0 k& }% U* B X. X for (size_t i=0;i<vItem.size();i++)
# o$ \. J! ]& n- Y8 v/ y3 z8 P {0 @5 `% d" [6 B/ J7 G' K
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
6 T1 a. [8 a* V pInvSort->Add(vItem.nIndex);
- h& q+ q/ `" o! {$ Y+ z# _ }
+ J2 j+ p+ w, z/ H* a, n) c9 k2 t BYTE nDestPos = 0;0 i$ j) R; w, m. ~2 H/ O) S: y8 L
for (int i=0;i<MAX_INVENTORY;i++)
+ S0 H8 s; [5 Y: e0 f {
7 }# i8 W$ x- I CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);# @" X" a- h' f6 k
if (pItemElem): y) ?$ m- m- T
{
1 d/ H# a9 l X/ J1 @- r) n if (IsUsingItem(pItemElem)). I6 D+ i* B& c1 I* k0 t
{
$ A w6 d' w, m; \3 L% Y# u //这个位置无法放5 ]9 v% K {& y! B# R
nDestPos++;3 d* X5 X: _/ r t# H7 r1 Z
}: x( m$ j% E, {( r% R# u
}6 {8 c e% B( G0 [* b2 x* {
BYTE nSrc = pInvSort->GetItemSrc(i);$ y+ v( F# f% O9 m3 D# z
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
1 A$ z4 s. Z# W2 N# |# a7 L if (pItemElem); o2 \( ^" `+ s6 X" |- S5 d1 ^
{
0 [* @7 b+ K l/ k if (IsUsingItem(pItemElem))
/ N3 `4 S i, N {
; G& s/ `2 ?# s+ b- n //这个道具无法移动,跳过& i- O! V) S+ e1 y9 y
continue;+ b( d8 u5 i4 J5 K% R; }
}0 V$ K& v& _) P: E
}else{
& S3 k4 f$ _( m2 }& `) P8 L: o //空位置 不用动& z# H- I S' F% ~/ w) g; P
continue;
" L, [/ J; ~- K' _! O5 K }
& l0 F9 O) _% n3 g/ C //////////////////////////////////////////////////////////////////////////
; U, c" Q0 o | //开始移动% M( R7 e( w* i- S* q. q
if (nSrc == nDestPos)
a% k" ?" k& X" ? q {7 {" C' L* D5 m+ }0 n) b4 p1 H
//原地不动- r* a) B t) c) c
nDestPos++;
, C/ N1 d5 ^+ G! k( S8 w continue;
4 y. s; g. E L) X5 ]3 X }0 W" Y5 W% W9 k; b
pInvSort->MoveItem(i,nDestPos);
, _% b% ?/ y& N4 V# G g_DPlay.SendMoveItem(0,nSrc,nDestPos);
* E z8 u; G" s D( P Sleep(5);7 X+ e$ w' f( d- R/ F6 @ l5 h
//Error("移动 - %d->%d",nSrc,nDestPos);
$ B1 Y0 C, T' Y8 _& H' p: a) y7 r$ }' W nDestPos++;5 T% R- @2 _# C4 `: a a
}
/ V5 g" p+ M4 n( R& z/ I- b //取第一个元素的信息
3 u$ W' r7 V5 h /*" F& ~( t+ p6 k' u3 ]+ R: F$ }6 ?
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff) I* j, ]0 X' K' Y3 q3 l
{
5 } a# a: P6 p: z8 O; [9 n Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
7 c5 p) g. P6 z* t" h g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);0 d) l, d( t& R& j4 p" B+ ~% q
}
* Q- a9 h P4 P% r# H- {7 S */8 v" L$ y+ K+ D+ H" g5 k4 S8 H
//////////////////////////////////////////////////////////////////////////# {, r( H9 ?; E e, r% i0 r$ B* C. ~
break;
2 T3 R- {0 G0 i* c( u) \ }- s( d" H* Z& m" k$ f' f- V3 Y
}
u) u( k# _# d' i; {& ~# e}% N6 F& r# q: { P$ J2 Z# L
m_wndMenu.SetVisible(FALSE);" s P: P5 q6 H0 k* x1 s
3 o# T E, }. ?
--------------------------------------------------------------------------------------------------------
2 d8 U1 K+ i7 O搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
+ @9 W W! y B5 S. @0 a{
9 @9 i3 M5 ?& o1 f: CBaseMouseCursor();* Q+ T, b* j% E" e& ~4 D+ X* R6 d
}/ q; C1 N( g3 @) y+ V$ F
在其下添加:- H5 \& H9 R; T4 q! }
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
" v% D6 z7 g7 P2 S; y3 `{5 D% L. |) r; s: `: @1 y
m_wndMenu.DeleteAllMenu();
1 C. K; R4 t; h$ d, g( p6 z [4 ~m_wndMenu.CreateMenu(this);$ h3 w8 i- P3 [! B2 n
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
~( i" _, y) h# ~3 U* o; x4 y* N l4 c2 N4 W3 J
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))1 d1 ]6 E! v4 ]9 }1 r! C
{; X3 p ]1 |: e" o
//P以上级别才可以删除所有道具( J# H7 G9 g9 s1 c6 C9 `; L
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");0 m: N; M v+ X
}
. Z, b0 _. `4 o; p; ~m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );/ n2 m/ ?* i- Z* \% S
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );- X$ a( s" d0 O" Z+ M4 ?
m_wndMenu.SetFocus();
8 o# t' C6 j- @' T2 x: o) n}
3 }) d- g+ l0 W- q2 J! Z------------------------------------------------------------------------------------------------------------8 n3 L3 b, _, k/ E1 y6 v* u% A
*************************! }# r ^: N G) ?; I
WndField.h文件
0 X" X/ \5 }! G/ U0 K& U( |% N! N*************************
+ j% o9 v7 [+ ^$ p搜索:BOOL m_bReport;
3 _" g/ t- I, z* R% ]. _8 U其后添加:3 ^$ m6 h* D. I; |
CWndMenu m_wndMenu; G3 h L) G7 B3 Q" m* W6 o! B
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
4 r: h1 u T% Y' C其后添加:! }+ g) k' d" U2 v- C' g; y: l
virtual void OnRButtonUp(UINT nFlags, CPoint point);0 t' k9 ?- R* e4 \
$ M8 I$ Z/ \% W M$ r7 Y6 R/ r
1 P. [/ @! ^$ [! y8 ~' L
|
|