|
|
源文件中_Interface文件夹下WndField.cpp文件
0 v1 \1 M9 c/ q0 g0 \/ K" k/ _搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
% V' I! l3 k' H+ p7 d. @' j6 ~ U4 L1 f' y6 r
struct sItem2 G; C1 S3 J7 e' K2 s! W1 } }
{
+ ^) s3 S6 T# M, Q5 ]( bDWORD dwId;
2 y# j$ [9 R5 s& u% x8 U6 b) _DWORD dwKind2;0 {) B% d ?0 Q( F! m! Q
DWORD dwItemId;; o8 R3 c8 z3 ^; o
BYTE nIndex;& `) s0 `0 x; h4 b. c
sItem(){
8 a, l0 ?- e' w dwId = dwKind2 = dwItemId = nIndex = 0;# E5 V2 V6 g8 d, `) J I4 ?
}2 i# U0 r2 b7 W
bool operator < (const sItem p2)
. n2 \. H, X+ ~* L% X: m. \9 j* @{) ^! x8 I; H4 W/ Q5 Q0 I, O+ i6 K. ?
if (dwKind2 == p2.dwKind2)5 B& {9 E% m! V* c
{6 ~1 _% x, g6 d& `1 X
return dwItemId < p2.dwItemId;
! p) N/ u2 n9 v/ j }else{
' D6 E( h9 `/ d6 D9 n return dwKind2 < p2.dwKind2;
~8 v* H0 b$ `3 q) D }, M A$ {( ~2 @7 e6 ?
}- n( N* H" j& h3 v' k5 r4 Y0 e, H' t
};
0 K9 p' Z- i: G- v7 i1 C: p3 p* `class CInventorySort& [, v6 g7 x. w
{! X3 Z7 `# d4 e9 w/ p9 ^ q
public:# s" U: I- \. w" a/ r* Q
CInventorySort()
& w# f5 y$ U1 g4 }5 o& B{
( q# l5 r* d9 q1 ]! p m_dwPos = 0;8 y. T* c% I1 y& H; u' m0 f& Y6 x* Q
}- O- u& y9 P" L" V7 k
~CInventorySort(){}
1 }. i+ X1 C9 I0 nprivate:
5 d9 U5 E3 O3 A$ E9 K/ G p! |sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息$ O( N( h" V6 M S8 S- B
DWORD m_dwPos;* `2 q3 w( ?' z/ L) k! B# j A/ U+ U3 J
public:
}3 s! s0 X$ u' S4 V/ _$ K- Qvoid Add(BYTE nIndex)4 p1 j- K9 p3 }. g" Y
{0 L7 v ?/ r5 Z& ~9 E2 }; o
if (m_dwPos >= MAX_INVENTORY)
2 s9 `5 w% Z M. k {+ }. u, k" K+ |* D5 x- C7 q
return;7 E( |' R/ @$ ?5 T' k
}7 k! U; b7 x; z* ], s
m_Item[m_dwPos].nIndex = nIndex;
5 Z9 c/ e1 f5 l+ s) o0 T R m_Item[m_dwPos].dwId = m_dwPos;
0 y4 y( X' s% O# F' X5 Z4 t m_dwPos++;
9 y' @" z- l* l! m}% F" h; J* t, M: D# M8 W
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
. V& y; u3 I5 {$ B8 D1 }) J{
5 C7 A3 D. b+ G1 J for (int i=0;i<MAX_INVENTORY;i++)3 c9 d4 K8 u B$ B; D# j i
{6 W, p% g( h: n& F4 @. a
if (m_Item.dwId == dwId)& {2 J! E0 c2 _
{
7 a% j# k% f0 b6 A return m_Item.nIndex;
3 ^5 o( z2 l$ n. X }
, X9 a7 b0 s, o- K, c! w6 A }
8 o# D3 }8 m. Q9 x$ q1 l( g$ o return 255;
' R3 N8 f& R' s1 r/ L}+ f. U: \) Q+ ~9 c2 r$ ]
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置4 i" [1 f2 F$ G& o
{
$ M) i T. @# p! o BYTE nTmp = 0;
5 T1 F: r3 l) p bool bDest = false,bSrc = false;
( m! u( z! Y0 q- z3 T4 e2 `* q for (int i=0;i<MAX_INVENTORY;i++)" o+ p& T( M. G% j
{6 }; ]9 U1 @$ h; h* ^# W( o
if (dwSrcId == m_Item.dwId)
( N) N5 I$ a" `3 u2 ? {
0 X8 N1 n( X6 O4 b //id相等 则 改变对应的dest和src" Z3 p$ u* o# I" Y: H* p; r/ Q! l; Q
nTmp = m_Item.nIndex;
- z; a0 i+ q2 V8 E1 f m_Item.nIndex = dest;8 s7 ^ }5 u9 q3 n6 s# H2 Y3 T
}
* g* `, I# A- C. s( Q0 d5 b }
; ]+ \+ v0 n2 M- ]: s \ //临时数据保存完毕,交换开始
. q: q5 F- e% R for (int i=0;i<MAX_INVENTORY;i++)
: q7 h; s5 u! G9 x {; z2 L, W( w) R$ V( z
if (dest == m_Item.nIndex)
( G( @; @& E( k0 t' c8 G: D {( B3 _3 F- b) O/ X
//id相等 则 改变对应的dest和src
9 G4 Y7 U9 B! ]4 Y m_Item.nIndex = nTmp;
: p/ Z2 I1 N$ _8 I3 U) ] }
# C( A. D. v1 q }
4 j+ D9 e7 [0 D}, y. E3 `" N/ } Y8 \% @* I
};
. d. ^( f- \% ]* f! I: R/ J l' E( J$ ]-------------------------------------------------------------------------* B$ L0 |/ p1 P7 M9 E6 b
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )! z* N7 U K( J3 l5 T
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);$ P" k X! Q( A* I; G4 \5 P% _ `
紧靠其上添加:
2 u$ C3 @: l) Z, B6 X; ^- uif( pWndBase == &m_wndMenu )
/ y5 f! {; Q( D3 I- D{
" g: ]; [' z. j! z* S switch( nID )( b. B6 k' G. h) M2 {
{+ `8 ~; v8 U1 _% ^# D9 L( K% @
case 2:
6 G4 L8 ^# A! `7 u {
1 H" m& Q1 W7 ?2 { //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
4 t& p, _2 S8 o# b+ _# z6 [1 M if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 k* A y& X# k* }7 l5 K {5 F7 h; x! x5 |* T# b) ~2 _
break;
, O5 O- k% T5 V& W& d }
- n' B! `! ~; i8 M0 w$ q- P for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
* H1 }. h5 M, j" R. f7 f6 w {
. o& i& V- ?0 a4 X CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);: P8 G# ?: j i! @3 v0 ]9 }. o
if( !pItemElem ): ]: n. s/ N: y0 Z) I' N" X& `
continue;2 ?4 Y( A" L# C) Z5 V$ \
if(pItemElem->GetExtra() > 0)
[6 `. K; w: ] continue;5 N9 _5 V! U) ~; K1 k2 v
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) : X6 R! M3 a" [* v" r$ i& Y
continue;
! T: w/ ~+ e1 {0 W# _* S/ _ if( g_pPlayer->IsUsing( pItemElem ) )! P2 Y( _/ w& D. |8 Q9 a, }: c
continue;- _' i Z6 l K9 b
if( pItemElem->IsUndestructable() == TRUE )
3 c2 }' W/ u" s$ E {! S' m K* H) _+ J1 x
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );; x# Z2 @3 C. O0 J ?
continue;9 k% }* k2 \; w
}2 Y- B9 U8 A1 ?) d
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
8 A5 ]& }# t& [- f }
5 Z1 T$ X; t/ O1 D" Q+ E* V6 A6 Z break;# F6 O* i4 C, `- n
}6 s t2 B$ q5 q8 J6 u( i: ] w- \2 j1 n
case 1:( _7 y9 C4 ~: q& _
{2 I. {$ }+ O7 }) C+ g
//整理背包. d! T+ N" K/ _+ Z. ]
//////////////////////////////////////////////////////////////////////////7 `7 O* V4 c! F0 H: ]/ L0 \9 }% ~7 ?
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );, j4 ?. |/ n D/ ~% L P) ?$ `
//////////////////////////////////////////////////////////////////////////
f7 _. C# P/ S //////////////////////////////////////////////////////////////////////////
" m2 S/ `% C7 [, j CInventorySort* pInvSort = new CInventorySort;
& a4 r$ B [5 n6 @5 P9 i vector <sItem> vItem;7 P) v% K. f: E8 F+ W% q \& I
vItem.resize(MAX_INVENTORY);//初始化大小
) E" U$ |9 s% Z! ^; m/ b% W" I5 z //////////////////////////////////////////////////////////////////////////
& Z: F# |# r& ^$ m2 N7 k6 B0 ^4 V //填充数据
- g0 l! ?( Z" r5 v; ? ^. W for (int i=0;i<MAX_INVENTORY;i++)" U" ^. @) g" x2 l* A
{! @7 l( o+ k( g
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
; W; {, d ]9 K3 m! m if (!pItemElem) q. W* q! z* z" |2 n
{
5 n- j. i H: Q3 n. I. F/ r vItem.dwKind2 = 0xffffffff;
6 U: ~$ j, z; c4 y2 I. l1 y vItem.dwItemId = 0xffffffff;
" r$ p9 P) X g vItem.nIndex = i;
/ g! o$ X$ W$ Y( y6 x) _ }else {
$ j+ S4 [" t5 [+ p, {& U# S5 ~2 i ItemProp* pProp = pItemElem->GetProp();
* u! x% Y4 h0 Z/ V4 ^8 j3 [. J- h2 I vItem.dwKind2 = pProp->dwItemKind2;
5 D! ?) ~2 P/ q3 {6 L3 U vItem.dwItemId = pItemElem->m_dwItemId;
% T$ V' G) I4 Z- }- T4 | vItem.nIndex = i;5 M/ g( D; ]. g( t% N
}
7 h9 r4 e; [( M8 v- F- i" x //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
/ o; y. D5 @" u0 G% ~* z }* o: y+ S4 D7 R# ]3 K2 E. K5 p: b7 ^0 Q* H
//////////////////////////////////////////////////////////////////////////
( ]5 n9 V3 I, t sort(vItem.begin(),vItem.end());//排序3 F9 k" S) l* i# Q
//////////////////////////////////////////////////////////////////////////9 P2 @; U2 W) S8 n- }. {; W
//交换( _4 g, ^; D1 f; D
for (size_t i=0;i<vItem.size();i++)
' N. S- R* }* m1 L' g {
5 z7 T4 V& _- t y- j //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);( {% z9 H& o& ~% q" J2 q
pInvSort->Add(vItem.nIndex);
( A9 N4 A5 D4 K }9 d: i5 k+ a9 ^( A* E
BYTE nDestPos = 0; p9 P7 {( [2 M+ H& a8 t
for (int i=0;i<MAX_INVENTORY;i++)) [# [4 T: `! G7 T$ K
{
' [# ?( _) C& U9 i: m; d4 h! A CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);( C* z2 g' e6 h$ I! U$ M7 W
if (pItemElem)1 h1 d" o% W$ I# I6 r6 e( G
{
U- ^9 r2 l, @ if (IsUsingItem(pItemElem))# ^" C+ C- M! w1 R+ g- y, K$ L
{# Y: c& u% F% g9 t( C
//这个位置无法放
, Z8 Y1 F p* } nDestPos++;$ r5 r) B7 a1 \; t+ i) Z
}4 {* B5 s! d' i% |7 |: _
}
$ _. A( `$ a6 d1 s' ^ BYTE nSrc = pInvSort->GetItemSrc(i);6 O$ s/ Y' J1 w7 n1 s( e& |
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
* H8 ]& j/ p- \, Q+ h/ z: |7 R! U8 S if (pItemElem)4 R x% i3 r" I- k" b
{1 a1 Y; A1 l0 [, H( |4 |
if (IsUsingItem(pItemElem))
$ ]& v# Y7 E$ s {
6 ?1 }; b! C' y) `1 t, r# B //这个道具无法移动,跳过
0 [& X+ d$ }0 v4 P1 S6 { continue;1 U% m) p# q9 a& V6 ]) e
}' C# p* o: W- q- e. V
}else{
2 [8 s2 E. l2 X+ k6 G //空位置 不用动
, p8 _# m' A5 p9 T! b9 X continue;& z2 u2 c& G! n8 R6 `6 z2 k
}1 M) Y, K" U: O( m
//////////////////////////////////////////////////////////////////////////0 L# y: d4 a4 ? G0 k
//开始移动4 X; `& Q& d! E7 F4 @2 c2 x
if (nSrc == nDestPos)* G+ g. f' W+ ~, V& x1 j1 k* ?# J
{7 E. k2 ]& V+ b$ @; r4 Q; E
//原地不动% K2 g# \5 b2 o# T% m' U% B( l8 \7 \* n
nDestPos++;4 D7 s& ~% g; {( B
continue;( r- V- @& `& f; U0 Y x' ~- ]3 F
}3 [: |9 @+ |5 n0 u, @. |4 @
pInvSort->MoveItem(i,nDestPos);
/ l1 a7 B2 s. P5 @ Q9 S# l g_DPlay.SendMoveItem(0,nSrc,nDestPos);! b# e- M& d: p7 g
Sleep(5);
3 I4 X% }! A! n7 g) C //Error("移动 - %d->%d",nSrc,nDestPos);5 U" e7 h5 @3 u X
nDestPos++;
$ _8 M, M4 L6 y v! o) | ` }
B! o; C1 B) q //取第一个元素的信息% B5 }( S8 Z5 @) i
/*' M2 g' g% w) d: l
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)+ A3 A& i$ T4 @7 v
{
9 G1 W R1 L ]& ?4 X Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
8 n E( |: h; c$ W g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);, c7 d: f$ O% R
}
7 I# M, Z6 e& i6 @( n( I% _ s */
9 ]+ T+ f& l) X //////////////////////////////////////////////////////////////////////////* D- C! b' T* w
break;* t, @+ p/ g5 g+ e& N9 ~: Y, K
}
8 Y A& Q6 ~# [# _1 g3 ]% l" Y }
: b; D/ B l$ x' J}
9 x! c& Y; L' z' W( R8 i! i Ym_wndMenu.SetVisible(FALSE);. v* E% T0 p& \1 c$ E+ N
6 T6 L7 `9 J2 @" E z$ q
--------------------------------------------------------------------------------------------------------
2 A' R8 g& z2 P7 g搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
0 N# s$ }: u l: Q+ v7 S5 ~{
& N4 q: Z% C* [BaseMouseCursor();
9 Z4 I- U) r h& e% i/ n& l. D' `}# O2 o T+ C# h: |% H& @( g- d
在其下添加: ]* {$ ^6 O6 s- Q
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point) }/ H- c/ P. r4 ^
{
+ [2 }) C, u; J; tm_wndMenu.DeleteAllMenu();+ J# L' ?6 i* t8 O1 H- V; b+ d
m_wndMenu.CreateMenu(this);
" v9 W2 N* k8 e5 }8 i7 em_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");; j8 p# K: X A8 o2 A
! e$ t" f# Z2 ?8 _; w( h
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
$ ]7 g5 N! O3 `+ R7 L{; w' M/ E, p/ d( l3 G' ^0 t/ T
//P以上级别才可以删除所有道具
' ?8 I! E4 l, K: n5 ^; [3 h m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");* B8 \5 G; }+ q# `2 Q
}, ~0 D: O( r3 l; Z
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
9 x2 k9 ?" O" H# Y$ l* E/ x, W' L/ m5 Vm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
( d1 j. V, x- z7 J+ V" s- Rm_wndMenu.SetFocus();* A5 p: F& e" D; z, |4 k% T
}
8 D% ]8 L9 L4 c$ P7 C) [$ I" T------------------------------------------------------------------------------------------------------------) N; z8 v3 u; B" f7 A) p* G
*************************
0 N$ h5 T+ m8 [& ~WndField.h文件! v2 D' H9 X0 x, n: l5 d6 P6 }
*************************) P6 D3 m: Y9 t2 }- L
搜索:BOOL m_bReport; H1 Y6 F* V C& f* b) {9 Q
其后添加:3 q8 M' m9 r4 k
CWndMenu m_wndMenu;: c$ o6 J i! u4 v* b
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);$ |' E: S" H# M! k" o
其后添加:9 W, o/ V& ^' O5 {$ V q
virtual void OnRButtonUp(UINT nFlags, CPoint point);1 R% F& C/ L C* B5 o- B
2 D |9 v+ d, x4 Z6 F
! W( _3 B, v8 I" ` |
|