|
|
源文件中_Interface文件夹下WndField.cpp文件
# y/ Y: k% x8 o; B搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
W4 L9 o' V4 G# g! R/ w0 [
5 N# h" E7 }0 Q% s% dstruct sItem
" m" }* x0 l4 J9 Y! b5 _' Y{
. p% C1 w: e: R, M { mDWORD dwId;& a5 |9 S0 r5 K6 ]7 S; _# w2 j
DWORD dwKind2;
: u/ L" \. ]" g" ^4 l5 W! u. Q* oDWORD dwItemId;% \9 s x/ V2 E+ [% F) {# e: o. k7 b* N
BYTE nIndex;# y; q) y0 z6 P! A2 z% |/ q
sItem(){
! H" u7 k/ b: X2 g+ u1 M2 v dwId = dwKind2 = dwItemId = nIndex = 0;
( {& D8 F/ L: v: v* I6 I( v}1 g' I3 i; W( F8 x0 Z) O$ J; b
bool operator < (const sItem p2)
. h1 ? {: @) `$ Q{
: O* e6 r3 C2 P) f, \- s if (dwKind2 == p2.dwKind2)$ X" L) O& P" R: e; f
{) A) I' O- X- \) n
return dwItemId < p2.dwItemId;6 A( T" B0 f. e
}else{
( }) r9 J/ i1 E6 q$ k0 v return dwKind2 < p2.dwKind2;
2 s6 Q4 e8 E" q# b1 U }
0 s8 L" q0 y4 h; y+ h}) a' `- y% x( i; m" Y7 e! q8 Z$ E$ b
};
: J/ d) K# J2 W% z- Dclass CInventorySort/ _* f# W6 @/ }0 a! Y0 R8 f/ Z4 U
{! K- u5 c2 Y% u
public:& Y' a) W: t# N& S; B# Q
CInventorySort()
( J7 |+ K6 F$ |7 ^- K/ t$ V$ X{
, E: R! x% V8 g+ v, a m_dwPos = 0;5 W3 V% G" W1 u% A1 q
}
6 c F( s! @+ H~CInventorySort(){}
9 H# G$ d: l3 q# @; sprivate:
) K( O5 Q" s: [2 M7 s% `7 h) [sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
+ m: y. Y% [. v1 fDWORD m_dwPos;5 p- X( k/ n, O( |
public:: r$ M2 P! ~; s, m7 s a: o4 \
void Add(BYTE nIndex)
5 e' c! C) d z T8 p{& m/ m* d& I" f# e
if (m_dwPos >= MAX_INVENTORY)
3 E) C! N, J9 d- F' i3 p) U( i {2 l7 E; M! p6 S" F' K/ j1 w" ? n
return;$ {) ?8 {& `* b3 E& c8 w0 J/ k% z
}% j$ [; l; H* u; O- i
m_Item[m_dwPos].nIndex = nIndex;
, w/ X% D' b# v) F m_Item[m_dwPos].dwId = m_dwPos;
+ V2 h0 M6 v5 e2 b8 ^ m_dwPos++;* [0 @$ S" w9 |0 B! |0 k; W8 L% G6 T
} s! Z1 w3 z5 r( A3 y% x
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列8 E, W( m/ H) X, U
{/ J$ }( a; X' {* K ~* c
for (int i=0;i<MAX_INVENTORY;i++)7 K$ y, b4 B/ k9 x
{
4 j$ U" u0 `7 \5 x, k6 ^ if (m_Item.dwId == dwId). Y3 v5 c+ U. @& A r
{# |3 y8 h I- N- {
return m_Item.nIndex;2 h9 _" O6 V5 T& Z
}
- @' b& g6 m2 L }
3 ]7 e4 ?; }3 N0 O; W& y9 \4 v return 255;
- j2 f5 {' J+ m( b# w& t& r}
% E8 h( _' D, u7 a6 q- s9 Hvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
! T+ `; p7 B o' J- S/ f{3 m1 w, X, [+ f
BYTE nTmp = 0;
' ~: z: j. c/ i" j bool bDest = false,bSrc = false;+ m( a6 {% s H4 H/ }
for (int i=0;i<MAX_INVENTORY;i++)4 D% [# j, R9 h3 F/ W
{
: w& p5 v. Q; N; M% u2 ~ if (dwSrcId == m_Item.dwId)
9 ~9 x( g9 Y( e6 P4 y4 _ {
4 C* L+ [( D$ j4 _4 ]5 U4 b7 X //id相等 则 改变对应的dest和src
2 k( v8 G8 B$ H( w' t2 U; C nTmp = m_Item.nIndex;& Z$ V% z0 M9 e) y# P" z
m_Item.nIndex = dest;
) Q0 y: Q$ y( R9 x" h3 Y; b }
% V, j# u4 b! n! ?! }% k/ {, n }4 Q/ j6 L9 ~9 K9 |' J \. r( Q5 a
//临时数据保存完毕,交换开始, \6 S; l, ?7 ~% C% P
for (int i=0;i<MAX_INVENTORY;i++)
* `: \6 u2 C8 w" O& u t/ h {8 [" X- f- _$ x- z; V) i8 ]
if (dest == m_Item.nIndex)% u6 L" e+ W7 s- E: h
{1 `% i' n" \! K9 X
//id相等 则 改变对应的dest和src1 F9 i& G) s) c, |: {' m
m_Item.nIndex = nTmp;0 a4 J, a0 R) ~( g1 z6 K
}
6 N, O; `9 \' J3 B }
: N+ i# x! b& `5 t: O}. x: s+ R( |; Y% Q/ M" r/ |5 _& |
};
& c" n B( o4 E2 G-------------------------------------------------------------------------! i' S; ^5 ~0 c, O% g' L& D
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
: x4 B C% N, b- e- G& l& i" M搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);( M% |8 k& D3 w
紧靠其上添加:+ W. c5 I- d+ }' a/ i; n J
if( pWndBase == &m_wndMenu ); S5 d9 ]4 b) ~) a( N1 \
{. Y+ s" w" m% H0 z A+ C
switch( nID )& p! X2 x4 y1 V+ _+ S! d) ?
{
% E! Z) e# Y# e7 | case 2:, C4 D5 G# z, ?2 r- n) z$ J! h
{
" k: n- v$ g$ ?2 j; r //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
+ R4 _2 L. y( s; V if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
+ m# D% t; h- i5 z {3 C# Q7 V8 J7 S. ^$ Q% a. r
break;
- q( V. O0 X A- u' @4 b7 s }8 N, R2 {7 ]7 M# [! {
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
2 w) k5 S) Q5 u. Q; `* S7 Y. g {. K" [$ \2 u5 a& _) A. o. I
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
) L: F' q' X9 o! L" H if( !pItemElem )5 o, t# Y% u& Y; H* A% d6 |
continue;, W1 U7 x2 h: N1 h
if(pItemElem->GetExtra() > 0)
7 T5 ?3 K/ q ^& {9 |4 \ continue;' V2 {% ? C# H, k8 S7 ^3 T L: V
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
, q3 E& A6 s9 [* c5 h continue;
. R: V7 e6 c; ] if( g_pPlayer->IsUsing( pItemElem ) )" b" Q" E, s5 m1 Q; K6 ?9 }
continue;5 o2 o' r* y+ ~/ N6 G# d
if( pItemElem->IsUndestructable() == TRUE )
5 ~3 W" C* {8 x$ {# V4 u. n {% I% J/ ?' A2 p1 b5 I: n8 O1 ~9 t( j
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
! j3 n k. ~+ H& V' |, ]% ~% w continue;
% |% p! j9 v9 p! h }/ } u& t( J/ V3 n
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
, ?* d' K: E M6 L7 W4 Y2 F }
0 Y$ D9 [) d7 R. j, ^# o break;
, y9 r8 d3 B+ K& ^2 G }
5 u a% V9 \% j; q case 1:
, H7 Q: L+ v7 c% m {
6 x# v( h7 K4 N4 F //整理背包
- W, s+ \! G6 I, t3 m" t5 C //////////////////////////////////////////////////////////////////////////
: C3 e9 x; G5 b% B8 c //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
; b* u+ |) m2 U D# H //////////////////////////////////////////////////////////////////////////# \! r) F. T5 h1 \0 u
//////////////////////////////////////////////////////////////////////////) o: Q& c, t. j! s2 }6 m& B ^
CInventorySort* pInvSort = new CInventorySort;+ r* @ m) _1 E. {3 @: n, ^
vector <sItem> vItem;
- M5 X# p, {$ O, `) v vItem.resize(MAX_INVENTORY);//初始化大小
$ t9 O+ t; [# P& |% ]0 P0 A% C! [ //////////////////////////////////////////////////////////////////////////
! `* J. S- t0 O$ F, x- L0 R //填充数据 |& G8 c# f- U# ^* Y( O6 `
for (int i=0;i<MAX_INVENTORY;i++)- ~8 M- I9 e) f" u% I8 T b" \
{$ b" `- D2 I9 l) A' b; x) p
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);8 e; H* R5 S0 Q8 R8 C& M
if (!pItemElem)
! A4 i- O) v& i. ?$ {8 j {
5 `1 w; s! N4 R vItem.dwKind2 = 0xffffffff;
9 e3 E4 {; `/ b6 l vItem.dwItemId = 0xffffffff;
# p6 f* I) z( ^ vItem.nIndex = i;
- \# C( k7 ?4 N& E6 `3 @! A! D }else {
9 \" t+ A- _' J( B5 Y ItemProp* pProp = pItemElem->GetProp();+ T7 g7 i$ d# |9 E/ V( j0 Z+ X
vItem.dwKind2 = pProp->dwItemKind2;/ X/ t* m1 K, `7 y4 D& A
vItem.dwItemId = pItemElem->m_dwItemId;3 i) o# X/ K+ e0 r6 `( c3 `
vItem.nIndex = i;
- | O0 d& }0 w1 H }
; S$ k/ i8 u% D; d) X/ d //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);0 w- s& {' F( R1 g" B
}
6 r) m @1 V; T# M0 m //////////////////////////////////////////////////////////////////////////
) Z' ~1 E' _* Z( y; g3 Y sort(vItem.begin(),vItem.end());//排序
. T* i5 l' R5 J6 R. X //////////////////////////////////////////////////////////////////////////
: q# m! f, z! e //交换% V6 F6 Y# l; m6 @
for (size_t i=0;i<vItem.size();i++)
' [# J% F6 Z$ i9 T* z/ v* x {
: ]: K: |% n/ e, U1 B6 s2 C //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);. L8 ?( V }6 H
pInvSort->Add(vItem.nIndex);
5 Z( S2 H" Z% H3 E }3 J+ Q k$ a, @4 n0 |5 e
BYTE nDestPos = 0;: k8 S7 J) L- B! Q& K% d2 s
for (int i=0;i<MAX_INVENTORY;i++)
% t' z% w/ c' B g/ c7 }, | {
2 ~6 m! J) u- z% ^ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);, i" T# D! u* a3 ^
if (pItemElem)
% U' g* `$ ~. {* g) i, O6 ^ {$ z6 {6 D7 }( u5 Y* {
if (IsUsingItem(pItemElem))
- J% o+ R) ~9 ?9 ~ {
/ H6 H* U' J/ H% F3 ] //这个位置无法放2 e0 D2 j4 F4 K
nDestPos++;
- F( R: t2 j: z) D- ^ }. e2 w0 } o3 ^" [; m' h3 ?
} k% A* R8 J( ]
BYTE nSrc = pInvSort->GetItemSrc(i);' O' D7 i. I; `2 {7 ]8 B% @* @- m
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);- x7 G7 c5 b- v; g. ]- X- r" L) @
if (pItemElem)
. ?2 I: M) R) W( Q+ p: |7 _+ G$ D {
! d& G$ C+ \+ H( M if (IsUsingItem(pItemElem))
+ A( F$ `( c% W {
7 U( Y+ h8 c$ ?: g' J+ N f //这个道具无法移动,跳过8 \' M0 ]! x) T+ G+ j# Q
continue;$ g, F% k5 C! J- ~) N
}
+ E. D5 L/ k, r2 p( A1 }$ M# ]: S }else{# C: z( [- b3 k4 f
//空位置 不用动' c- y1 p3 N3 |! H4 P: J
continue;
' B0 S! F* Z9 C+ J) W }
1 t \% l8 g7 ], t5 Q( R6 p# M //////////////////////////////////////////////////////////////////////////
5 F+ E! ]; w# S& F% X8 Y1 r //开始移动
/ l* \* u2 O- [2 ?4 o7 V d if (nSrc == nDestPos)# W/ U1 M. f% G" f
{0 E) Y! ?3 C6 R: E. I6 _& X
//原地不动
1 |8 e' r; s/ y, x nDestPos++;5 D0 H7 n v7 |1 ` B" {0 X
continue;: r2 O8 T5 x- m0 _% U0 e- b$ F0 G
}& n( o+ }: P+ H# B/ y
pInvSort->MoveItem(i,nDestPos);
: N7 Y, `: m |5 E* e. E" C% L/ W g_DPlay.SendMoveItem(0,nSrc,nDestPos);
$ B4 J) _3 ^4 I Sleep(5);
. o8 h% f. g. m) G3 { //Error("移动 - %d->%d",nSrc,nDestPos);+ r: T/ i s3 V$ S8 ~: d( g
nDestPos++;; o4 B2 r3 \! l& I: l
}9 Y$ t. J5 I8 G* y2 k2 u
//取第一个元素的信息
) v' F* |# n3 R4 y1 t" {) H /*' t6 m. T8 d, R
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
: f# s. |1 R: b8 j: @ {
+ I6 n* ^2 H& w/ T9 o Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
- V: `$ h& R+ u9 V g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
4 X# t% L9 d" u% A- r. p# d" l }
+ N% V5 s" y9 V: I& V0 T& r# P */$ [2 c f; Z8 I; O5 O
//////////////////////////////////////////////////////////////////////////
( m% X: S6 l6 ~0 b, p, D break;
$ q1 W( b, @; X6 Q5 d! L$ ~ }
$ q* R5 q+ _* S" h1 i( Q4 }6 ]/ S } 6 Q! z% r" V& t7 k3 m
}
7 F. @/ A9 Q' O4 T: j! ]m_wndMenu.SetVisible(FALSE);9 v0 a, c( i2 g$ ?( ?2 a0 }
8 _" R$ @$ c; v+ T: e1 s. a--------------------------------------------------------------------------------------------------------: o/ t0 k9 v# M0 `6 N
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)4 u2 L! E$ T' Y: J
{
# U. g1 W; I4 L( a; ~BaseMouseCursor();
z! ~+ c G- {5 M}
- D% d- K" k8 s0 Z3 Q5 a0 _# v在其下添加:6 I2 J! x3 N* J1 W h
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
+ O9 V- r$ m6 L6 `. R{! h. G D+ O* i0 t$ c. f
m_wndMenu.DeleteAllMenu();, k0 j5 {9 |/ i3 p0 H& a0 b5 U' X
m_wndMenu.CreateMenu(this);9 L) d8 K& y! }8 D8 Z, {
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
7 N7 X ?) v' x2 e
0 i6 g9 C4 a5 p' B) u; W- ~4 Y" iif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
0 Y6 y0 M! y- V& t$ { t7 Y* a{5 Z- I' U B; j4 G+ E0 d/ f0 m
//P以上级别才可以删除所有道具7 E! J# K1 w4 z- y' H
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");( J c$ n+ ]" J' n0 s1 I
}
& D8 r5 B# p$ `1 [6 Hm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );/ Q3 w) E; b& M6 P; p5 K9 e
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
- G1 i5 ~" _( Y# F5 Dm_wndMenu.SetFocus();
( G. f/ q) @& y" g}
1 I0 P6 c, P) u" r/ m' z, \/ `------------------------------------------------------------------------------------------------------------
, C6 n- R& r4 h4 y& I+ g5 Z; X( ~*************************
l5 l+ V5 q/ {* ZWndField.h文件
" W4 |) _: g( K% J4 f2 g*************************
" _# X, F, }* @" r8 W# O5 [$ j/ T搜索:BOOL m_bReport;
* ^' a! g/ b+ V- J1 C$ z5 ~" w其后添加:
: }7 @0 l V1 u+ O4 qCWndMenu m_wndMenu;- s" Y7 z9 k0 m# d0 N! J0 @
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);& D. ?/ N2 \# v4 @; {
其后添加:. ^5 Q" C, N q4 [" a
virtual void OnRButtonUp(UINT nFlags, CPoint point);1 [$ G7 B' \! o
" t. _1 Q- j) @4 y
& H) @4 z* ^' X
|
|