|
源文件中_Interface文件夹下WndField.cpp文件
, X" u" v+ v& Q- m$ o5 x搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )3 n* X0 |8 P# k( O' Y/ n
, ]7 S4 \+ r4 E/ h7 k: G% |struct sItem$ Z4 B V* U/ X1 V7 L5 u" Q
{
) C9 ]5 S3 N: D4 hDWORD dwId;
4 g# K6 V- f' q/ m3 D; GDWORD dwKind2;
* t5 F* v5 G/ z, {DWORD dwItemId;
; b$ z3 g# Q; m+ o* VBYTE nIndex;
4 t+ f$ h, ]0 w( ^sItem(){
$ g: g& i, {' ?0 T dwId = dwKind2 = dwItemId = nIndex = 0;
7 M. ^; Y0 x* G7 Q" O$ \6 ]}
3 Z9 P4 ^5 A/ `* }. ?2 ]1 Ebool operator < (const sItem p2)1 ~- }; M! B! z+ @! r
{
/ T A, J$ Z) a V; U if (dwKind2 == p2.dwKind2)
z1 _7 V+ t' ` {; D U) y* f2 _* d" j8 }
return dwItemId < p2.dwItemId;7 [& |! d' D9 P, ~/ A3 c# C
}else{3 `0 Q1 @2 ~/ A2 ~- i3 [. P1 S* V
return dwKind2 < p2.dwKind2;
" e% k$ k% Q L/ d" o$ T }/ N/ w9 S) N3 v! v
}4 Q2 u1 x- h, V) N k
};
) h$ f* E6 b( s3 U; V) _. Y, Nclass CInventorySort
) i: p& L- s" Y( c3 Y{
& M- J. X2 l$ C" Xpublic:: ?& n/ {: {, B. W! ?: t0 m( a1 w
CInventorySort(). N& L7 C/ W$ t; p
{- j @! a! x0 {$ h3 F9 ~8 Y
m_dwPos = 0;
: v5 z9 x& o+ N2 x% R}0 B1 t7 H- [ e* i
~CInventorySort(){}% E. }: o$ s* J5 F2 X* m
private:
5 z& K `2 Q8 P: V: TsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息0 _6 q1 z+ N! j0 ]5 H9 b
DWORD m_dwPos;
6 H7 j) `0 b+ Gpublic:
% d- U8 |1 h7 P0 n- h2 dvoid Add(BYTE nIndex)( Z6 x& E7 T; Y" j" w+ g
{
; K$ q, a- e( H- V if (m_dwPos >= MAX_INVENTORY)
; @# v* m& J5 i: w0 w6 w {6 Q4 G5 B" N2 W; t( m. W, f
return;2 s- l# G9 M( p T+ ?4 ^0 H
}' ]2 s4 b. U* {3 B4 Y @% u
m_Item[m_dwPos].nIndex = nIndex;9 y7 L4 ]) \$ z0 K
m_Item[m_dwPos].dwId = m_dwPos;5 ] }( r6 b* j) |( D" G( q# [2 r
m_dwPos++;
% O% H+ s) F3 ]2 F* b}, t3 z$ P4 y' S$ S( f0 q; \
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列! P3 c _$ Y" w# ~& ]! I
{& P; {8 @2 E! d# R, V4 c& L' t9 ~
for (int i=0;i<MAX_INVENTORY;i++)0 L# A) A. _- z! w3 j6 z
{
' ~- x+ i n8 j+ W, _ if (m_Item.dwId == dwId)
& j) L1 g8 O/ s2 P0 { H {
9 ~! w% K2 W' i4 O0 l& l( t) k3 B return m_Item.nIndex;
. Q/ t" {5 |7 G J }% i1 p( O5 p! R3 P
}6 I! Y" H+ U. a8 k6 M; s9 Y2 Y* ?
return 255;
, }, A' h+ l) w}
0 ]5 r# H; @0 ivoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置3 ]% m: k+ W$ t6 G) v2 J* I
{
+ p' p: b# e! R5 S BYTE nTmp = 0;; J! ~8 H y1 r- Z2 W" L
bool bDest = false,bSrc = false;
- R7 V7 h! S1 C6 X for (int i=0;i<MAX_INVENTORY;i++)
7 \+ l7 _7 r; q5 x a! Q! T2 I3 c7 V {
l. }, j x! e' ] if (dwSrcId == m_Item.dwId)
0 F8 c# ?8 Z( r* p+ O. v' V, S {
7 D" I8 _- G/ x- v2 r, J) r //id相等 则 改变对应的dest和src4 p& R1 W9 Y/ X7 K- ?: ]8 z6 [, B
nTmp = m_Item.nIndex;6 N3 u5 r! D3 Z# Z. @( {2 m) O
m_Item.nIndex = dest;3 g% K3 t% L2 w9 G- p
}; V A* P" d+ ]6 J, L. D6 k
}3 M3 L3 h* G& B4 k9 ]9 ]! e' N
//临时数据保存完毕,交换开始. I: _$ ]0 N9 `& h0 o7 N
for (int i=0;i<MAX_INVENTORY;i++)
8 B! h; _3 c$ A! q9 \ {
4 N+ L9 a2 U5 h/ Y3 |" Q if (dest == m_Item.nIndex)
/ A" {, N! `5 Z* Y# j& w {
; L# o; k5 e% }" D0 a4 X8 Z //id相等 则 改变对应的dest和src
* S. X+ k& D* H1 h9 P" k8 p/ G# h m_Item.nIndex = nTmp;
+ F2 ~% c5 E' \( h P! Y } Q' l+ M# l7 M4 p0 `) n
}' o! ~& a# T8 E5 [, Q; f% ^
}
/ n. K: _: k* c2 }9 h. [" u7 x};% D! \+ t! U& ?3 _/ Y
-------------------------------------------------------------------------
$ o& [( I- |# n% l依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
! N/ B6 A! T, R4 Y0 k搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);* }% S9 `. W' r" e, w# o
紧靠其上添加:
' O" W/ t: E3 a2 M# l+ S, Dif( pWndBase == &m_wndMenu )
# J1 |2 D0 N9 \# u* i{6 a7 g$ m& W1 x, }* \
switch( nID )! W) r$ n, T" i8 z
{, }; ~2 Z1 X( j
case 2:; y5 y _8 o# M" \. U, T/ P
{
( P- h& g+ `0 B$ n8 f- u //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
& b% G5 j& y6 t7 _, V8 D6 D: V1 G if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)), j* s3 i' u- V' q
{
4 U2 G! Y/ W3 ]. m break;0 I9 M L0 b% f% ?' S
}) w$ D" X5 e7 m9 Y9 i' E% f) o
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)# a( [- d8 j4 v; a5 ~) x/ H
{2 b( I$ D) M! |' L1 _5 N
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
1 j. X+ r9 A' p4 Q if( !pItemElem )7 j7 @+ {: L% E. `. A8 i. z
continue;
6 v+ b5 Z, R+ @) O: {, p& n if(pItemElem->GetExtra() > 0)
! O) U# H/ {* M7 m' S. r continue;
* j) u; H: M) n3 k if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) / N$ }3 H% ~# _0 \: X+ A
continue;
( H7 u3 y# s8 L5 [# c if( g_pPlayer->IsUsing( pItemElem ) )5 F$ F4 P9 ]2 Q9 z' L6 \+ j
continue;4 G3 u; m H6 k) E8 |% }1 t' J
if( pItemElem->IsUndestructable() == TRUE )
3 a( Q4 \' X; d# k! I( h- j6 a' C( D {
4 Q& }# `- L z# {6 X g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );, t, g# J3 {% H1 _, W5 J" @
continue;
: k, R9 d, ?$ F) |3 } }- d/ Z) D# q! Q: l4 ?
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);/ V9 ^2 l# h. ? L, C
}* d. F* p3 ]2 n: }0 { ~$ ?
break;
; D. L* U2 d% Z5 R! T& u- ] }0 B% \4 N! q; y; T
case 1:
0 N6 M8 y1 [/ V. v2 Q {
* v" { ~0 J# q* R5 C8 ^0 b //整理背包
5 G* O4 a& P8 X. W( m' p$ M0 [1 V //////////////////////////////////////////////////////////////////////////, D$ l3 R8 n# j
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );) D6 H! ^2 ]( L! d9 i7 z' D1 j7 P
//////////////////////////////////////////////////////////////////////////
( m% j1 N: e1 m K" _7 a //////////////////////////////////////////////////////////////////////////
0 v M4 v' n1 v CInventorySort* pInvSort = new CInventorySort;! \; W* E+ Q, @& ~6 ?
vector <sItem> vItem;3 |3 K3 @; [8 h( c8 Q
vItem.resize(MAX_INVENTORY);//初始化大小: T4 J2 b7 M/ w; Z# n: q# Z& ?
//////////////////////////////////////////////////////////////////////////0 d6 O* T+ D' Y3 g& R8 R* f
//填充数据$ J* W; X% s7 a6 V2 M* `& @5 z
for (int i=0;i<MAX_INVENTORY;i++)
+ x3 X5 I' g5 {# y! a6 T7 M. a) q* l {7 p4 K+ @) a/ F
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
: j% d# M8 q5 d if (!pItemElem)+ C" z$ S% t7 @% Q& Z1 i4 P1 Y
{8 c- Z( H% q9 O0 z* [. f, T
vItem.dwKind2 = 0xffffffff;
1 P- c3 p1 j0 K C. C/ J vItem.dwItemId = 0xffffffff;
7 U' S/ T8 g+ t5 ]. w vItem.nIndex = i;: e$ L! `! N$ Y. ~+ \1 J' ^
}else {
2 @9 L6 e# U: x+ I+ P ItemProp* pProp = pItemElem->GetProp();
/ G: _% c$ f5 Z, L vItem.dwKind2 = pProp->dwItemKind2;
; y3 u0 Q m/ @6 t% {* p vItem.dwItemId = pItemElem->m_dwItemId;: o3 B' C' D+ c7 \" \% R
vItem.nIndex = i;2 }# B) W# h( B" ~
}. N$ \7 c# H5 F" W$ y
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);! C5 @/ f6 D: T% _' }
}
4 N1 {8 }" ]/ c //////////////////////////////////////////////////////////////////////////! C/ @& F' _7 n. h$ o
sort(vItem.begin(),vItem.end());//排序 a: q- u& q; G2 u6 q
//////////////////////////////////////////////////////////////////////////. T d( m; q( P
//交换 k: [8 u. E; T6 n K4 N. F% x4 w
for (size_t i=0;i<vItem.size();i++)
1 b+ b: t( t- x% q4 W/ ~ H' Y {9 Y/ L2 @% b8 `( w. K8 V! C
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);+ t- s4 \/ r; A! T; [6 m& d
pInvSort->Add(vItem.nIndex);
/ c1 W3 h7 w. {. N% c% V9 b$ V% `: X }2 s0 |2 |+ U# K- |- o! i- W9 u
BYTE nDestPos = 0;
9 _' z" w4 q& [0 X8 Z/ w; ^7 W for (int i=0;i<MAX_INVENTORY;i++)2 N d0 z" x3 F7 s8 O0 o& t
{3 ]* ~8 S/ a! h4 b# n w
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);8 O$ Y8 z6 z) M5 h5 v
if (pItemElem)
2 q3 V6 d% E/ F# J! T/ S {
Z8 \ U* [5 m6 w: h4 e if (IsUsingItem(pItemElem))- `$ a& {: R# L2 v
{
: z0 x& P- u0 \/ o1 g //这个位置无法放
0 T0 W; y3 Z0 `7 `9 \ nDestPos++;$ v! ~% `; I( H& J
}( l3 C, w" a7 J. h
}
" i8 X3 U a( w/ I! x: |8 [5 J BYTE nSrc = pInvSort->GetItemSrc(i);
' h: _" N/ }3 L5 z9 \1 B pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
( w2 Q+ A( t; o' j if (pItemElem)* x. n* l) R' N
{
" \4 P2 r* S5 L if (IsUsingItem(pItemElem))% P, f- o1 J6 U b2 z" T
{$ q; u$ _3 D" h& J+ V( B3 w
//这个道具无法移动,跳过2 j7 u, ]% _2 j
continue;
( U. X0 X" Z& C+ }5 G$ J }5 i9 I, u0 }) Y. h* R/ N
}else{* t# M5 V3 }5 H
//空位置 不用动
' G: T e/ h3 G5 v! N$ u continue;
z! c6 `% ~& | w }
3 h; H1 p1 ?8 l! ?1 M( r3 ^ /////////////////////////////////////////////////////////////////////////// J& ~: ^7 U+ o5 a" I9 [* p- J; U
//开始移动
\/ g' P, l' {! v3 X- r if (nSrc == nDestPos)
# A: g# |' F7 u' m7 I {7 g3 w1 m5 [+ L' ~. x7 M a
//原地不动; Y$ E2 P7 r0 d
nDestPos++;# y3 q* R& H$ [& L$ h1 K
continue;# o! W0 y' ~! w+ o! G1 p$ @) B
}9 ~2 d, ^; B1 O
pInvSort->MoveItem(i,nDestPos);4 \. o4 n9 r8 x4 M! P. U; t5 b
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
, _' x+ u* L" j3 |6 C9 f Sleep(5);
" Y3 {# N9 m# `# m1 w //Error("移动 - %d->%d",nSrc,nDestPos);
$ o/ q& O, G, ^5 y4 S" S nDestPos++;
8 `6 [( z/ F: Z; R+ `( V1 m) d. ~0 O }
" ]; A: T) D) w( C4 o //取第一个元素的信息& i0 e! K* n- C
/*
8 J; r# m+ h& d4 x+ R* W/ p- M if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)0 @1 m# i1 D7 Y8 v$ _2 M
{" u5 A$ Q* o1 b; k r. _( v
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
7 F9 v- M& q7 L9 t) v2 Q g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
0 t g6 Z$ s* J: ? }
7 k: c. M% \7 T o5 ~- c */
1 ?% B4 B; N* Y, P1 } //////////////////////////////////////////////////////////////////////////
! ` Q6 L0 `% \& `) c8 W+ M+ Z break;
% p, X. @( t1 |3 B }7 W6 j. e$ [9 a, ]- Y" {$ h
} ( E$ t6 K. J c S* F
}
8 x- m4 g0 H# N, \5 q* bm_wndMenu.SetVisible(FALSE);
- t+ s) e+ n. W6 u; I5 s+ k3 l7 K
--------------------------------------------------------------------------------------------------------4 ?: `+ u0 J7 n! P- R! A+ G# w% C; x
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
6 t5 c. b4 k* G) k2 a \{* Z4 h9 d) j! ^5 T9 l% I8 Z
BaseMouseCursor();
1 i+ C3 I1 S: w. X}
1 `7 q# v5 x/ ` R在其下添加:
& u* ?. x, ]5 p8 }0 e7 Qvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)0 S2 C; v0 G( ?& W, |$ L) o
{, G! y+ r y: t, g: h& n, J8 P8 t7 M6 Y
m_wndMenu.DeleteAllMenu();
: Z( w' l5 |- {/ ?# Nm_wndMenu.CreateMenu(this);
+ o. U8 i1 E; x- |2 \m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
. P3 k6 O2 e# N; W% @
3 _5 q4 c0 T" Q5 s' i) f# ]2 fif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))! }+ E1 M, d1 b0 v3 S9 t
{6 `" B0 }3 {1 A
//P以上级别才可以删除所有道具; s$ L7 H# F: P
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");% \) \. V$ z8 k/ K2 L( }; g8 ~
}
' B4 b' b5 b0 e( l1 o7 O5 n( Am_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
0 r w1 {$ F6 |# O) ym_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
2 t$ ^+ L* ?, T- G# mm_wndMenu.SetFocus();! F. ^8 O$ |7 g" H6 F
}
+ p* l7 n* N0 ?! ^------------------------------------------------------------------------------------------------------------+ O# v! c( q- Y# p9 F8 o
*************************
$ f0 Q8 y( e+ J; |# xWndField.h文件2 ~$ H/ a( J1 N. j) h) p. L
*************************
$ ]) U" w- [9 n# p搜索:BOOL m_bReport;
% ^! a* M8 j4 P0 l其后添加:
) @+ |, W2 {2 n% c l t2 ?CWndMenu m_wndMenu;
0 j5 _" E4 N6 C搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
. u- d, z; ^6 V# Y6 v其后添加:0 {3 V# h9 P: V
virtual void OnRButtonUp(UINT nFlags, CPoint point);; x+ b5 Q) ?& {( o) e" T, {
7 z/ }- m6 B$ b4 Y7 G, x/ g
1 H* Y( Q, u1 B6 `' h3 Y |
|