|
|
源文件中_Interface文件夹下WndField.cpp文件
% g7 l8 x* i( N) D9 z0 k$ g搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
1 C: \3 `& g0 T
9 ]' W B X/ B5 G4 bstruct sItem0 m) f n* R: P y9 a% Q
{
R" n; |7 U" l5 T7 EDWORD dwId;
! t( Y- L* [" U7 K4 _, i! U, {DWORD dwKind2;
6 f5 D: l7 H8 O1 M3 A+ fDWORD dwItemId;! O3 O: P. p# M" T! u& g8 f
BYTE nIndex;+ H. n3 z3 h9 N( n6 y s0 V1 G% ?
sItem(){
$ V$ i7 W2 c. L4 ? f h dwId = dwKind2 = dwItemId = nIndex = 0;) e; Y. E1 R1 W2 O
}0 L* z& y/ ?) ]
bool operator < (const sItem p2)1 h' _. l/ O3 L" H4 D; a2 Q; @
{
) H+ w% `' i0 v: H2 k if (dwKind2 == p2.dwKind2)0 J w" c+ }' `$ w- ?
{5 q) ^8 O) o& S/ n. \: T) L1 F
return dwItemId < p2.dwItemId;
6 g1 V2 ?& @5 `+ U$ x! G8 F& N }else{' [' i) |+ [0 B" U
return dwKind2 < p2.dwKind2;
4 i- e3 C" a0 I }
9 h0 S: d6 a! I3 ~9 \' Y% M9 k7 k}* E* u, P% ^; \/ k+ f
};
& {- Z: _/ J G# [% q/ @4 H" Wclass CInventorySort
* ^' ^! Z9 f3 s4 B( u Y{
% Z1 t4 t* @* E( ^+ Jpublic:
; W% T# q/ ^, n7 KCInventorySort(): i/ m9 E; ?( e8 X
{4 d1 Z' v. v& V/ B& n# ~, T
m_dwPos = 0;+ ~6 E' j5 E7 b, z1 c& k2 |
}, Q! x6 \! I' A: \! T/ E
~CInventorySort(){}0 F! g* S o! G6 c" V& U
private:
5 |. i8 W4 t, A2 lsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息1 Y6 u+ \! @% U# k3 H \+ @, v
DWORD m_dwPos;, E& \$ p: c1 ^& }6 P4 [
public:
3 C( Y) i& y m& [. u- cvoid Add(BYTE nIndex)- z5 P7 A# ~) O' p0 O- L
{ O! a. f* k+ h: K/ @
if (m_dwPos >= MAX_INVENTORY)
0 M( d1 \- B' ~$ c {$ { @ Q' s' [( a' g H
return;
: ~2 q' d N0 u }) n& A8 j: O) q' U) y( Z3 O
m_Item[m_dwPos].nIndex = nIndex;: O* k% i$ h# |: O
m_Item[m_dwPos].dwId = m_dwPos;
& K y. I; D$ E2 F& o m_dwPos++;( M) q) `$ @" L
}: Q- v6 \" M3 f3 D% X1 o$ _& n
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
+ z5 Y0 P1 k( S4 w8 O1 c% Q{
$ F, C: Z/ h- H# i E for (int i=0;i<MAX_INVENTORY;i++)
+ n; h9 M' G. C5 N4 |4 p3 K {
4 ?# V. g# j, r5 R! A( D4 v Y; b4 G if (m_Item.dwId == dwId)
! j. @" ]0 R, t) @ {3 r+ {" M( u) `9 q( y: W; {
return m_Item.nIndex;9 i w* Y$ {+ {2 B
}% j, R! e, H% W
}! h$ R* ?4 Q# m5 r
return 255;
1 v3 G+ x! B3 |% Y7 h5 r' N# Y1 O1 G}; R& `+ R/ d) B. D6 V! q6 Z5 {
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置8 D# B4 ]& {/ ~8 v% s+ I7 H
{: l7 `) h( ?& L2 d4 p
BYTE nTmp = 0;) g. t8 [" ~. S; u2 J7 m u
bool bDest = false,bSrc = false;& _, S6 ^+ B* [( z c* W8 n8 K
for (int i=0;i<MAX_INVENTORY;i++)0 P! Z5 c7 ~ ^' {3 f
{
. D; z: X9 A+ J q% ~, Z if (dwSrcId == m_Item.dwId)+ s1 V$ y1 U. ?3 \2 [( r
{
5 b3 z& g; N9 s; V //id相等 则 改变对应的dest和src' b8 P, A/ p H9 U2 o2 B
nTmp = m_Item.nIndex;2 Q; r% t0 R6 {* ?) X
m_Item.nIndex = dest;" @. V6 X4 G8 K4 Q+ k. \/ m
}
( e' {4 G9 t7 V$ y) J }
1 d# A$ q( T+ V //临时数据保存完毕,交换开始
% z) h' P) ^! a5 ~ for (int i=0;i<MAX_INVENTORY;i++)% L0 E N1 U( k
{
1 }4 h; D* m) |8 _$ j, S! P if (dest == m_Item.nIndex)9 s/ {+ Z9 v* _6 ?' w& V
{
& c+ A/ o. Y& l/ Z% A1 T" f //id相等 则 改变对应的dest和src
$ z$ H7 C5 H. w R% N7 L$ G. f m_Item.nIndex = nTmp;3 P1 S5 a1 D+ E- L
}
* X# ]& y1 C0 W/ q! ?( I+ W }
W r. h; m4 ^' r" x3 P}
! H6 ]; U8 e/ h! c: q. K};
0 C9 S- @: k* N# Q-------------------------------------------------------------------------8 f1 \. z7 [% H8 y) F
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )- N7 k% c* I& g, @6 t
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
5 h. D7 o$ i3 d0 k' a" b紧靠其上添加:
& O! w( h m' W; Zif( pWndBase == &m_wndMenu )3 M2 k+ Z8 \& i! e
{
% e% u2 a. C: s; R8 D# `4 a1 i8 C switch( nID ), v! [3 R' A7 \4 p
{ d2 R1 z! a {! x0 W
case 2:8 ^6 F/ u0 E/ d5 W
{
. |! \; D+ h$ r6 x4 K( ~7 `; h //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
: `* F+ e- S8 r1 [ `/ y& r+ W& d if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))# B0 ^! `2 C7 y4 E x
{
# J5 N( E" h7 t5 A7 z2 ~% J5 q break;, Y0 n4 V& s+ i! d, N, E
} R1 B7 [# ^9 I
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
0 L) V; i: k3 z: M {
6 a5 ~( E# N2 M4 ? CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);3 a" Y1 E* J' @, C- U" z5 M* \0 p* t
if( !pItemElem )
9 I3 C: r, n, U$ U- @2 S continue;
9 y6 h6 C2 d. q- S! G4 a if(pItemElem->GetExtra() > 0)
, Z9 W$ j2 o" C+ g5 B continue;1 S' l$ l3 F# T+ ^ A* m
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
" f2 c& {% v# ^8 P- v( a continue;
4 j0 t5 ]/ N; N h [ if( g_pPlayer->IsUsing( pItemElem ) )
7 [+ Q, j+ |1 B$ L2 _& ] continue;- T) x C8 g) `* q6 f. G v+ Z8 Q7 W
if( pItemElem->IsUndestructable() == TRUE )
E$ b# j% e2 @7 ^2 i3 z3 V/ ~8 B {
1 r+ ?( e) O7 g$ X( v% N g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
0 t" x$ l) D2 T) ]* q continue;
6 V1 l/ W2 [; H/ R* z }% z4 D. L8 S) e
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
E+ c. T$ w$ O( [ }
+ m: g. u& P4 ^2 f9 x+ f% p break;
; C* W8 s" y/ d9 _5 _7 o9 Q2 g7 ? }: p$ ?* s: u" }* g/ Q$ [' z
case 1:
$ Y4 b" L/ c2 L2 q ^+ O7 D {8 G; H% o, ?8 l* R I! Z
//整理背包
" q- K r- m8 Y //////////////////////////////////////////////////////////////////////////2 c: P4 \' E/ L6 k! J. |9 A4 k b) W
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );1 f, y" p" W! p9 q4 }
//////////////////////////////////////////////////////////////////////////% e, p/ d& b: F3 w
//////////////////////////////////////////////////////////////////////////
, s- W: i' R, B* }! E, G. U CInventorySort* pInvSort = new CInventorySort;
$ i2 o" F$ e( r8 m( R9 M vector <sItem> vItem;
, w; }& ]5 v" r0 E vItem.resize(MAX_INVENTORY);//初始化大小
9 U7 r/ |( y1 l# G u1 S //////////////////////////////////////////////////////////////////////////% t* E- r- i% l1 B: p$ x% R
//填充数据# t5 y% P& W1 u, D0 e! J
for (int i=0;i<MAX_INVENTORY;i++)8 |9 |- \+ G- ]9 V9 ?3 a; |, s
{
% D; j* I$ a. y4 g CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);- D8 I8 i! f. V) \6 t) G* v
if (!pItemElem)
# P# `: v8 p, ~' s! N |. ] {# u9 _, V/ f; G+ V4 Z, K; i
vItem.dwKind2 = 0xffffffff; S! j7 F% x( T5 _
vItem.dwItemId = 0xffffffff;# X% f, W. |0 t, b) S& O
vItem.nIndex = i;
1 A1 [2 R' ?4 S, V) W }else {* y1 {8 R/ n0 _2 d6 Q& z i
ItemProp* pProp = pItemElem->GetProp();
8 s# e' g+ z! g: I/ [/ W0 a vItem.dwKind2 = pProp->dwItemKind2;
2 r/ w# c; C( @) \* o" f8 N vItem.dwItemId = pItemElem->m_dwItemId;
3 F( Y; v4 u$ n; _5 @) r vItem.nIndex = i;* d5 o& s/ ?( N" a
}; E/ h# n) N' r* d0 r
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);5 x. s, F6 `' t
}, \- @: B( N9 `3 B; T
//////////////////////////////////////////////////////////////////////////
' c3 y. S" L+ i2 @; O sort(vItem.begin(),vItem.end());//排序8 s5 \; k/ p- @7 P3 b; q; p& y( ?
//////////////////////////////////////////////////////////////////////////
- b& k+ s3 ?' ?: O9 i //交换
) k& E2 ~+ @0 z for (size_t i=0;i<vItem.size();i++)
" |7 `, v% |+ c6 X {) [: [: b8 \% m& T
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);1 W W! e2 n; j+ b
pInvSort->Add(vItem.nIndex);
: D7 @; X! a! ?0 A$ }) }" n8 @ }# g" R8 w( O8 t9 m6 k# g% U0 c
BYTE nDestPos = 0;( R! r d. l8 z0 G( Z
for (int i=0;i<MAX_INVENTORY;i++)3 R5 Y' R. c( q" v8 ]& Q( I, o4 H
{
( E+ C4 ^" l9 ]& q CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
q V# ~; S; r. U' \/ k2 i( O' B if (pItemElem) `. }) z* n! B7 _8 R
{
4 B1 V) P; b9 Y5 N if (IsUsingItem(pItemElem))
# `: t6 M5 i4 G: c' M {$ L0 K. X0 T& M) K) k4 ?
//这个位置无法放8 `/ Z- [! b7 ?2 _: b
nDestPos++;
5 s1 K& G% s# h }
$ Q! m e/ t; f3 @2 I }( O9 }5 R4 d/ X. O# U4 z$ y: l
BYTE nSrc = pInvSort->GetItemSrc(i);
" n" k, R, C5 I9 K* W( I pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);8 t( c. j- G- C s0 W
if (pItemElem)$ H% \+ |( U; u( v: _- V2 h. ~
{: {( L2 G3 V) G+ N3 v- s
if (IsUsingItem(pItemElem))) X9 a, Y9 w* |, N [* r9 R7 F" e
{# ?. \4 I1 [7 ]1 L* ~# C5 G0 U
//这个道具无法移动,跳过
" O5 ?8 i' i8 F+ a continue;
4 y- g. z- w# p3 G& ~' K }
5 Q2 u8 O0 S- |/ A }else{
, s7 W# R+ v5 o0 P& m5 U //空位置 不用动
9 C( ^$ V+ A! J continue;( J! T) n0 o# A5 r
}) |0 K. x! z5 o! q! p
//////////////////////////////////////////////////////////////////////////
9 |, T1 T3 s% C! H2 [ B% N //开始移动
' t2 O; H/ A$ z9 O9 w) p2 ` if (nSrc == nDestPos)' c+ p* c2 y& @& o- f& n
{
& G6 M) c' O& J5 X //原地不动
, [% Y( J4 ]( \0 [# } nDestPos++;
/ X' i( B5 z( Q8 H9 f u continue;
" ?3 t6 `" B8 t5 B ]! C }
0 |2 w# a9 y3 k" q; y! v. \ pInvSort->MoveItem(i,nDestPos);
3 f0 Q5 S' M# q g_DPlay.SendMoveItem(0,nSrc,nDestPos);, }. }* v) J- a+ D7 U, G
Sleep(5);
/ V- K0 u1 ?) ]% J( K0 E //Error("移动 - %d->%d",nSrc,nDestPos);
4 H! }3 E3 V3 n8 k2 K nDestPos++;
( f, w% ~6 M$ U1 ^, x }# [4 O* v1 k' U/ l2 O
//取第一个元素的信息% p/ k# ^' j# e( h% y _! r
/*
: Z' @* H3 |0 Y if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
& h# Y/ R' [, m7 R6 d {
. ^5 R$ y5 l) ]4 y; J7 ] Error("Move - From:%d,To:%d",vItem[0].nIndex,x);% l: ~$ t/ Z- U7 {! k
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);* }2 O" |2 ` C
}
$ @ l+ V- F5 ^4 q */6 D2 _; _+ V6 r% X" x! U
//////////////////////////////////////////////////////////////////////////2 Y) u/ A0 ^, B i8 B5 P. G$ x: y
break;; N' s7 d+ p2 i1 a( i O
}
: G2 a1 E: H2 U7 [4 ^0 u& ` }
2 c2 f f* S- h; } ~& U}: k0 ~! M+ U o. p
m_wndMenu.SetVisible(FALSE);1 \. m6 O1 J+ V& @% j0 p. `7 T
& }1 p9 H9 }: a
--------------------------------------------------------------------------------------------------------
: \" V2 b+ {. A搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point). [& T+ |3 p5 ~+ f
{7 ?; U; i+ @/ D/ v2 H: l' L
BaseMouseCursor();2 ]* f/ S9 @: u1 S
}& d9 D5 ]; X3 i+ f
在其下添加:
! L* w8 [0 S0 P/ kvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
) m5 P! C K e* s{
8 z0 J0 N! {3 ~* km_wndMenu.DeleteAllMenu();# ]# k( R' Q2 e0 N) Z* ~
m_wndMenu.CreateMenu(this);; ]3 h9 L; y% }, {. ~" j
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");. u' I1 C' B) w& U9 A' J" h
! o, h% z' @0 g
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))0 [6 C$ S d0 Z- S) ~
{$ R* f2 W' j* b# v9 W
//P以上级别才可以删除所有道具
8 s4 n% X3 y8 ~7 x( ]4 A m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");9 k$ B" T8 f7 s- x, Y! d
}
) h1 Z! t( y7 n. R% \9 @m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
' }/ S$ h8 u7 h4 [3 fm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );: C( y+ D; M, Q4 b
m_wndMenu.SetFocus();
- ?" k# Y8 U" M2 x}( E6 j' q2 Y8 i2 t
------------------------------------------------------------------------------------------------------------/ z% P4 e2 N4 g) E" v/ U
*************************: u; {6 ]2 J# l" S! i0 j$ ?
WndField.h文件
4 z/ Q2 z7 }6 A* U+ F; R: [*************************0 _0 J# S% x. X. I! M" y
搜索:BOOL m_bReport;+ l" i$ e+ S5 V- C. A) a: P
其后添加:% D" j& Q W/ i
CWndMenu m_wndMenu;
* J- ^' R1 U1 O搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);8 d! ]/ Y# `6 f, i9 e
其后添加:
- G4 J( N/ U& S5 l2 fvirtual void OnRButtonUp(UINT nFlags, CPoint point);
2 I; S* x3 p% m: L0 j, u$ H, _" B t3 G+ H" S5 A
% `7 Q( C0 V7 g |
|