|
|
源文件中_Interface文件夹下WndField.cpp文件
; f! b" Y( t* d e& n搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
4 i0 H3 s; O |/ E: I/ R$ d& j4 @$ `! e( j) p; D; |
struct sItem0 Z: L9 P8 s0 K, ~# f; U( e: g+ l
{! G. f) N% h# o& C8 A9 N
DWORD dwId;
; g7 g9 T6 _/ X$ r# N$ @DWORD dwKind2;
8 M. C" Y5 j6 N$ N% R" O7 w$ zDWORD dwItemId;! G- P7 f2 B, ?# K1 E \ g
BYTE nIndex;
( n; M2 K7 f* f: zsItem(){- N- E& A* ]$ L6 L" I8 J m
dwId = dwKind2 = dwItemId = nIndex = 0;
. U+ M x Y2 o; Y. f: d& G}2 {4 v2 a$ e, {* n4 J0 T1 V
bool operator < (const sItem p2)
) X/ b' `9 ^. `3 _/ @{
p7 K) N1 a! X0 r if (dwKind2 == p2.dwKind2)6 e2 q1 C* r, a9 c% a! h- p
{# x: V, j7 R' ~5 l% ^
return dwItemId < p2.dwItemId;
C5 y# ^% F5 S2 {1 _ }else{( q( d2 I/ I8 l5 ~: y
return dwKind2 < p2.dwKind2;
8 ]$ b3 g7 i6 x, u( U: V }
. [3 B8 Z& I$ R8 f* }; z1 h; d}8 @$ Y9 }, Z7 W8 F
};
: M" B4 F5 X s. Rclass CInventorySort
. \* Q7 s" a& L; H{8 C- `0 ?1 _5 f3 l& {
public:
2 A9 f% d7 [, c) u' ]: d* s3 VCInventorySort(); F+ w" L+ c" n( `& f" u
{1 D! h/ ], h U8 S3 }
m_dwPos = 0;! t* ~0 Y& }! U2 T, K- T9 t( L: J
}' N! C: _: k L1 e Y6 I
~CInventorySort(){}7 M3 s: h( k- l _5 B
private:
# v& x$ r( b& d0 \* R# o# F6 D( psItem m_Item[MAX_INVENTORY];//存放排序好的道具信息! s7 P- l/ b/ }2 W2 ^
DWORD m_dwPos;
0 |4 Y( s5 ^4 @8 u: Kpublic:
, E3 y4 O, s J( wvoid Add(BYTE nIndex)
* ^7 P m1 Z3 c7 E4 i{
/ J* i2 p5 L c2 b, u if (m_dwPos >= MAX_INVENTORY)( C, v; _5 m! { C
{
' S9 c( o# U( W" M/ r3 t return;
' ]" @4 L V" K ]& _ }
8 f6 k. @ A9 m/ ? h, t" l: [ m_Item[m_dwPos].nIndex = nIndex;
7 w! g( C% D8 V m_Item[m_dwPos].dwId = m_dwPos;, F- P. z) E) W: w' n
m_dwPos++;, O% O4 I2 i: B! P& ]3 o3 ~
}
" w( Z/ f1 k- U9 Q; PBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
( [2 J; x" z. Z- y) v$ I* ?8 |{
, k9 U9 @% a! o7 H- ^ for (int i=0;i<MAX_INVENTORY;i++)
6 a" [. g6 e! t" \" l {
0 b; e6 b( q" Q* |+ H if (m_Item.dwId == dwId)' V* X. A. N( J: {5 U# X) u
{
, v( d: I+ l$ ~. ?4 x) j return m_Item.nIndex;
7 j/ {& g1 _( K" @, f% ? }
0 T9 `; E2 Z3 W- v" m0 Y8 k0 ^$ w }) ?" ^6 C. k- N9 x) r$ b, R- z
return 255;
3 H" d9 N7 t. g! i}
* o% o* N6 E U8 x1 }! mvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置$ w e; R' W, m- \% r
{, ^/ g8 e2 Q& ^" j, ]% G/ ?& C' ~
BYTE nTmp = 0;3 J) x7 Q% i1 O% ^
bool bDest = false,bSrc = false;0 v+ @# z {0 g8 M5 k2 l! K
for (int i=0;i<MAX_INVENTORY;i++)
& D- E: V# x# x/ @, m5 h5 [ {
( o6 C4 F9 [" @/ n if (dwSrcId == m_Item.dwId)/ ^' u- A$ c% @; E; o5 b
{1 P, ]% c, h5 W0 Z& E
//id相等 则 改变对应的dest和src @# c9 c/ u U _& v" h+ Z
nTmp = m_Item.nIndex;) W$ |- t$ i: K- T2 Z
m_Item.nIndex = dest;
! l, F# ?0 F7 R }
# Q* g i9 p9 ] }5 ]7 `4 ~& P' n/ ?8 m5 [1 ^
//临时数据保存完毕,交换开始- N1 x/ N3 Y4 _7 b; @7 x3 _0 b
for (int i=0;i<MAX_INVENTORY;i++), g! U- g% V0 e: Z2 c" G
{
3 y$ H! {2 \8 d( j# A if (dest == m_Item.nIndex); Y3 v7 @& O8 `9 S: s6 x5 O# T
{' x( n) Z: a+ `5 a
//id相等 则 改变对应的dest和src
@. U5 f. A( c' r m_Item.nIndex = nTmp; Q6 n4 @/ s M. C. t' S' v
}; n. _/ ^, O8 M6 n! b* p( W
}0 q; Q3 B# N( K/ Y9 o
}
/ q' W U. g$ R* Q9 l};
' K$ P) I4 m. Q-------------------------------------------------------------------------
& T# l' P- \, J# }2 j5 s依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
) Z3 Z1 L% c- T Z搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);$ p4 b3 p& w" F( p$ _% a
紧靠其上添加:5 |' b) Q3 S" o% Q6 B8 L* a7 I
if( pWndBase == &m_wndMenu )0 @- o7 W$ o6 p) z
{
5 ?( L5 R+ h( O) `0 d) [ switch( nID )
2 F; L4 o* u5 n/ H: y! o- q5 x: u {
9 \( S/ s+ Q1 O9 L$ c4 k case 2:
3 u2 G) T0 ?' u6 D, x( R( m. g; o P {7 x3 U$ a: ?% j9 Q9 f% \
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
1 i' v; @9 r5 U9 U* a j8 Y: z if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))" P3 j; ~' {# t; Q: s
{# N [; U7 g& v S
break;
0 z/ y3 U4 l1 F7 B0 C } s. W/ P) n, Z4 P1 C7 q9 t
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)+ s3 P+ q7 s/ T# H: J
{8 I& m( M, z( \4 ?
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);& t( B' A; N5 q) x- n; g9 N
if( !pItemElem )" S+ U6 n k/ Y8 m! D+ n' k6 `: [
continue;
6 U5 k; h: c7 A1 t, u( N if(pItemElem->GetExtra() > 0)
; Q0 N- r9 ?6 r6 C5 c1 x continue;$ ^1 j6 c0 p2 ?8 U
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 8 ^5 A9 {" {1 O! W9 U. p
continue;
0 P0 ~0 ^& a7 K if( g_pPlayer->IsUsing( pItemElem ) )- a2 A- e: x; \- T" g4 P
continue;
, n3 ^8 i3 T# v1 } if( pItemElem->IsUndestructable() == TRUE )
( h( E: ?& [5 t7 Q$ F' p1 x {. y; |& K b/ p1 N. k
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );& i& Q/ }# U) o) w% E3 I
continue;
0 i8 v6 q- }7 w6 ?' {" y* \ }
2 E) V, }, ]9 u g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);) ^' e# u( J7 }5 G Y1 x1 m
}" q/ H/ s, Q4 L3 w% w5 Y
break;# c( n2 |% S' Y( ?
}
( K$ W' O3 ?$ U' E; U/ h case 1:% N( e( ^0 q" V* _9 @: m9 ^1 l$ G
{
: _4 S. N0 w: @6 ]5 c; V0 a' A O //整理背包
, ?- U" D6 v0 @. C* L6 R) P1 v //////////////////////////////////////////////////////////////////////////
( G( }/ K+ }9 u$ w% P4 _ //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );* s1 ~" ]" z! F# |# V* p3 M
//////////////////////////////////////////////////////////////////////////
0 w/ v; e5 Z: K) S- z$ S1 X: T. K- ^6 N //////////////////////////////////////////////////////////////////////////
( Q6 t) }& g. T) f! n3 B$ x% \ CInventorySort* pInvSort = new CInventorySort;* N0 q% K6 x7 f4 U
vector <sItem> vItem;; q8 n' P4 S A7 f
vItem.resize(MAX_INVENTORY);//初始化大小
0 J+ @$ i3 ~+ ] //////////////////////////////////////////////////////////////////////////: J& o. m, J' M! s, C' \# c
//填充数据) Z; g" t8 `' M4 \5 k- H- e
for (int i=0;i<MAX_INVENTORY;i++)
K$ w3 s/ T. o/ C2 o) i {
; u, }. A, p% V6 Z CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
; P$ O& D Y2 L5 `9 {- D F# V; } if (!pItemElem)! y) p; [4 k* G5 }% f* d+ R
{
P4 A$ }% L( E8 F0 l7 u% l" h0 h vItem.dwKind2 = 0xffffffff;
9 N2 v t; m, m# ~ A. e6 [/ { vItem.dwItemId = 0xffffffff;* G; y& t- g) @! P- b, W
vItem.nIndex = i;! `& s5 v& Y+ o
}else {
9 X3 L5 M$ @ w7 m( P% [. I ItemProp* pProp = pItemElem->GetProp();9 f! H3 L$ L0 U1 o5 [8 m$ b; N5 i; P2 o
vItem.dwKind2 = pProp->dwItemKind2;
! S& X* n# N# G' A( C vItem.dwItemId = pItemElem->m_dwItemId;
( L) R1 I( B: h$ }5 `5 K vItem.nIndex = i;
2 f7 f& k2 ^0 \4 W& I( N8 `( i7 b }, v" x3 u- o) {3 [. w8 p- u
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);# O2 B) K5 R9 b; k3 y+ k
}
. A9 r, `+ z5 }# p //////////////////////////////////////////////////////////////////////////
6 E3 o( T& P: u# ~3 Y: s/ ]! u- { sort(vItem.begin(),vItem.end());//排序
. b1 I* Y. q- |: P: p" T" D //////////////////////////////////////////////////////////////////////////
9 H/ ?# o, b- h% j/ D. e //交换
' H; L7 B% n- h5 Y2 Z) s for (size_t i=0;i<vItem.size();i++)
5 ?5 y/ N: g& e, U {7 C+ U# B; D( R
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);0 Y$ G' k U" a( Y
pInvSort->Add(vItem.nIndex);
+ g$ C0 J0 u2 t }
0 ?* S' [$ \# s) S# I% U# B$ w BYTE nDestPos = 0; {1 Q. Z, `; B; J" }+ K# \
for (int i=0;i<MAX_INVENTORY;i++)/ ^* ~7 x e5 U
{3 b B- l# p4 b# s% B. h E5 h
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
% U" k/ C a& G. X* t) A if (pItemElem)) a; G/ q! }8 K& v0 v+ b
{# n# W: F0 l7 R/ m
if (IsUsingItem(pItemElem))5 A) a0 u- N; G6 _, f
{' N& B4 H. f! G/ b% W- a
//这个位置无法放8 g6 n$ |7 Y; L& v
nDestPos++;
. q/ C. H' x' `# D }
% p. D% w0 m5 L0 |# X }
: ~/ V$ I) i H: T: ]$ t. { BYTE nSrc = pInvSort->GetItemSrc(i);3 M& G. }1 {1 T. I ~) C0 m b
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
' p! L5 w9 W2 N5 T9 Z! a if (pItemElem)
# ?- V! Y, ]# Y& t p {- b4 d; a0 p1 X _8 @
if (IsUsingItem(pItemElem))
0 c5 y2 _" i" [/ y- Y; j {& N4 R- V' j- N9 M( S0 I9 q
//这个道具无法移动,跳过
C: i4 b8 I3 e, L% `/ t! H continue;
- z% |% L- N/ r; }% b; b }
8 f2 i; [: u7 b; \7 q) i, Y! S }else{4 a9 c4 ]5 V; x
//空位置 不用动
- }& `" T- G9 s7 [) \ continue;
6 H. @0 C4 m' u0 R, T: K- o4 A }& ?, V8 k! s1 v5 m
//////////////////////////////////////////////////////////////////////////
7 S( b7 I( Z8 D //开始移动. Y: [/ X2 s0 ~4 N1 u# o0 c! O' t5 V
if (nSrc == nDestPos)
0 a9 o+ `$ r; u: q {7 o4 L! J" C k5 V3 m# N
//原地不动/ A; R8 Z! S- O, P& K5 S+ k
nDestPos++;
$ h$ ?9 @# L! v& I! D continue;* l' t$ E$ f/ E
} @1 N3 T: i/ V- W
pInvSort->MoveItem(i,nDestPos);
- z# k8 Z3 \! F; \8 D$ |/ X$ b3 W g_DPlay.SendMoveItem(0,nSrc,nDestPos);) w! D! i/ f: _4 Z8 X8 N9 W/ B
Sleep(5);
" M3 v# M; X! j9 w8 { T //Error("移动 - %d->%d",nSrc,nDestPos);4 f0 r* p4 E8 l8 Z* m8 `
nDestPos++;
" s$ F: A7 Z. ^0 ^2 e6 D- \ }
; Z, \8 W5 S W$ ^- Q# L //取第一个元素的信息( M- ]) K$ E; x
/*
6 C6 w+ N, F; F0 l if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
! x' v1 T( [! }' M: h {
( N; t& E+ K/ i1 | Error("Move - From:%d,To:%d",vItem[0].nIndex,x);% o9 Y) ?- j+ j% Z& o: y! m
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);6 |1 ^; v: J; C9 v* f
} `" w6 {& c4 Y2 B; d7 G
*// o( n/ |3 \' A) T3 f# p+ U
//////////////////////////////////////////////////////////////////////////
. {5 s8 M/ `! e3 F# c6 X) L4 L break;9 e# r( m8 R$ \3 W
}+ B" w+ m ]# p% i
} ! f! M" g! c6 W+ B: C }( p, y" c
}8 ?; c2 e' m; `$ r" m, X5 z( l
m_wndMenu.SetVisible(FALSE);
& [+ K. M% T9 F# J- a+ V1 E8 P7 g0 R. C9 d
--------------------------------------------------------------------------------------------------------/ L: S' X8 ]* s! B9 [7 _
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point), k7 L4 r# i+ s: x7 b
{% X% o% P1 ]) p7 f) a
BaseMouseCursor();* l3 a& V% C9 }$ l8 q
}
# t. ]0 z5 ?9 p d4 ]7 v% r# \- C( x在其下添加:
# s3 ?1 ]; z2 t! [ X" }1 n0 h ]void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)$ b( ] @9 d# s3 q/ ] _
{% N+ f Q* F1 x( O! |" D
m_wndMenu.DeleteAllMenu();$ S+ V# c2 l( v% ^1 f6 n
m_wndMenu.CreateMenu(this);
/ r( y2 l9 o# H+ K: C4 T8 K+ nm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
* ~4 C6 G/ D* |( \2 P. C
; B+ P# {- t- b; y; F2 h- ?( O4 [if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))7 [9 F* _- H. {1 v/ ^
{
6 s. B( Z0 F+ X+ A6 d2 v //P以上级别才可以删除所有道具1 K5 M `' z' z. \9 I4 H( u. c
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");/ d4 G- ?! B- l; j8 c3 R; \
}; K" m- X C' @4 X) p
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
. K$ j! U- \. L% I7 Z( u. Ym_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );4 e6 ]) d' L# K$ ]
m_wndMenu.SetFocus();
& Q1 {8 h" j5 U |, M}
" N* ^8 N' z( Z* A0 @------------------------------------------------------------------------------------------------------------
8 @( `8 P# P5 m. ^* Q+ S9 a*************************( d+ w; R1 w6 o h+ [
WndField.h文件
; N* b, E8 _- s$ @4 j, v8 d*************************
; C7 E" X5 T5 N$ p3 L2 ~ j搜索:BOOL m_bReport;
& |2 }5 H% Y. ]# i; y; R其后添加:- h: @- c: S3 I b' g
CWndMenu m_wndMenu;! X0 ^ r& m9 @' `
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
K$ h1 Y* V: `# [: j其后添加:
0 n8 d, H! L% i' V4 Qvirtual void OnRButtonUp(UINT nFlags, CPoint point);* U9 g/ H) v: N8 F
4 M9 U6 Q7 A" J
7 P2 y' I9 t& a, n" L) g; V& |
|
|