|
|
源文件中_Interface文件夹下WndField.cpp文件
9 D" M% d! ^$ k9 Y; t# ~ W) l搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
9 Q* t* M0 ~1 v( E2 z( \: w! \* B" |/ k. w% [% T
struct sItem1 a; X: `; n# l) @5 L
{
- U" E' X+ N% E* I* wDWORD dwId;
/ x3 Q+ f9 s" \) wDWORD dwKind2;9 p( T! {2 }+ @2 i7 z% E
DWORD dwItemId;" m1 h3 E, o# o1 F8 |
BYTE nIndex;
4 X' f/ M# j; A$ `; wsItem(){' e( @6 S- n, p G/ A
dwId = dwKind2 = dwItemId = nIndex = 0;! Q4 F9 u: d& D( m0 w
}
$ e( d$ |' E- I( p D# `bool operator < (const sItem p2)
- \3 i/ H) o/ u. j5 a5 J{8 l- N2 D: @ v8 [: ]0 C
if (dwKind2 == p2.dwKind2)
2 q. F, O7 p( ]8 } {$ ~. g% T5 ]) e$ i
return dwItemId < p2.dwItemId;+ I1 t7 _% T/ J8 `3 z, P
}else{9 h: {& Y0 d8 \) Z/ g) r9 Q
return dwKind2 < p2.dwKind2;
; G( v- s+ X4 b& q/ W+ T' V }
: p: Q' v# d+ B# @. p: M}
9 E4 p& `) ]/ @2 ~};1 c' C7 m, l5 }& Q7 O% I, K2 r
class CInventorySort
8 L3 Y ^% Q D+ x& w{
! _3 @0 O" q& ]& s$ ^, p* Vpublic:
4 J& ~' z' n0 l4 YCInventorySort()
' ?- ~3 {- ]& D- W, o{8 _3 L+ r. [6 z9 I
m_dwPos = 0;+ i$ S: _# L. t' R8 V+ R
}9 g" @( `. H9 B3 J& E' u
~CInventorySort(){}
@- a- |. n4 q) U5 B/ Qprivate:) @4 U8 h2 r3 R1 O) v
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息( ^- x7 S7 t( O% J+ P
DWORD m_dwPos;; g: K0 N! h: K+ ?
public:' J3 p$ E- G/ Q( _
void Add(BYTE nIndex)3 N# k. F5 Y4 f
{
$ F: J# t, i1 X" i0 O: X7 m' h if (m_dwPos >= MAX_INVENTORY)4 z% B# P! d5 k* {9 [
{
) `, k' F5 Z2 o H+ {" \ return;
2 d/ V1 M3 v" H' Q, Y1 _. O }, c) N6 ]/ Y2 N/ N9 N
m_Item[m_dwPos].nIndex = nIndex;' o6 x3 H5 N+ |6 `
m_Item[m_dwPos].dwId = m_dwPos;8 l3 }# {- i2 K9 G
m_dwPos++; k! h* {8 @+ Q% x& s
}
' d5 Z# x2 r; Y0 E$ C. F# {BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
9 c: G; S! ]( c8 A5 b{! D) a* R: c0 m" L
for (int i=0;i<MAX_INVENTORY;i++)
7 p* a, P9 T8 S, X7 \% b {6 v8 A, k4 \: `0 ~- O" n
if (m_Item.dwId == dwId)
3 \( `. v. o8 a+ Z/ f# Q {% Q, @- X) [* Q
return m_Item.nIndex;
' D. v+ f$ [; P+ t& z }1 |1 u$ S7 G% p
}
6 k- n `# r6 P& L1 k return 255;
8 m9 _( T( x8 G, I: ]- [9 K; O}
& P3 @: q7 Z4 D! zvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
+ Y' R7 ?: Y/ O& F: V( A{
7 ?# p; f" I! f' f" G BYTE nTmp = 0;7 z) k4 o) s6 |& o& y$ {1 L- m
bool bDest = false,bSrc = false;
, x+ Q6 T) l% }- S9 r3 } for (int i=0;i<MAX_INVENTORY;i++)
% f* c# j6 i5 F6 ]) r! y {
9 i3 {- F8 d$ o- @3 \) A8 `! N1 C8 ` if (dwSrcId == m_Item.dwId)
; h# v& B' T8 A; A: c! v2 _ {
; ]. E# R: c: x5 ], r e //id相等 则 改变对应的dest和src9 z; `3 i' ]6 E7 D
nTmp = m_Item.nIndex;
) J3 R4 U+ X% T0 X7 A# V m_Item.nIndex = dest;
2 I3 W6 y" q6 [; i* g }
* s/ ?# G3 `7 L8 p; R }
7 {, Q- g$ ?& Z( u7 i% @ //临时数据保存完毕,交换开始+ N# w7 s! M7 K/ p" }
for (int i=0;i<MAX_INVENTORY;i++), d# P1 J) q0 c$ g% k! q& X$ t1 b
{0 L- t+ k* v! p, R- H; ?
if (dest == m_Item.nIndex)* @2 V0 a2 w) j% n. h4 X
{
" z0 @- O2 Q- W; Y) w ~& j //id相等 则 改变对应的dest和src
4 K3 I; V2 O) K3 J6 u+ r8 n# [ m_Item.nIndex = nTmp;) R2 [1 l& z/ R
}0 ^1 u+ z3 ~' b
}* b g. k8 c* j
}7 [& R% U4 z8 x+ w# g
};
" n! A0 J8 y, L9 g-------------------------------------------------------------------------2 z( `8 R) ^: ?8 t# W
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )5 v5 c# R* \8 u. {, v, y; k y! }
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);6 v* p5 V6 F% {( g# H3 F7 ]! [9 f
紧靠其上添加:% ? N4 ^" h! ], y
if( pWndBase == &m_wndMenu ); s; l( n# B# X' n+ \" ^% b! h- z3 T
{
3 s; x* N+ D( ~3 p. L5 \7 F8 B2 m! n switch( nID ): m: [4 F8 Q$ m) u
{
. J" Y0 k" a, Z& i p+ l( V5 N case 2:; T9 L8 e2 h. @8 ~
{% _5 b) ~6 Z u2 c) A( \7 |/ ~
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);( f$ V) c0 _8 f" Y; N# P
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
* J6 {7 ~5 g" T+ A, I {
# V8 z$ k% G, C' v break;
! g1 C) U# y+ i" u1 v }
. J# D* B5 }& d' P for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)6 ?% O( N. W3 i# A' z9 m7 D/ ]
{7 F9 e; H3 k* o F K
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);% Y# ~6 b- J. D$ W* ~7 k
if( !pItemElem )* F) W6 F- F, ?, F3 p
continue;
/ l) K% p( s7 ^) s, k if(pItemElem->GetExtra() > 0). i. q- g2 J( H
continue;
* U8 k1 h" d% ?; r if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
. F6 z2 ?* s: a u' L$ B continue;' E0 z( x, h0 z) P, f4 l% S
if( g_pPlayer->IsUsing( pItemElem ) )
5 \% O: E5 i- p0 | continue;; Y1 B* ?: U5 a- x9 I; N
if( pItemElem->IsUndestructable() == TRUE )
# M. S# Q; \. F6 I {
. B6 S* O7 @0 m0 I/ r. ? g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );2 H R, ]1 }0 I7 R1 c: x3 S! q: U
continue;5 O$ s8 v# e# L
}; {# \' @! ~' c/ w2 Y5 `6 @
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
0 O8 B' J( ?% j- W9 Q/ n8 F: |& [ }
! a/ l9 x( K1 A7 L4 g2 h$ Y break;# a/ K* a; }$ S
}9 t" y2 c: n( ]/ {
case 1:
1 H: n8 j4 f1 R/ l8 i6 j' T {
0 ~" S: C0 Z0 `: L //整理背包" V3 X, [) y/ B8 z9 I' k
//////////////////////////////////////////////////////////////////////////0 H6 k6 G# ?. w
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );8 ^# ? R$ [3 `3 N E$ ]
//////////////////////////////////////////////////////////////////////////
! B, ^. c9 E0 s7 }6 ?! I3 s; y //////////////////////////////////////////////////////////////////////////8 B* c: O% P3 X( X
CInventorySort* pInvSort = new CInventorySort;
; B5 g, e% A5 w' `! \ vector <sItem> vItem;
* ]' @0 u# y: Y ] vItem.resize(MAX_INVENTORY);//初始化大小5 m0 U+ z% N4 A" w" m: w5 x; x
//////////////////////////////////////////////////////////////////////////, [0 L, g+ J9 q* E1 Z
//填充数据( `; @: d4 f( ~7 q% y1 |( p/ h6 w$ Y
for (int i=0;i<MAX_INVENTORY;i++)
# p) m0 p* o/ K {0 O! Y* M/ G3 A2 w! s
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);+ p! e4 P8 I$ q+ }6 ^" r% v
if (!pItemElem)- Q! q) e6 _( h% e2 O) q+ \/ s
{
. ]% o, X* {) [# C% v vItem.dwKind2 = 0xffffffff;
7 s# e/ ?+ G/ P+ b0 v' R1 p# f vItem.dwItemId = 0xffffffff;
. d* _0 D' r3 ~/ B1 P, a' n vItem.nIndex = i;
7 e0 c w {6 b( L3 w' ]7 h$ A }else {( g% V3 ?+ V+ |) f5 x R
ItemProp* pProp = pItemElem->GetProp();2 b9 `. m3 x6 n; A5 w
vItem.dwKind2 = pProp->dwItemKind2; u6 x8 Q, J# Q" A5 ^' _. u
vItem.dwItemId = pItemElem->m_dwItemId;
$ k f8 d7 \$ l* z" q vItem.nIndex = i;7 g' I7 |6 m+ W* [1 N4 [
}
" f7 X5 y; Z: P4 Q) B- q7 u //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
0 ~6 _3 U! D0 c; J5 Y }
1 R/ g3 `' g$ v, W7 W //////////////////////////////////////////////////////////////////////////
: h, G7 C, P; _% ~8 _4 h0 G7 [ sort(vItem.begin(),vItem.end());//排序/ f- L; f7 u8 S N) d7 N% A
//////////////////////////////////////////////////////////////////////////
" ?1 \4 V9 b% d4 ^7 u, g" v( _ //交换
- j) P; o" n, d% i, R3 _ for (size_t i=0;i<vItem.size();i++)6 T/ E; k5 m5 j# l B$ P
{
1 O4 U/ }1 K" A3 \ //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);+ y: p$ k- o+ h) [: P0 ?! n/ w; w
pInvSort->Add(vItem.nIndex);3 O, M D, h2 m$ s" w
}
% E \0 T! ?3 P2 E; z BYTE nDestPos = 0;
! P+ z. |1 c4 f4 J# s; ?9 [4 X for (int i=0;i<MAX_INVENTORY;i++)! h8 g* k" i1 x+ h6 o+ x
{
/ b0 P: ~: w* [% A' m CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);8 f6 }- b0 v5 G- O0 k/ k* F
if (pItemElem)
) M/ i% p$ b2 n/ n, d {& o' |+ q' S4 t
if (IsUsingItem(pItemElem))
r5 }$ s7 m* O* o$ z+ S% b {
, O) h4 {- ~- {* S //这个位置无法放
! R* t$ {4 S+ U+ h/ x9 ^0 q! ^ nDestPos++;
" k I" G* K1 u7 D* M; q" ~+ _ }* v; f4 p" u, n7 T% `, l# C! J
}
* _$ S% ?* N' D" ], D1 e BYTE nSrc = pInvSort->GetItemSrc(i);
0 v8 }: V' l# L9 n7 h, `+ H) V pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);4 r M u2 |% L4 K( l+ {
if (pItemElem)
( e }% f, q# a5 c8 _ {
) ]$ Z6 M, B6 W+ a( G0 A$ R if (IsUsingItem(pItemElem))
, M( c) n6 o: J# r {/ b0 T: |9 n! ?+ O8 N! _
//这个道具无法移动,跳过
* k: T) U( `! v! H! D continue;
/ d- A0 h; J6 e+ \0 F7 r }7 Q3 @* d2 ^5 @8 n5 q8 Q5 k
}else{
7 r! F6 t/ Z) C5 T% k+ i5 k //空位置 不用动
! v8 p6 M6 k8 e; z4 a, P) j, e1 m continue;
. f0 n( L* @' K7 j6 s8 ~: l, N }
/ l6 [. Q+ U3 `/ M8 `% U //////////////////////////////////////////////////////////////////////////$ i5 v3 o) T# j
//开始移动
J: C, k- a2 Z" Y. S6 O6 S if (nSrc == nDestPos). L% E: x! X2 L4 b- L
{/ S3 o* r& L& U, j; O- F( R9 B
//原地不动5 I a; D8 h9 z- U. D
nDestPos++;7 m# a y9 |5 ~+ ]. ~1 `
continue;; h+ U8 @7 g5 _; |/ Y; {
}
7 r Z) W6 O5 d: \, l8 @6 ~* T! o pInvSort->MoveItem(i,nDestPos);
6 B- ~' U; | u: H& h( @ g_DPlay.SendMoveItem(0,nSrc,nDestPos);
8 P. L! d" o; c9 w8 [9 u r+ t Sleep(5);
) E$ U: T2 G$ ~ //Error("移动 - %d->%d",nSrc,nDestPos);
T2 z+ |4 E+ S nDestPos++;
, M8 Q J" i) }, Y- Y, n- ]7 c( V }
9 f1 _5 I$ {5 U' h //取第一个元素的信息- A) Q+ p( ^. d5 e$ T' r
/*' o4 B' f* k1 n* {
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)2 i( `3 A g5 }; w. W
{
' V k7 C2 B; \, f6 ? Error("Move - From:%d,To:%d",vItem[0].nIndex,x);. X [% w5 G+ t' J+ N" K
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
; |+ k& s5 F% g0 {+ G, @ } X& O' K) U. Z7 n4 m
*/
$ U& X, y# a) g/ Y //////////////////////////////////////////////////////////////////////////
; w' _; n. O. s# r0 O! _ break;: F2 s0 E7 I9 O' h' B
}
7 D& M- _% h+ G }
* b) l. T% }5 Y2 R) p}
2 D+ a) i2 D; S9 q/ g0 ym_wndMenu.SetVisible(FALSE);
5 E6 \' ~. a X j( _3 O4 o% t8 S: Q* E6 S% ~& X
--------------------------------------------------------------------------------------------------------
+ Y( u! x/ X% d3 _0 C搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
- V. M# G o3 G/ m/ l# I{* @# _) u4 E# j0 E
BaseMouseCursor();
' a' X2 f" f0 E: k8 b, @}
) \" V# L; X2 L( |% T7 T5 {1 N在其下添加:* Z/ s7 j2 O& Z& W' x# ?4 u/ h5 m
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
! u. D' G/ ^: ]9 C9 \; s3 c' x7 l{ h' J: M- P0 u3 K) G7 t3 E; s' `
m_wndMenu.DeleteAllMenu();
: v9 j7 G1 r6 O2 O+ u) y2 }+ }# Um_wndMenu.CreateMenu(this);
1 t* q4 r3 }3 J$ r3 e6 N8 im_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");; Z& d# F n3 ^* a- }1 A8 A
" m1 R3 v; y: m4 R% Vif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
6 h0 [# @7 `) a3 h) M" O5 Z5 q{0 `6 G8 k5 D2 U( [
//P以上级别才可以删除所有道具
j; u5 j9 a4 t5 e8 N; m" P/ t m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");# I1 e: H6 l: Z
}( h. P3 C3 I+ S
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );! T6 t5 \( H, C6 m4 Q
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );. K$ w& ^/ W& i- q: [4 N
m_wndMenu.SetFocus();4 O: E. n4 A' u* _9 d0 _
}& p7 }/ `" F$ A# @" @9 X. ^% Y
------------------------------------------------------------------------------------------------------------4 s8 \! a# u) \' t
*************************0 b7 W/ B: A0 g& J' I' @
WndField.h文件
! h$ v9 M. E! j' Z& p' L8 k" a*************************; Z9 P# `! y# N: Z
搜索:BOOL m_bReport;' B$ w* _& @4 F. t% K
其后添加:
& ?6 k3 x" y+ ~# B, s6 a3 bCWndMenu m_wndMenu;
+ V# Q, R a, O/ Z- @搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);0 l& e+ N. \2 ?( u* ?. R% W' A& Y- B
其后添加:5 j7 W8 v b& Y( m$ s, i/ v1 X
virtual void OnRButtonUp(UINT nFlags, CPoint point);* @8 h. J# W3 }0 b. N
% Z# y6 [6 g" z# N* C& a3 W$ q% Y, ^! M
|
|