|
|
源文件中_Interface文件夹下WndField.cpp文件
, H- D7 R7 l. P7 O8 D搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
2 c0 L9 s, b: z, R: S
3 N- @& K9 j2 j t3 ^: d% `struct sItem
; ^1 a/ w" z0 l0 i+ c& q4 m& H5 }# D{4 K. ^% `& [: K) B6 {# z8 m1 _
DWORD dwId;
) b" E1 Q! H5 D9 D6 w- CDWORD dwKind2;8 s* F w+ U* r4 y3 M3 f% K2 V
DWORD dwItemId;# l& d7 C+ X2 @5 H9 S
BYTE nIndex;
k0 H" g; W, J: qsItem(){
' d% [1 P& p: H# H" r6 | dwId = dwKind2 = dwItemId = nIndex = 0;
- |! C1 t- j( |, d. N- R" Z7 ]}
+ b( c: v, n0 l, K# @% P; E6 ^bool operator < (const sItem p2)' P+ ^" p9 J4 H* F5 T7 z
{+ R$ a8 i: ?* h# C& i! I' Q
if (dwKind2 == p2.dwKind2)- Z8 m4 c! F3 S! ^ V) X( H. x
{" `* |3 `* a6 _: Q* f# s
return dwItemId < p2.dwItemId;0 u- Y% L: s5 [8 \+ s! E
}else{5 m, p: d6 k" A. u2 B1 L; h9 v
return dwKind2 < p2.dwKind2;$ L: v$ k/ s1 b. o1 v9 G: F
}0 I' \0 d: t& {' j. _1 J, X/ k
}
. b! \1 v/ ?( c2 S2 h U};
1 @$ J8 S; }7 ?4 `4 ~class CInventorySort; j! @# x! m7 y& I/ O
{( B5 U i l. s& n# H
public:
* X$ b* V. \0 R) u+ v2 {5 C; q( UCInventorySort()% g+ ~4 H& G) [2 t" z7 S
{: r# X6 c/ O2 o B1 a
m_dwPos = 0;
% S+ U2 j1 H' J/ c ^: Z7 x}
- T5 s$ M/ c3 ?$ p5 G6 u3 _~CInventorySort(){}' C% ]3 B" |& p3 D
private:
. `; y2 A: u* E+ SsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息4 S+ s# g P+ { P
DWORD m_dwPos;
) B3 k1 P5 T$ b/ V! c% Mpublic:6 o7 ]+ ^: U% |8 `. }6 @) p
void Add(BYTE nIndex)% s2 f- k! _* u F% ]
{7 s% L$ ~& n9 N" s* @1 c* l' W1 L
if (m_dwPos >= MAX_INVENTORY)
0 V4 ~% ~, D7 ]4 Y {
6 Z0 b, n& r) E6 N return;
- u/ J( ^: I) X4 b8 U& \ }0 |! f6 U8 w& }' U4 ?. U S
m_Item[m_dwPos].nIndex = nIndex;
% d9 V& N! |9 R* Z) N* a m_Item[m_dwPos].dwId = m_dwPos;
$ l ~. z& ]& a4 C0 R. [ m_dwPos++;1 v8 c( n; g/ U7 h- z
}
4 C% r& g9 n" \BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列* f) B1 t9 o& L. z# Z$ _
{
8 } E. N/ Q& k2 ? for (int i=0;i<MAX_INVENTORY;i++)) L9 |# J9 c8 Z) ?* r
{+ E1 M2 w+ B2 `1 ~
if (m_Item.dwId == dwId)
/ q! A1 q, `" S c) @( `4 B {
$ s2 |+ m; R, [& |2 |; j return m_Item.nIndex;
9 n, k/ [8 y! Y7 w& b9 ]3 ?3 Z }
5 k) h. X4 v1 k5 ~' }; ? }, x# ^; l( A( P# O0 C, N% s
return 255;
7 O, t7 s( g$ m3 L, v. [" p}
' r+ b+ Q, M& n6 n* X3 yvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
; [& i3 O& T* O2 N4 l1 a) O$ q{6 c) P$ n( v0 w: k( ^
BYTE nTmp = 0;
% `8 V" B1 n8 I7 K3 V q bool bDest = false,bSrc = false;3 J0 v& V1 ]3 y' W' ^
for (int i=0;i<MAX_INVENTORY;i++)9 ?0 q" c5 _/ L' N- V
{: n6 [$ U2 V9 o5 @4 G: |6 {
if (dwSrcId == m_Item.dwId): b ^6 ]$ x! Q3 t3 Q
{7 B J8 ^0 n P t R9 J4 f, u
//id相等 则 改变对应的dest和src# c% Z4 V5 o Y3 q4 v4 z
nTmp = m_Item.nIndex;+ X% q5 H2 w4 `7 x- w
m_Item.nIndex = dest;; Q9 a0 b, ]) H
}" D. e) a$ Z( M. j% r
}2 ~2 X0 W' F4 o+ r; a
//临时数据保存完毕,交换开始
8 D. o8 u8 p8 R5 A V) v for (int i=0;i<MAX_INVENTORY;i++)! ^( q; C. ^6 u+ J0 j
{% j7 s6 U+ z0 c0 B* R, f
if (dest == m_Item.nIndex)
3 a3 a( D$ ?! r0 [1 g2 F; p {- z+ D6 w; ^4 M
//id相等 则 改变对应的dest和src
2 T6 }% e! C6 {- j/ p5 } m_Item.nIndex = nTmp;
* `1 h% {, J" V- F+ j! T, Q. V }
& d5 M4 |. y( N% i. \ P }
) c7 ^8 z4 H- D3 S7 o}0 Q3 M' j; f+ e
};
' N1 V: u" Z- R0 A8 v( ]-------------------------------------------------------------------------
& U! S, I/ I3 C3 j依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )% w% _4 O2 l4 E+ A+ h/ o6 J; h
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);3 `. K; D! m7 J
紧靠其上添加:
B* p- f# Y, p% H/ l% |if( pWndBase == &m_wndMenu )3 V! E3 f; }( I7 F6 m! F
{
$ d5 }4 a: W. x% W/ T- V3 { switch( nID )
$ M" |7 T2 q9 Y1 C {' v6 i6 i; h+ X3 K$ k
case 2:
* O0 `$ ~6 m& v/ O {6 R2 j, a- S9 H" _# U
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
( G2 |, w' _/ b# I7 q3 X if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 U C: L" {0 v! d {
* E- s1 e# s/ b break;6 b" F; D3 C+ V% u1 |2 [, h
}
* P, N" ~, Q: o, g! |0 \0 z/ I for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
* x. ]$ B4 K4 c4 q { k3 Z. t; i* U$ [3 d# a$ o' ?
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);+ T+ o7 V& d( n
if( !pItemElem )$ u7 f- ~% W9 m! H# N
continue;" _% Z, t( e9 g
if(pItemElem->GetExtra() > 0)" a% j/ ^# @6 k/ ~
continue;9 G$ H5 S1 t, h) T! v& `
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
" ]. U4 l( Q8 t: I& W( ^ continue;
7 W" I/ j6 V/ v if( g_pPlayer->IsUsing( pItemElem ) )( o5 M1 |1 `+ i) \/ v. K/ [
continue;
@1 r! R- n% o {3 o' J if( pItemElem->IsUndestructable() == TRUE )5 f1 `# S A3 ~! R
{# j$ ^5 l9 D' a
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );4 i f% s: `# K4 K: Y6 S5 A
continue;+ G: d; u) n$ q1 X: y
}
4 w' V& w' U0 M; y! ^ g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
/ a. I; Y( K; q" A ^ }1 o3 Y$ z. E/ t9 s2 ?: U8 d" H
break;- N- }8 m T5 |0 r: j: Q; W A
}
4 i! c, |4 B: k7 b$ C7 ? case 1:) S* C/ B# s4 Q F& ]$ F9 V# [
{
# g2 |2 R' {; |/ I6 v/ |0 S //整理背包/ \% Q/ _8 ~6 f% S# b
//////////////////////////////////////////////////////////////////////////
" C% I. r& c8 X //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );& h3 z7 M9 }6 t- K( P
//////////////////////////////////////////////////////////////////////////
& Q' w8 t( _0 ` //////////////////////////////////////////////////////////////////////////
0 W }6 ]2 ^4 C0 ]4 V. {! s. v+ Q CInventorySort* pInvSort = new CInventorySort;
, ^: U% A4 }8 z vector <sItem> vItem;
8 |, X. M) M7 J vItem.resize(MAX_INVENTORY);//初始化大小' `% r$ X- Q; j' v! q, h
//////////////////////////////////////////////////////////////////////////
4 J4 v3 F4 N( U4 w9 k //填充数据
7 w( g% q3 v& i' f, s2 O6 s# ? for (int i=0;i<MAX_INVENTORY;i++)" r' w' Q( O' V: e; E
{
( z+ g: X, M6 e2 ^0 O CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
2 b9 v5 c1 ?/ k7 q; v if (!pItemElem)6 F1 Y# y, n& f' m" W$ |
{( f/ H) Z7 s: h6 x9 h( t
vItem.dwKind2 = 0xffffffff;9 k1 g: e6 ?% ?% W' O
vItem.dwItemId = 0xffffffff;
! h. _7 K. M7 p$ v0 i0 j/ r vItem.nIndex = i;$ y6 n9 O9 u% s
}else {
' ]( x7 ]! w5 o) D; ? ItemProp* pProp = pItemElem->GetProp();% w; r7 O7 T4 I8 \- U* c! d$ T; S
vItem.dwKind2 = pProp->dwItemKind2;
! n; H' N( A1 `3 T9 i vItem.dwItemId = pItemElem->m_dwItemId;
1 l0 Z0 E A* A; b# {) r( V6 r vItem.nIndex = i;
) u- f7 O# L0 }4 C. X }
7 E- k3 ? e5 D; B //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);* a% p) M S6 n- p7 s
}
! G i! H1 f1 [5 ]: {6 P% {+ r //////////////////////////////////////////////////////////////////////////& F9 k& Q4 C6 ~) K. z, G1 j7 P+ B
sort(vItem.begin(),vItem.end());//排序
( Z1 Y; o( c# v, h' t3 w& l5 q //////////////////////////////////////////////////////////////////////////* h' j9 i1 F/ J* y( x2 } X
//交换$ O5 U6 o. p$ i% o
for (size_t i=0;i<vItem.size();i++)
5 \( R4 l' n. D8 Q5 e {& t1 t& L1 i/ A
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
8 l/ A* A o' r2 p* P1 s" h pInvSort->Add(vItem.nIndex);
* y6 u6 S& V$ b8 d! ^( j9 D }/ k( W9 ]3 a p9 V4 E2 U6 k! B L
BYTE nDestPos = 0;% n2 {; g) f. W( m T/ D! c
for (int i=0;i<MAX_INVENTORY;i++)9 b, A! y# o2 M
{: e$ P" {+ V4 ^9 l- V9 Q6 I
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
6 u7 B, v% e' t1 q" `& Y+ a" v if (pItemElem)9 \* J4 @5 a) E Q9 |0 H) H
{* G# q9 x- f! h% E2 b; |1 M& k
if (IsUsingItem(pItemElem))
& {* X, J/ z `0 K% _3 q" J# r3 S+ r {
s. T/ N/ u4 R! G# Q //这个位置无法放$ {) X- n% ?( K. G# o4 I1 o
nDestPos++;% j1 W, q* k$ M& D- F) i
}8 h0 p5 B# o8 R+ Z% `5 o
}8 j4 A4 G! [. r/ F
BYTE nSrc = pInvSort->GetItemSrc(i);* W% _7 }3 T' p! E2 O* D
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
9 U1 Z5 n3 e5 x; D! N% J if (pItemElem)/ e: c3 ]( j( b* B) Y, b) `
{
4 c1 v: ~& l) e* Z2 t2 G if (IsUsingItem(pItemElem))
/ i; I2 w5 P! @5 d. e* X {
3 ~8 D% x* k; [3 _0 }2 O //这个道具无法移动,跳过3 t. F: X& N- w( O, k& I- N
continue;
: `: v9 F0 Q- }4 _7 W6 i }
6 C! O4 [. [4 a- r' P" z }else{
+ l% @: U9 z, E. R: |9 T //空位置 不用动' c, y, ^7 Z8 A: C/ Q3 a* A
continue;
5 j$ c( k/ ~5 K0 }" t: V }2 V, X% h0 W4 _1 e+ l) j& U; T& L8 ^
//////////////////////////////////////////////////////////////////////////
5 n$ F( p! ?& W7 e5 r //开始移动
, y% i- V) o3 O; o% ?6 L if (nSrc == nDestPos)
5 a/ U& L: q* w3 j {3 E1 T2 f g( { {; b. l4 [, W
//原地不动8 y+ z2 P( K2 M& O
nDestPos++;. ~% V+ |. l2 m7 [: J, {# K
continue;$ D( W |' m) L+ \6 t
}& Y3 I D9 h$ z% ^' C% t
pInvSort->MoveItem(i,nDestPos);% q$ i6 Q4 |2 E) g$ n$ w+ E( _- w
g_DPlay.SendMoveItem(0,nSrc,nDestPos);4 _" ~; ]) ^" a2 T7 d" G S
Sleep(5);8 [& ^2 V+ E! V9 h, i9 b
//Error("移动 - %d->%d",nSrc,nDestPos);1 d z6 K: }9 W# b
nDestPos++;1 B! S! @/ k7 W. R2 L
}0 d: y7 ?) d. a* k& a/ E8 q
//取第一个元素的信息. B9 l' v/ E9 S! [4 T2 r
/*9 w& X0 X) B% r- ^1 }% s" B' e5 S
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
6 r- i* i! A" a5 M7 v$ ?! o {
$ h4 N1 D2 ]( x6 [' n& w2 c Error("Move - From:%d,To:%d",vItem[0].nIndex,x);- W; W1 Z( G; Q2 p4 ]6 D4 R6 }: }: `
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
9 o* A' ?! a; ~' @2 v" Z }+ L R; m$ l0 {9 N% U% `" F9 b
*/
5 X6 d8 C! L, s( U: p //////////////////////////////////////////////////////////////////////////
- a* b* e) |# B break;
: U0 y& W8 S4 x% e9 |! S! b: r }
" v# O8 U6 b$ ] } * u+ w) O3 x* P5 t
}: j* U$ o8 z8 v I8 {5 T% s
m_wndMenu.SetVisible(FALSE);
9 A9 t$ J0 q- w" f' r) s# m1 f0 Q3 w% y0 t/ n% t
--------------------------------------------------------------------------------------------------------# m( U' A, h9 X4 f$ i
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
$ e: n- c$ k* o; ^3 F9 }+ r{
, `; C# G) C( N' g$ { ~) FBaseMouseCursor();" W- D4 G! l" R$ x0 w
}
2 s+ H5 r% _1 z% H7 t5 e1 A在其下添加:- x' I2 d- A2 R# ^# }% M$ K$ d, F( y
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)0 c: U( ]4 ~) i
{: n) w- }. b0 k! i1 k
m_wndMenu.DeleteAllMenu();
* y: ]+ `6 _4 {, qm_wndMenu.CreateMenu(this);# R+ e4 H5 i j- @% \8 _5 U @1 D% G
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");1 D5 h3 G9 h, g% Z1 O
[$ b6 J+ u$ X) \; ? i8 k
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
% m8 \7 A* q k# [' X2 G9 N- A( l{
5 X: ^$ j" r5 Z& k5 [ //P以上级别才可以删除所有道具
" K& @# C4 y3 {' l7 @ m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");$ D2 f2 w/ J7 o$ {* a5 [
}7 z4 ^0 v' B- b3 S/ s
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
' d+ I4 s/ A9 }* e+ fm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
6 q$ E5 x$ g Im_wndMenu.SetFocus();
i- Q; x, K$ B. d/ ~" f& Q* z$ C}' t" U$ N) T0 j7 ?/ k9 o, ]6 t2 N
------------------------------------------------------------------------------------------------------------
* K8 I# g8 F& d. d J) y, U0 r*************************
: N( w% |5 H8 V7 l; WWndField.h文件
7 w3 e2 \$ n1 q \ x# W( F* ?. u*************************/ b& u6 D5 H. J$ m
搜索:BOOL m_bReport;
# s9 G2 ^" D6 l" }其后添加:8 P& N7 h: V! y# S1 v0 T O
CWndMenu m_wndMenu;. G; u7 |$ G7 g
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);: N2 ]. f3 x, T1 H! v
其后添加:
1 r! [# z: e! F2 q9 D( G( Svirtual void OnRButtonUp(UINT nFlags, CPoint point);3 b& s" S0 D- f$ k- t% E9 ^+ I( h
, l2 s1 z; Z$ T& t
6 M. L6 h" R8 l6 i
|
|