|
源文件中_Interface文件夹下WndField.cpp文件: K! v/ b" ?; i! H: \: n+ h
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
- i l* P7 ^8 v8 G
: N& a& X, _% f: Q* Y- H# m" Ystruct sItem
# N s" F* o1 _{
4 q" s9 q/ J# w1 V; D) UDWORD dwId;/ T3 E: M% j$ e
DWORD dwKind2;
" E1 _9 H: K5 ]& l' v" n( ^; R0 ZDWORD dwItemId;" C' u; h* {# Y& D
BYTE nIndex;1 p9 l+ Z! |4 ]+ p' _
sItem(){' _1 L3 U! L0 O# \4 M. k3 T+ `
dwId = dwKind2 = dwItemId = nIndex = 0;, u: Z; x9 q5 `- V5 r: E5 G& D
}8 A" u9 Z, u1 u. h5 o
bool operator < (const sItem p2)
# p/ ? v X8 r$ H- s{ _, w3 U% B f; K
if (dwKind2 == p2.dwKind2)
2 L; m! G: {/ w' t' R( k {8 Q9 l) c8 }' a
return dwItemId < p2.dwItemId;+ ^# a1 z$ V# s6 N% y3 \: F. O
}else{
; d7 Q; u. v4 P' t6 M3 h# z5 v) y return dwKind2 < p2.dwKind2;
# a) z2 @5 C9 P% {! D, w: Z }) s$ j6 Z% O. E& W! m
}3 r- F1 X B5 K6 N1 m
};+ c: C% I+ t l* C2 P
class CInventorySort
2 O( \8 Y0 ]% B3 C1 k{
3 Q- @: D/ M" w7 G6 J# cpublic:5 [8 i' I* y9 d) b6 S0 C4 J, U" F+ x
CInventorySort(). ~9 h7 F( Y% z3 }) M
{0 u0 |8 w" F- e8 V" r6 \
m_dwPos = 0;
, Z/ t$ s- q% y9 A- B}
' y4 D( v% X j; z# M1 ]~CInventorySort(){}
! i5 [* x! h B3 eprivate:5 ^7 W7 ~+ N. u, {
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息7 E. ?! C, ]& D$ \4 H- h4 S' R7 `0 l
DWORD m_dwPos;; g9 A/ @9 v) r. s' e9 |/ b2 h: n
public:
) W! K" [6 W2 o: g; [void Add(BYTE nIndex)$ y ^8 E! s+ v
{
7 w0 @) c4 S* K0 I+ R if (m_dwPos >= MAX_INVENTORY)
9 q% w5 r% T0 H& k( j: A {
4 g7 [5 Q: q! g$ Z! Q return;
D$ s G; q5 y }
! g( m: S& G5 g/ F m_Item[m_dwPos].nIndex = nIndex;) G5 }! p+ d) @
m_Item[m_dwPos].dwId = m_dwPos;6 x4 c D8 E- i1 i
m_dwPos++;4 _* U6 J1 A# m1 w9 W
}
& |$ h" ], E; K1 Z% k lBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
C. W. B9 g; v" g( H$ s1 }{
2 ^- d: l1 l0 A" b" c+ e for (int i=0;i<MAX_INVENTORY;i++)
( M4 A) |% b% x% ^; J' L! |) x {/ S, A7 I/ n- J4 }
if (m_Item.dwId == dwId)
' b7 l4 ]. o$ C A! ^+ G/ | {8 y1 h4 B7 O5 Z3 t
return m_Item.nIndex;
( c$ n) l# h3 m }4 S$ B. `7 r! s# @) n: ?" s, J
}5 ^8 T8 [6 y9 X; |) I: N
return 255;
' o5 O8 B3 u7 s! ^1 d. c}
) l( j, H$ k5 ?0 |) p& u) y& }void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置/ C: L" l. A+ Z3 z, n
{
! _% {. X3 r3 L% u* H$ f BYTE nTmp = 0;% ?8 }1 b3 D- }
bool bDest = false,bSrc = false;! i' W; H0 z- R4 x7 G+ q, y
for (int i=0;i<MAX_INVENTORY;i++)
& z6 v# v9 t8 U: ]3 `2 _* l {8 \0 ~. C _" L: n. ^( p
if (dwSrcId == m_Item.dwId)
% [) @# {& ~# [3 _; {: Z; e1 J {8 ~& q; j( I* |" H
//id相等 则 改变对应的dest和src' [' f* v8 i+ u% x1 y0 e: ^
nTmp = m_Item.nIndex;
' q, _1 M+ J' G) k/ C O% M! D; | m_Item.nIndex = dest;
/ K& S5 G5 |* i, Y8 g* A6 V& [ }9 d+ w. ^7 k0 p/ J' p6 y: r. R
}
9 C2 H% L, N( b; [) M //临时数据保存完毕,交换开始$ b3 C; O( ~6 b4 {
for (int i=0;i<MAX_INVENTORY;i++)9 [5 V, L: e( l
{1 i/ W. F# y: {: H1 Z# V
if (dest == m_Item.nIndex)
t( B: x: {3 s) b {7 x3 E0 M) t: c
//id相等 则 改变对应的dest和src
) X& l G s9 i. p! E n) D) i! N m_Item.nIndex = nTmp;/ y9 O' T' H9 {& B2 m
}
' }' |- U. z6 _; f2 _; M) |- O }' \2 B4 l4 q8 a0 J1 W9 O/ Z( f
}
: J5 Z( C) P& r0 v; \# w$ Q};3 \# j* }" R% @4 \+ K& p7 H( ?
-------------------------------------------------------------------------+ ? ~ U: a5 J0 N8 W
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )4 d U3 L9 z( N/ g. t) F
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
: n! n: O4 X7 Z: I. ]4 K5 o紧靠其上添加:
1 n7 u& P' f& [( T8 g7 b$ p( Jif( pWndBase == &m_wndMenu )6 n1 \+ K9 g* `& M
{
9 `9 e2 f( Q% {: t switch( nID )- `. j1 c* j6 v u* O
{
' y8 k$ T! O- x0 _ case 2:
5 M) ~$ E' g6 C3 m# I {8 P6 E& ^# |) f; }! F4 g
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
}( O# C) m, B. F. ^ if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))6 _1 i/ E$ Y% U5 L$ f, _
{
( n& p7 y$ s' u break;6 c+ V& G8 q t1 A1 ~) K, q6 m
}
2 [; U5 D5 T9 J/ W- C/ } T9 }2 Z for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
: A5 i: |* @* L; |, w {$ i" C2 S L! d1 M& |( e
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
" z% P$ j7 f1 d8 o5 j if( !pItemElem )
8 e; I |2 L, _; C: U# U continue;
[$ B5 n# Z! w, {: Z3 k6 P8 v if(pItemElem->GetExtra() > 0)# h. ]) u/ [6 N! }
continue;- J2 H( ?3 J0 |* M
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) L6 H; ~; J$ y
continue;* c3 p+ \! e) C" R7 G- U& X9 [$ V
if( g_pPlayer->IsUsing( pItemElem ) )/ o; O3 h# J+ Q0 ]; J
continue;' z7 }5 o, r L% E, B+ z0 H! K2 U. D
if( pItemElem->IsUndestructable() == TRUE )) C/ [$ L' Q( f! V* o; ]
{7 l1 e8 E/ c* @7 y7 K
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );! Q2 _1 Z C: |& n; ?# c% {7 r3 E
continue;
+ k" O! M! w% S- R! \ }+ N$ U& \' Z8 B3 s0 D, l2 \$ B
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);' y0 \$ S% p$ U. e
}
0 Y6 \: ]+ [/ \# X break;
) k P L9 t+ @ b }. j# j! m9 [5 r# j
case 1:
8 k2 K, m. k/ Z {
6 S) E9 ~ R- c/ L- R //整理背包
/ ~( o& ?$ i/ g# o4 S; X: O //////////////////////////////////////////////////////////////////////////% m4 A& h7 Q' w, }) Q# x7 Z
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );) X/ y2 J1 d/ h! m
//////////////////////////////////////////////////////////////////////////' ?3 I. @* p. K. I' k h: t1 J
//////////////////////////////////////////////////////////////////////////2 C* L: _( [5 H4 f. Z* X1 p0 O( o
CInventorySort* pInvSort = new CInventorySort;: V* t4 ?7 a/ L0 w# c6 x
vector <sItem> vItem;' F& _* H& ]0 F* d- h/ j
vItem.resize(MAX_INVENTORY);//初始化大小
3 [- I" W$ S3 j# |- d2 S2 L9 C //////////////////////////////////////////////////////////////////////////
) K9 R( d# L) s) \( t/ j8 f //填充数据7 s' v- t N2 [7 ]
for (int i=0;i<MAX_INVENTORY;i++)8 {& p Y2 G9 Y; B
{
8 _; `. a7 t8 Q( Q( h- u CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
: g7 F) p$ A+ z: `, v a; S if (!pItemElem)' F: E, |) q1 p4 b/ K5 I! U
{
! J2 q4 h f$ P1 {5 y vItem.dwKind2 = 0xffffffff;
% u% N. H T) _ vItem.dwItemId = 0xffffffff;, O. f/ [) c8 `/ m+ _: L- j1 _( C
vItem.nIndex = i;9 Y# L! G3 `6 I8 F. N
}else {
+ P/ t" P: I. K- N ItemProp* pProp = pItemElem->GetProp();" G. c; b; W' d7 x5 Y$ }
vItem.dwKind2 = pProp->dwItemKind2;
7 B, L: u' g4 K$ t# `7 }. D vItem.dwItemId = pItemElem->m_dwItemId;, Z1 x7 C1 b) \4 H$ O
vItem.nIndex = i;4 j1 Z2 f& M: d( c
} i3 A: p7 ?2 b
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);9 P7 s. |3 R V/ Q, h. {/ z
}
" w7 Z m. P! O$ {2 }0 ? //////////////////////////////////////////////////////////////////////////
9 S0 w/ O* q& V# S r$ G sort(vItem.begin(),vItem.end());//排序" }2 w5 L7 `" |' M7 c
//////////////////////////////////////////////////////////////////////////
. A3 p# I: j) d% ?! Y( _& U" L6 r8 ^# { //交换
" g) Y5 C' E, D. @% D for (size_t i=0;i<vItem.size();i++)7 j4 q$ H/ R; Y' g
{7 Q o: `) N! v! g# v1 X' u5 Y
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
1 H, y9 G; t! X! m pInvSort->Add(vItem.nIndex);$ @2 s; d* F1 G( R5 r/ }
}
: ^8 b4 t' M5 X' a; K/ E BYTE nDestPos = 0;$ I0 e% _( t& z! S
for (int i=0;i<MAX_INVENTORY;i++)
+ Q+ G/ L4 n% ^' y# h {
5 z4 c w0 X! E, S CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);) q4 C* P9 j1 {) A
if (pItemElem)8 e/ M+ F3 C& k0 c7 i, k1 @5 N
{1 B$ U5 D, E6 [- K& t2 w+ t# c
if (IsUsingItem(pItemElem))
0 M$ w4 y$ F+ s% p9 @& R {
8 t$ w1 K2 t9 G. l0 A) i! m //这个位置无法放: K `3 [: b1 X
nDestPos++;9 r5 }$ k. @% A, M! o; s9 R
}: b- V4 C5 C& r2 x& [
}2 M v. L' u' A9 q, a
BYTE nSrc = pInvSort->GetItemSrc(i);. f% i# a5 Q' V( n2 a0 \
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
9 Z0 W- ^' c1 i# n' [! l3 \ if (pItemElem)
, |3 K+ J3 y* N7 t0 N9 z {
3 h! K! b& u- Q$ B; v, I if (IsUsingItem(pItemElem)); a- Y1 Y5 @5 d) @/ \3 J
{% D- a5 n$ m' r" R8 j
//这个道具无法移动,跳过 L9 u% U* L+ s8 E8 ~/ y% y
continue;
- R# S6 N2 X# p }, \5 b5 N' t7 L. `' Y
}else{- Y ^( I& _" e: a, h
//空位置 不用动
2 I: I) E6 L; e continue;7 Z' K7 D+ o) Z1 c5 w0 G' j
}7 l" F* ^6 G2 j& T- {) j
//////////////////////////////////////////////////////////////////////////
! R6 p6 L$ a0 r3 J0 \4 y3 p$ R! H //开始移动
6 H5 ~8 l* g# Y% o4 p9 h. T1 L if (nSrc == nDestPos) w) T; f4 I- `9 X
{" z5 A+ O& a7 {. x% J5 G, Q
//原地不动
0 O4 G1 b7 O0 r nDestPos++;
! Y4 }/ G$ a" x continue;
1 L* U3 {$ R0 x, R8 K }
2 t c% ~% i6 v! p/ W1 k pInvSort->MoveItem(i,nDestPos);
! m6 _7 S8 P/ a2 i: G) ~ g_DPlay.SendMoveItem(0,nSrc,nDestPos);' d3 _( e, U. H6 h% K
Sleep(5);0 K- K' S, `1 O9 ^; S N
//Error("移动 - %d->%d",nSrc,nDestPos);6 {- ]5 w, s) |/ e
nDestPos++;
- W( j# @ Z( M2 m+ `* { }
2 @! }2 d, a' s& D5 f //取第一个元素的信息: H* `( [3 c2 i) ?: k" X# P6 Y
/*7 X% d Y9 ]" q* C: u
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)) Y+ n; s6 f$ c# n& c! D5 F
{+ S# l7 n( B8 Y
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);' I4 T6 ?8 _# k( Z. K
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);* p3 w) J0 f1 E: J* r0 l
}) R7 a$ v/ q* ?' e/ U0 m0 U7 Q- d
*/. R6 ]4 F6 G4 X! l) S
//////////////////////////////////////////////////////////////////////////) C; }7 R9 ~3 o8 \# ~
break;
! |+ \! r, p' y+ t. h }
$ y G' s- k- z) G. k# x& h } 1 f$ U4 Z' E$ {
}4 f8 L! |, n% d: N5 r# Y! W
m_wndMenu.SetVisible(FALSE);
4 g1 f2 s* {. c
( q4 g1 r2 l4 M--------------------------------------------------------------------------------------------------------
6 @; `" S: X! _! }搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
% q2 ?/ d' [0 H' h' o{: p( l5 t; @# |7 \7 f
BaseMouseCursor();6 f6 ~# Z6 C! s2 Z
}
1 F4 ?. |/ T0 }4 i8 A在其下添加:+ y b3 X# K9 N! I3 w) |
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)! W! N/ A9 R5 z% s) n0 |$ p
{9 @0 v% c {7 i b& ?1 b4 i& _
m_wndMenu.DeleteAllMenu();
1 w @8 E* X6 L& s' K y5 Im_wndMenu.CreateMenu(this);
' R' V4 b+ g8 C T, r u; Om_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");8 m$ D* E' |; l2 I) b* Y' U
( f* O& p/ c/ `if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))& ?& D6 ]3 _4 C4 R
{" R5 f5 N; E; r+ Y2 a; t/ `# j7 i
//P以上级别才可以删除所有道具
, L& T9 B0 V8 w' q m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");8 O% F) k# s5 r9 E2 ?- c
}
; j3 S, G9 X: k Im_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
# v3 Z# J5 d+ g5 W6 w G: Em_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );6 b% `# g/ Y5 ]2 Z6 j% O
m_wndMenu.SetFocus();
7 B. p4 m8 E* }4 j! t# u4 e}
. b* c1 l3 w2 ]7 B2 V) N------------------------------------------------------------------------------------------------------------
8 k. {% \- T" Y; s* d i6 E. w*************************
6 J' a# M& v) s5 A3 t9 R1 fWndField.h文件
# P' { P3 X9 u; f7 w* W- v: D/ A7 [*************************" k3 J" w* i2 }. x. T
搜索:BOOL m_bReport;7 q( k4 p! S% m6 U. O
其后添加:! p! D1 R7 l9 o" e: x% E: t3 P
CWndMenu m_wndMenu;
$ K' s. l# p- }8 m* q) y$ I搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
) a% a' v& E: m其后添加:0 f h3 y }5 `2 w* _7 C
virtual void OnRButtonUp(UINT nFlags, CPoint point);' R, Q7 L* U- v1 r
0 C# J* V' j% F! u% O% j% D
: ?2 }! I$ n' | q1 _
|
|