|
|
源文件中_Interface文件夹下WndField.cpp文件) J& k" D& {' H* ^' l& V$ r
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
8 z/ @% Z0 [! }5 a
' P( w- K2 d! \3 ystruct sItem+ u8 u0 w! m1 L6 `1 U) N
{' q/ b) ^% }; e# @5 c( `
DWORD dwId;. l, H# T; Y* c5 b7 B, I! W
DWORD dwKind2;
0 I1 h3 ]" |1 L( S) mDWORD dwItemId;
3 |- A9 X8 r# u' i* G( z e- A) F% eBYTE nIndex;
2 Q; K, M- j G5 o& {sItem(){3 J6 I) W# {9 k, |, m; L
dwId = dwKind2 = dwItemId = nIndex = 0;
; @/ S8 Z- q! u) N9 u% @+ J% D) n3 ]}
8 ]6 f" f+ @# D- J1 Ubool operator < (const sItem p2): s2 I K3 J& U0 v% f6 |
{; X' ?; K5 O3 I* A
if (dwKind2 == p2.dwKind2)% t( K# t( h- l. u W x
{/ c5 w) m& e7 g0 \ k, L+ J
return dwItemId < p2.dwItemId;# f7 c) ^' g/ Y$ j @) X- `
}else{
$ W6 k+ s) g) P, a/ ]; t: S3 p return dwKind2 < p2.dwKind2;" X% y3 {; R( x( z' H& R
}
8 P$ N' U8 @# d}
" W' \& q- y+ [/ a( c, o2 ~};$ r- H6 c. k3 l; z Y+ `
class CInventorySort
. q4 y6 v% p9 b1 i{
% M( r, g# p# ]: i6 apublic:! N) Q" I+ I. o1 K& P9 W! V
CInventorySort()5 o0 [' z1 m! t, u1 s
{
3 O# X8 c. |7 z3 ^2 ?) _2 V+ E3 o m_dwPos = 0;
* ^* c2 J6 G \# c& f}
- H1 ]+ Z" `+ S; M) C* E- u6 J3 ?~CInventorySort(){}
+ g7 S/ A$ p5 ?! ^) Oprivate:5 B+ H/ k! {" s$ t) q
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
8 l+ x b( d, ~0 B; KDWORD m_dwPos;
4 o) w4 _5 {4 xpublic:
) A6 d. [# I5 {- q) X" }7 H8 Hvoid Add(BYTE nIndex)
3 k; Y1 G$ V$ R( c; n{
0 p* Q7 c& S; {8 J. a if (m_dwPos >= MAX_INVENTORY)+ T4 w# q) G, i4 Z/ l) a! `8 ?$ I
{+ w& v, J' d* Z. p
return;
8 E% I% u- O* k P9 r }' Z6 m8 M9 H& u U! M
m_Item[m_dwPos].nIndex = nIndex;/ f9 K& t. |' R9 P) d0 f% p
m_Item[m_dwPos].dwId = m_dwPos;5 K: L: |7 f5 P+ l4 B9 c0 H. Z
m_dwPos++; M# K8 g5 W D8 q( J; Q2 p N6 H
}
* t: O$ T9 ]7 ^$ }, MBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
$ T* @3 a ^8 T$ W( }+ F, b{
& q! M' U- ]) Q2 W0 m$ M for (int i=0;i<MAX_INVENTORY;i++)& z6 ]6 p; b! F0 t1 K" m8 R
{
) q- O! W* m! ]3 m+ n, a if (m_Item.dwId == dwId)" q _& Q) d" ]$ B' S$ M
{* ]1 b9 I, c! T0 b+ M
return m_Item.nIndex;
$ T0 ?4 V) X+ z; c* @3 b% q }% V. ~; D- u- ^2 b% Q4 E" I8 f
}
- W) }' ?# x6 i% x3 L return 255;4 j6 S7 P$ @" s8 h5 p
}5 n$ d v4 m! G) q' P, m
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
6 q0 D1 R: L Y9 F. O/ l2 S& B8 y{: c% U8 |( Q3 \+ T) {
BYTE nTmp = 0;
0 y8 E0 V# H9 f+ ]' \5 e3 ?/ `( u3 O9 X bool bDest = false,bSrc = false;8 q+ o `' U8 H& k0 o: o
for (int i=0;i<MAX_INVENTORY;i++)* D( z8 G- B' M+ ~3 K
{2 T5 w5 ], R0 X8 o& V. g- m1 Z8 x
if (dwSrcId == m_Item.dwId)
0 r$ j( ]0 \& O9 X5 W( ~% ?& ^: q {" D6 z' T7 P ^! Q+ W
//id相等 则 改变对应的dest和src
$ U7 q& }! O9 P9 I nTmp = m_Item.nIndex;+ ~. ^9 z; t5 c4 }9 @8 w2 F! y
m_Item.nIndex = dest;
0 Q8 X0 r4 z* B6 X/ d+ f }
0 e. y8 E5 H- K- ` }5 I7 q+ j2 U+ x' A3 f8 X3 G: `
//临时数据保存完毕,交换开始
/ w# P" Z' N! F$ b: S for (int i=0;i<MAX_INVENTORY;i++)7 t8 H" b% T0 @' _
{
7 l/ N( B( C1 s) | if (dest == m_Item.nIndex)8 q/ P) n+ ?2 I; X# t3 }7 Q
{
% K4 R2 @6 t4 b0 M6 q& t8 R: |3 ` i //id相等 则 改变对应的dest和src; C4 }/ v) p1 ^, A9 g3 v- A
m_Item.nIndex = nTmp;
+ o& ?% R1 K- b1 K }' B5 T1 |. u9 a: w: Z$ W
}
1 S; w1 |$ L# }* P}
( G# k) o& |8 g" w1 i Z2 p5 V};
7 x6 _: `2 @3 G) K! o5 m-------------------------------------------------------------------------
y, C; f0 L* |, s1 @依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )# ~# H8 r: J8 H) S1 _. S. } s
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
6 d7 V6 y5 J2 z: ?# m7 W紧靠其上添加:
4 v7 z/ I& p2 Q( b7 j, Xif( pWndBase == &m_wndMenu )+ ^' M7 J5 C/ x( D
{
3 {5 m. A2 }$ Y* Q; ^ switch( nID )
8 U# c5 G4 W+ {3 E4 o4 n- P {) G/ U, i& g& p: l
case 2:
5 z; @$ R& I1 R- A {+ ^0 C! z/ Y& l0 J' D
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
4 c! @: G5 w9 W% b r if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
3 r, J$ [3 @ d6 ~0 [4 c { j4 C; |/ Z- b" }& [, A6 a. G
break;- N7 X, Q& c# R K {+ P! J
}: |% G, A W4 Q+ ]$ ?2 i0 D
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
% G& J6 p9 i5 I4 S# O" x {
% d8 g- v8 ~% G& G+ @ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);" S1 u9 t, d3 T$ ]; A$ j
if( !pItemElem )
W: A k" r8 W" w. s1 I continue;
* h. p, G7 ~* t6 Y if(pItemElem->GetExtra() > 0)
: N# ]8 ]$ j( `8 L& y" s, L7 a' p. [ continue;
7 z# M2 _. z) M/ i9 d3 [9 D if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
4 u: W8 F+ k4 _& | continue;1 H* A/ q0 v" K6 Z6 H" K
if( g_pPlayer->IsUsing( pItemElem ) )+ ?! z3 b3 _4 T0 K/ k" l
continue;
: Q) _# G+ w% b; n: ] w c if( pItemElem->IsUndestructable() == TRUE )
6 d* U# G8 O0 a3 | {
* _* [+ E- x3 b) d2 ?2 R1 u g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
/ m( b2 L1 _/ _# t% }9 R& e) C continue;
3 o1 n) g5 d) ?1 N( W/ a2 R* R }
5 E6 O V( h( K7 p: ^ g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);7 ^/ e+ K1 h5 g, N, [/ F
}( A- D% V2 S. ~! E9 m; n) f0 ]
break;2 z2 z/ m: ?# O# u
}5 n/ \: G) V3 m! ^
case 1:; x% a$ |; O& l& M: V1 A1 l
{
: p/ f! G* Z( a //整理背包
" }. \7 y: d' U$ } //////////////////////////////////////////////////////////////////////////6 Y' ~ Z( h/ n" T* q3 S
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );8 T9 O5 k H/ J
//////////////////////////////////////////////////////////////////////////0 X* E/ F3 _6 U& X; [
//////////////////////////////////////////////////////////////////////////
6 u$ M4 o" O$ e, M. D CInventorySort* pInvSort = new CInventorySort;5 z- G1 E3 l, E. J8 m# q
vector <sItem> vItem;/ C/ D5 e7 L N3 R, I+ T5 a2 X5 L
vItem.resize(MAX_INVENTORY);//初始化大小
' ~$ I: M+ h( ?8 Q; l //////////////////////////////////////////////////////////////////////////
7 E' O9 m6 g# s8 _: I" |( P //填充数据/ A0 H A7 n4 r2 E
for (int i=0;i<MAX_INVENTORY;i++)# o1 m2 M9 x# E' q D$ v
{
$ Q) L N. _, L( ]( I7 F CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);, a) x* C- k& w; p, ~$ ~) v
if (!pItemElem)
5 X @9 n5 j; `" j4 N {. L! k3 k7 v/ @/ j
vItem.dwKind2 = 0xffffffff;1 N7 m' i( z' E# H4 {$ e3 K
vItem.dwItemId = 0xffffffff;
8 r7 F7 o# l% `8 K: j& j vItem.nIndex = i;; L( n3 ~' B$ c
}else {: L S2 o# w$ q: q
ItemProp* pProp = pItemElem->GetProp();3 X! H) Z) c2 V% D& I: J
vItem.dwKind2 = pProp->dwItemKind2;9 e4 u8 L# ]3 U" |, B
vItem.dwItemId = pItemElem->m_dwItemId;
@$ ^* j$ z, l; ?4 }" F) d" c) S/ [8 c vItem.nIndex = i;0 W5 r1 o" T q1 |0 C+ E \ p! w
} E% G4 P, L K2 R
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
1 z( S$ d7 }5 v5 c$ p% H+ f/ Z }
' U) B: R' P$ R7 M; v' \- d% I //////////////////////////////////////////////////////////////////////////
; J0 [. X2 l8 z( x! f+ [ sort(vItem.begin(),vItem.end());//排序
& S+ ]9 y; M' F9 V0 b) c. U8 I //////////////////////////////////////////////////////////////////////////" E+ t E0 {: J5 E# G
//交换" F9 q8 t: v" w& _7 T6 D7 n
for (size_t i=0;i<vItem.size();i++)5 i9 \% m5 \, |( ]
{
/ {' e1 ]6 p. f7 o1 h, I2 \ //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
% C8 ]; p4 g2 S6 K" ]$ E6 T: T pInvSort->Add(vItem.nIndex);
' n0 F! c- p% J }
" z$ ^' {9 A1 v' U BYTE nDestPos = 0;! r" w2 H/ L9 h A
for (int i=0;i<MAX_INVENTORY;i++): W5 ]8 s/ d1 [5 r
{
. i5 }3 v! B. D) W CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
5 k' I, }0 D* l. V9 B if (pItemElem)9 Y4 t: i/ p. J: D
{0 }+ M+ H: X4 S9 U
if (IsUsingItem(pItemElem))
1 y) Z1 C1 t1 T8 S) n2 N: u {
3 Q* K" Y6 o8 o/ I' f8 }3 _ //这个位置无法放
7 _! L" Y1 b2 d" D- [9 ~! I# b nDestPos++;
% k9 i+ h: Y2 \2 P }
' M+ k; P3 d. j5 _6 j! Y }# B6 }8 U3 \8 |$ }3 ~$ b3 V
BYTE nSrc = pInvSort->GetItemSrc(i);* Y9 m+ F+ @' P" ]' W6 ? C
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
1 z4 e* E6 X/ t4 B. P3 \ if (pItemElem)
8 }% X ^$ q+ _5 c" V {
$ o# m- B) ]% l( M if (IsUsingItem(pItemElem))
^0 v/ `, M! ^# \0 C @ O* @+ U {
. u; y! b \1 ~1 p K; { //这个道具无法移动,跳过
1 g; X, @) \( H( n8 | continue;
4 g! O, r* D @) k } c8 K, K" v7 |/ j( E
}else{
H& O8 Y3 o5 C //空位置 不用动- B2 h; H2 N1 I4 H# ^+ M
continue;
$ H9 l2 \; ]0 Q4 ] }/ \5 R+ A7 E: l7 ?
//////////////////////////////////////////////////////////////////////////' l+ }5 @+ t$ }4 |$ g; ?
//开始移动
6 M# w0 w8 V! k3 D) |7 \ if (nSrc == nDestPos)9 S" a% C2 T1 |% n
{7 H$ i6 U- v1 P" O
//原地不动2 w: P# Z6 E/ N9 x: ~
nDestPos++;) T' j- q" k1 J6 c+ G
continue;
+ b# {2 W9 q8 {( f }- m$ v A5 o% H/ W
pInvSort->MoveItem(i,nDestPos);$ |3 ~( c' z0 R
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
! m, ^/ a' O/ s' L# E Sleep(5);
# E3 D& e; J( x //Error("移动 - %d->%d",nSrc,nDestPos);
' m$ Y$ a4 J' A! u nDestPos++;
' w" o4 y u) _& q }
+ B/ q$ A3 g5 C" i //取第一个元素的信息
$ G+ C9 P& `. H /*
; T: b8 _' C R, C$ n. y if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
$ r1 o% U2 ~% l$ e/ c r( D4 b {
. f* b8 d7 m# o: r i7 z. [ Error("Move - From:%d,To:%d",vItem[0].nIndex,x); ^0 W+ _& x6 I. F: c: X
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
5 {: G8 S4 t" O! Q! ~6 X ^) E }
/ ~5 o' S3 D& n: k8 h */
8 O! k: z3 M: L( L& b" T: Q( R //////////////////////////////////////////////////////////////////////////3 B, L0 ]1 g+ S/ ?$ B l# ^
break;! S9 M o( w5 }
}, q1 [$ n( y* W6 ]' l8 L
} P. J7 z) J3 C: l( u
}" A7 v# o$ \1 ?. m8 n2 i
m_wndMenu.SetVisible(FALSE);
2 m9 r, _* X" O6 J
! [' B! ]5 W: ?. c# C& G--------------------------------------------------------------------------------------------------------
( Q5 K% y" W" D; U& q. [. `8 E搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
' ] p. E5 Z* [: c% r- l5 [+ x{
5 n" x! d# f; \* yBaseMouseCursor();7 z" p& `* X- Y1 z- O1 X1 g" L# n% \
}
: b6 Y4 T R3 A4 N在其下添加:
0 Z! n5 o. u( w4 cvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
+ j0 t0 \3 t. g2 [1 F0 g{
+ O7 d: d/ [) Y7 y. B1 Hm_wndMenu.DeleteAllMenu();/ E+ D, B6 l( E( e
m_wndMenu.CreateMenu(this);2 D3 M2 Q% \6 J& C& g/ e: V2 X. g
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
: E) w3 `, F' d3 ]9 h4 n/ w$ w' _" \1 |2 y+ a
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
/ B" [$ F- D0 V- e9 z L{, L5 ]- J# @0 V% F/ j% W
//P以上级别才可以删除所有道具
" [" W: A# _/ c$ U4 ` m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
1 R2 l9 k% F5 P$ U. Q; y' b N) ~, H}
1 D" e% N; m9 B5 r/ b4 pm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );) @0 W5 ?, d% B0 m
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );( U- D+ ~+ ?2 k! U, l
m_wndMenu.SetFocus();
* O0 G) W% M# E" l}8 b) w: C' U8 c% Q
------------------------------------------------------------------------------------------------------------
% E, S, B: E* {9 O7 }3 d6 s************************* d! ]; g: i, ?3 q
WndField.h文件
+ w8 W0 v1 ~/ V0 n- c4 G*************************3 E6 R, k, @' g+ O! |8 x5 s
搜索:BOOL m_bReport;* z* z6 O# N/ J/ N# |& \7 s
其后添加:
; _4 E. E# y$ g# Z4 `" u2 I! ~CWndMenu m_wndMenu;! A: X; t; E' d1 S
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);* F- i" f6 B! C4 G$ p8 z7 u
其后添加:
! B0 E: g' h3 [1 y. d' t9 {+ f% F6 D4 Y% qvirtual void OnRButtonUp(UINT nFlags, CPoint point);
$ v# z2 s2 D9 f% i" ?- n1 x& A
" J- q2 n( [8 b! m3 V& w
+ v/ T7 C9 b* o* N1 p5 s5 W |
|