|
|
源文件中_Interface文件夹下WndField.cpp文件
4 t+ K0 p. N9 R- K/ y搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
3 X1 r: k4 u+ Z; X3 q0 f
# _& c% ?& L: w. Kstruct sItem
/ `& B9 z& ?1 e{
* q* i' x, j+ ?9 Q IDWORD dwId;! c! [ g$ E- W0 |( c9 T- M1 t' W
DWORD dwKind2;9 H4 w2 l/ C" _3 o9 o e0 n+ p# R! k
DWORD dwItemId;
# Q. g% Z& Y/ nBYTE nIndex;& ^+ V/ Z' z5 i7 P9 W( m! P
sItem(){
. ~7 n+ x# L, a7 e9 f! S% i dwId = dwKind2 = dwItemId = nIndex = 0;
% m9 b; h# ]* M% i* `' U}
, R, l' }1 t( Vbool operator < (const sItem p2)& g* j/ I3 T, X1 H
{
1 ?6 M* ]% g* m! B* ] if (dwKind2 == p2.dwKind2)
- t' M" ^* K8 _* M& F' v$ |( p( C7 g {7 a9 S6 n; I2 D
return dwItemId < p2.dwItemId;
2 V' U; k7 N& }8 N; @" b }else{
. B7 s o" ~& q9 W8 y3 x, M# F return dwKind2 < p2.dwKind2;9 a3 V, W# M) l6 E; J" [/ r
}
9 l- i3 Y1 P1 o- F} k& K9 H0 R0 x7 I% ?5 e7 B) l1 A
};9 T9 u9 l8 a5 H7 h6 S3 U8 @1 k
class CInventorySort L9 Y, D$ J/ n
{' T" C- i9 l' a! _
public:* w: |7 N# W4 u
CInventorySort()2 _) i: c) ~! \# t
{
# G K t, n n: g8 y7 |( ?2 Q m_dwPos = 0;
+ M7 k* @; e9 r, q" x: W( w/ i5 f9 y. }}+ w& e: ]/ i: P; f+ `& Y
~CInventorySort(){}
. }6 Q, v+ J* Jprivate:
" ?6 u7 g* ^7 K' n: K rsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息* l( Q$ b; u' u+ F, \9 ~. v
DWORD m_dwPos;
! {4 C, v% d6 \6 zpublic:
7 M W5 c0 K4 r& k3 A ~void Add(BYTE nIndex)) @- \! G: E0 r, g
{
! v- W. J' C% Q5 [7 z! |! ` if (m_dwPos >= MAX_INVENTORY)
, x( }4 d5 W+ V2 |* v {; P, b9 Q9 n1 E# c9 q b" u3 q
return;
* b6 d6 n- g8 }7 I }
* n+ O( _& n2 o( Z1 |# k4 { m_Item[m_dwPos].nIndex = nIndex;
$ r: Q4 Y. }! E' _ m_Item[m_dwPos].dwId = m_dwPos;# r; \& W8 b% i7 n: m
m_dwPos++;& _0 k" W' L( S$ R! N0 v
}9 x$ k, A) P5 Q& ?
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
" z/ U0 l3 C( W" N{
4 W9 ~; Q/ p9 x5 B/ n; @ for (int i=0;i<MAX_INVENTORY;i++)! u W L, ~2 f \- ^
{
1 L4 G) b- \' w if (m_Item.dwId == dwId)
! X" g4 r: v' i( K {% G8 ~- \! X) k2 T
return m_Item.nIndex;' ?3 c! I, |$ D
}) ^: y& {; g: k& I+ U' f5 ?% C
}* ~, M- R- E Z6 A% h. ^
return 255;) d4 | Z4 e. m, I. W! F( I1 L
}
2 P; z* C$ Z* v% v+ ^4 ~7 I, p1 {void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
1 d) ^0 L( b: b' [% m2 r1 w{; U+ r! F$ l2 B! {; F0 @. Z
BYTE nTmp = 0;
8 Z! |: t8 }/ ^1 D$ Z bool bDest = false,bSrc = false;- ?( e- N4 X6 ^6 R9 h! J
for (int i=0;i<MAX_INVENTORY;i++)2 p- D8 v) F$ p/ U+ \0 M' |' Q) n% u
{4 J: b% m& r' o1 f2 B6 N2 D0 Q
if (dwSrcId == m_Item.dwId)5 m! y; I- p1 k
{& t- a& S a, i# m* j0 `" [
//id相等 则 改变对应的dest和src
& O- _# z9 G% n nTmp = m_Item.nIndex;0 R i3 R! \6 a
m_Item.nIndex = dest;
- n1 t6 _: ]- l }& J" c3 T$ A4 F0 ? N
}
4 [+ r$ o# e- ? C, x6 f- s/ t //临时数据保存完毕,交换开始
# U3 |+ ~. F K" [7 L; J for (int i=0;i<MAX_INVENTORY;i++)! R: L& S2 N( J4 M
{
* K5 Z' Q. z2 O6 F if (dest == m_Item.nIndex)" \5 p7 b# S5 W2 c. g$ @, f1 K
{1 b& j% Q( ]* m6 f) F" k& p, j$ G4 z
//id相等 则 改变对应的dest和src7 j" }% K5 D2 n" Q+ Y+ Q1 [/ q! D2 c
m_Item.nIndex = nTmp;0 {/ M8 g) |, i# Q* c
}
! l' C; {: }4 F' q% y! @% ]- P( O }* c7 b6 Z/ C* B& J" {- e' r9 @# H# C
}
2 J6 I" f& `1 v* z3 O" O};( _6 k9 Q5 o8 q
-------------------------------------------------------------------------
- A7 |) R+ e3 @+ e! f6 m6 z9 X3 u依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )3 _+ c% x# y* p/ U1 o: n" f0 {
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
7 H* I, c- Y% ~: `. H# f紧靠其上添加:" ]+ G9 e1 T( N# i1 b
if( pWndBase == &m_wndMenu )
: ^; T- N" M; i8 Q6 I{3 V2 }8 i1 o! a. N
switch( nID )5 H K9 @/ C" T7 B/ ]' y4 z
{/ }. \6 ~% u7 R3 A" F7 ]
case 2:% e1 |' d7 q% ]) W& c
{
7 t0 x' v( L& B9 {; b/ Q //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);' |4 Q% V( m( o
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))% b& b; \. S4 s6 K7 ^) K. I4 R; U
{* d) C. e: s: g& F* K
break;
4 \+ U3 Q8 E+ x1 @# j. m; ~" y }
- u0 }) W% `) r/ H' Q6 x/ u& W for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
O- o4 @; l, X {
L- V' V3 U* V5 t0 g CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);6 p+ {8 c$ o1 G& }. R1 B5 n- c1 O, ?
if( !pItemElem ): M6 A K: T1 ]6 R- \' l# M
continue;
' i' T, V9 @- t9 n6 s if(pItemElem->GetExtra() > 0)3 K v* K* K- [/ Q% z3 {4 x, g
continue;
- n0 p4 m) U9 X5 A9 S if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
# C) D0 u4 n7 v$ O$ t+ C continue;
' s) v' n& n+ i+ H' q if( g_pPlayer->IsUsing( pItemElem ) )* A8 ]8 V, c, [; V+ ^
continue;7 ^2 |- ]# L0 L+ _; b
if( pItemElem->IsUndestructable() == TRUE )7 K& T- X5 b7 O
{& D' o/ I" g& f6 z4 `
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
" z) t# ^1 ~$ B3 u4 P/ f! ^: ` continue;
- |1 j+ h: H/ [' {! n1 E! a: h, i }2 K& \0 c/ f, Z8 j8 V
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);3 b7 {! ? u5 m% g4 F
}; c" K4 Y' R3 S9 F" n( {! _5 ?: _
break;
/ j' n- J0 [. e0 K9 g7 W1 c }" p( P4 A" K6 n) ], q
case 1:
' E; M3 _6 L4 [! A3 Q {
7 A7 N$ ~9 P1 D6 n0 } //整理背包
5 d0 b# I0 Q; f" X$ x: f0 D //////////////////////////////////////////////////////////////////////////
$ L" T6 C9 u7 a& n$ q- w$ k* X //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
/ t0 U, E) _) ]) _( r: j //////////////////////////////////////////////////////////////////////////2 t4 _1 Q7 B# H+ G: @
//////////////////////////////////////////////////////////////////////////
+ k: D' \; G/ v CInventorySort* pInvSort = new CInventorySort;
* h' m* G1 R7 i% u3 ` vector <sItem> vItem;
8 |, `$ }. g. m4 { vItem.resize(MAX_INVENTORY);//初始化大小$ y' e e! s, O) L: Y# _1 k
//////////////////////////////////////////////////////////////////////////
9 {6 w: w8 A/ @9 l //填充数据# z! j% [8 n1 E+ e# c- n; c' y( |
for (int i=0;i<MAX_INVENTORY;i++)
5 ~* X# m9 y" | ]8 W {7 [0 c# S& V7 C% j7 ?
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);$ j, U0 Q! }+ A5 r4 c. O |) ?
if (!pItemElem)
8 C. h" Y m/ A* h- [ {
1 e: W6 T, K( O' |* f) D+ A: K vItem.dwKind2 = 0xffffffff;/ L" P8 _& s/ }
vItem.dwItemId = 0xffffffff;+ ?/ x9 e! i1 J1 B- q8 o
vItem.nIndex = i;
; M2 f# E9 _- g( n# B( L6 k% _( u# x: ? }else {
( f/ w3 ^: H( V1 H ItemProp* pProp = pItemElem->GetProp();
9 Z4 F) C: O7 C& f! V/ y+ \' @ vItem.dwKind2 = pProp->dwItemKind2;8 R9 j+ X3 E- e8 M, D
vItem.dwItemId = pItemElem->m_dwItemId;6 n; E5 a! i/ R, q
vItem.nIndex = i;
5 |7 p8 c0 c# u9 W }" ?3 Y3 g8 ]/ M; h3 h8 ~1 ^
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
( c; l S t0 `, ~) V0 c }, P5 |' {, V: [* Q. M5 Z: A
//////////////////////////////////////////////////////////////////////////
, l- q/ M% @; h; h* ~ sort(vItem.begin(),vItem.end());//排序+ K8 _6 c- E9 @$ k2 D
//////////////////////////////////////////////////////////////////////////
: ?2 i2 R, y1 G //交换
- U/ X4 V+ [8 o6 n- W+ }3 J+ g+ @ for (size_t i=0;i<vItem.size();i++)/ t6 f% I3 x/ i& q8 ]( ~$ m
{5 M+ z0 P0 r* r; o
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
7 \3 M* I1 \, E5 q1 e pInvSort->Add(vItem.nIndex);0 [4 L- m# X# H' C0 o
}% G$ F# t8 z$ G: T8 F
BYTE nDestPos = 0;% m. D7 D3 _5 M* [1 v) c# y9 m
for (int i=0;i<MAX_INVENTORY;i++)5 {8 h# [% s. }2 l4 U+ T
{* E6 A8 n" c+ A$ o3 x0 r
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);! D/ O0 ?- G N- F: g
if (pItemElem)4 j' r: l9 r* Q, K/ y0 J4 Y
{7 _2 Z+ S7 q6 U Z
if (IsUsingItem(pItemElem))9 c/ C# @# m7 i# R4 \- w6 P
{
V: b$ f9 X& U //这个位置无法放
# S& g2 E# o) S4 N: A6 V nDestPos++;5 i% x. `+ a+ e4 x# U
}6 ]( c7 E9 l, H! c8 z4 U
}
& d+ D* D( H+ @ BYTE nSrc = pInvSort->GetItemSrc(i);& h \- ^2 M* [9 V+ I* s; V; ~! b0 c
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);# K6 C% U+ M6 }0 ?: j/ }
if (pItemElem)# o( U" e0 y) |* x
{' v9 j8 v8 `: D$ }; l9 d
if (IsUsingItem(pItemElem)): L. P! n; q- s/ }
{
- W) u. \ }5 J+ d" i- A( i& X0 A //这个道具无法移动,跳过
, U$ S! W1 }/ K0 F% B; z+ h continue;
/ w: B! g# y+ z0 i1 \8 I; d7 X }
" B N9 ?$ D @$ Z }else{
# D: A& D# W& m, k+ O. o4 G //空位置 不用动* g% d1 P( w: g! c) H. t6 h9 |
continue;
! M5 z$ P, T- p" O5 t: l m }
) }, J+ |; A# s( l. q //////////////////////////////////////////////////////////////////////////) W6 z0 s( [$ X. f
//开始移动
0 l8 y* J. B/ F( P if (nSrc == nDestPos)
1 ]2 Q; Y" o* @/ Z4 K {
; n) N0 y# F% N. } //原地不动, m2 t' ], v; K9 ] K
nDestPos++;
7 t% i+ {, m7 W/ z continue;0 [1 ]- `% z' w: J) N
}
% U3 j. g+ L$ A) v. V( Y( j pInvSort->MoveItem(i,nDestPos);
; ]" m; P: b" c8 H. m7 x g_DPlay.SendMoveItem(0,nSrc,nDestPos);
! M1 \' U- b+ g Sleep(5);
% t j. O8 q- Z //Error("移动 - %d->%d",nSrc,nDestPos);
3 e4 K! K9 c1 A. \/ H nDestPos++;
: n* V5 g1 z Y4 L+ {& e/ {8 m }9 R$ k, @4 ?2 Z6 X( u
//取第一个元素的信息
3 }, M& a! R3 S& \2 X /*
3 D) o u! x4 V. Z if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)" x0 E5 y3 ~& Q" N3 V g
{$ g- m# O) h# Y+ c7 C. U4 U% l' S
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
( R' `9 w+ T' B" p: `: w z g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x); U6 I: M% o# o) r. Q6 E7 z
}
0 J7 j4 e+ n0 j! ?4 J4 L */$ g# U/ a1 A3 _: ]: k
//////////////////////////////////////////////////////////////////////////% y# A! w* @4 a7 r& B
break;
0 T1 T9 w% s& ?0 A: M }. ^6 J I; ?2 X; p) K1 P
} $ D& `; g7 \0 K1 n
}- X8 i% @0 ~3 m, _) N
m_wndMenu.SetVisible(FALSE);
( J2 Q! k, z' C: @' a `
' T% U5 g) v0 F: X! |; z-------------------------------------------------------------------------------------------------------- V) C/ l/ w) v8 C& Q" A+ I# a, {
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point); R- x5 [5 Z+ b w6 [8 n2 A2 Y
{
$ t% u, O1 e2 G+ XBaseMouseCursor();( S# }, ]+ j3 f* c R. N) c
}
! l- O0 o2 y7 c8 h6 d \在其下添加:' D' Q2 s0 L! G( @( p2 p1 A z
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
9 q2 f0 M( t3 {- ~% }* q" J{
7 ^+ z8 C5 t3 [/ V; tm_wndMenu.DeleteAllMenu();
& ~6 u6 A3 l. ]/ M3 P% Bm_wndMenu.CreateMenu(this);8 P$ I; t' B. h# J5 c% @! c( H+ o
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");4 u& J% b6 @" F; ~/ L
' v& r9 U r+ O$ Z1 u0 m
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
6 S4 G9 L, r- }{6 X. {4 b7 ?" u+ _7 x
//P以上级别才可以删除所有道具. B* A- i% s, x2 u6 Q+ p5 y+ w
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
6 _3 {% C9 B0 V7 E' F0 c2 y/ o}% j* I' w' q3 S" d
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
& _& ?% G7 g- A, L" ^ H" Jm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );; C0 G) Z0 a) @# a$ f e# \
m_wndMenu.SetFocus();
5 v' z3 L8 f5 R/ [8 T3 V}1 g4 S# F S* F- q( ?5 [
------------------------------------------------------------------------------------------------------------
. b. G. b; y0 Z*************************% a/ O# m1 D* R9 g' N( w/ w7 J
WndField.h文件5 ^! y t" I( z0 R6 Y: V6 Z
*************************
* @6 F P& e8 L" E/ q搜索:BOOL m_bReport;
( i1 u$ X) n1 C ~/ ^* v其后添加:& c" j: G/ `$ p+ ?+ W( j4 d
CWndMenu m_wndMenu;( U6 U5 t" t* S. B
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);) ]! ?2 ?! N. u7 D, A5 X4 U
其后添加:
# T: o) W. p) x+ Fvirtual void OnRButtonUp(UINT nFlags, CPoint point);' W9 U2 W* W1 H2 p
. C2 k( R3 w9 l) A& G' b- p$ `$ h
; x$ F: i* `6 X" ]" C& L |
|