|
|
源文件中_Interface文件夹下WndField.cpp文件
7 p q, O$ |# } K搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )4 E9 r( ~, z, H
) q) g- x, l: B6 O# |& A
struct sItem
d) J% A5 o! L3 U: G, }{5 }: \- J* C7 \( d M3 M( |3 z
DWORD dwId;& q4 f) y/ _2 W/ X. e' W
DWORD dwKind2;: _. A7 k/ j1 v1 j2 l: E
DWORD dwItemId;0 Q* `! m: ~0 `/ b" P2 u* y
BYTE nIndex;
' {/ [0 D5 @3 ~; U! L1 BsItem(){2 z1 D! l; M5 b1 a/ R
dwId = dwKind2 = dwItemId = nIndex = 0;
) L4 h+ W: B8 L0 z) d6 M}
" P/ R# }/ j$ g. }' ebool operator < (const sItem p2)+ ^" I, Q1 c9 E3 j* ^
{8 C' T! P- k' _0 V5 r4 S/ C' }
if (dwKind2 == p2.dwKind2)8 x5 y( d8 y* r. }
{8 M$ O% s1 C0 ]7 I' p% b
return dwItemId < p2.dwItemId;% G: N. \4 [5 M8 x2 F, t
}else{( w' C: }5 w, [
return dwKind2 < p2.dwKind2;
2 @" p! e2 ~* n9 b; b, y }4 a# ^2 C$ v* s" z, E
}& }/ L; ~. L" j7 M6 C8 o0 h1 d
};3 w' v; s, q/ a) z& p6 e7 x( f
class CInventorySort
" U2 h* _" ] d6 i7 K5 l1 v{
6 g% r9 y9 e' }+ r5 ~9 \public: s- X& y# @6 U$ J# Y+ l
CInventorySort()
$ \: A8 r' I. K7 D4 f{0 o) Y# U/ O! ^3 e1 p* D
m_dwPos = 0;
Q+ N4 O; o) Y3 h k" F}: X9 |0 H7 @- Y- q3 G+ ?' I- y
~CInventorySort(){}2 @5 B" o, K+ z1 N/ o
private:, u4 E b4 S$ G* W7 \
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
) s1 d* i( u% @* ]" Q& g; G/ P( ^, }DWORD m_dwPos;
( M$ r v5 x: b$ }* Zpublic:0 Z# W% O0 K9 B P# E8 ~
void Add(BYTE nIndex)
l* b/ U! [6 \8 n* ]* }' s{0 x& D8 h. q& C! q+ J" q
if (m_dwPos >= MAX_INVENTORY)/ M2 b, D' b: r3 B
{' T% g" X9 s+ q) U& V* l) ^
return;( O$ g) C4 F: h) R" J
}
: h! l5 g$ z% _4 }8 Z" O4 ` m_Item[m_dwPos].nIndex = nIndex;
( ^1 r9 A$ G5 P- q9 [4 f) V m_Item[m_dwPos].dwId = m_dwPos;0 d) M8 ~# V* K+ _# m/ J
m_dwPos++;
( q' r: t( O* J' y4 q}
( U# `& m! Y% M% W1 k7 K; WBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
" L1 D2 p2 m" i3 M0 G{
, S+ \* E `3 [# Q4 l7 J; b: [ for (int i=0;i<MAX_INVENTORY;i++)3 ?2 x7 k2 M8 I" | G T: p
{
2 l9 F7 _2 f( o% `, F, {) ^ if (m_Item.dwId == dwId)3 o" ]$ j) F: V+ V# Z! O
{. ~( A: @- q D2 T: I5 C2 c1 g
return m_Item.nIndex;+ B6 g7 O4 x5 v& r
}
% X; f* M+ m% s* y7 i* B7 J }# q/ {8 Z: B7 I' \: e/ X5 Q- @
return 255;! X' P' M+ X# J4 o& [
}/ B: {6 X! Q* U. B" o
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置+ X" |# ^+ ]- l
{5 y* ~$ i& I. y
BYTE nTmp = 0;
; r" J! N3 W. l6 I- t$ y/ d2 e0 j bool bDest = false,bSrc = false;) W0 K! x8 c& i- ]1 x9 f
for (int i=0;i<MAX_INVENTORY;i++)
, a6 n9 J. Q' r8 w3 T/ L {9 w R [, T2 E; O
if (dwSrcId == m_Item.dwId)! K( c1 s2 C- U0 T% d: b) N# p
{
" | y" j G2 ? e0 K //id相等 则 改变对应的dest和src
# {1 P9 L% }# s" b2 Q nTmp = m_Item.nIndex;$ N; W$ t+ |" x; B
m_Item.nIndex = dest;( F2 l) z/ v J0 @
}6 H E$ B/ v9 S! {& B
}' |2 [7 J5 O5 H; i0 H U
//临时数据保存完毕,交换开始
& K6 t- J; {; V$ L( l+ Q r for (int i=0;i<MAX_INVENTORY;i++)$ U( I% o4 S/ x
{7 u( _% H0 _4 s" r" J4 v
if (dest == m_Item.nIndex)
7 j! U6 o/ f: V* T" p: y+ c. {# } {
3 e, c q! B( a2 M //id相等 则 改变对应的dest和src! i0 u8 p3 ?0 Y' K1 B
m_Item.nIndex = nTmp;# f7 U1 e i! ?* a
}
3 n2 J: o+ |4 R7 O }' t$ z1 b) w& I0 Y& [
}
Z) U1 \5 Z# M};) D$ t2 T9 k K. H. P
-------------------------------------------------------------------------7 ` d" J3 v) V9 _. }
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ). S8 b1 r9 ~+ w$ Q: q9 I
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
7 b+ I1 d4 V0 T5 p紧靠其上添加:
& z$ C2 U6 ?7 E( P, eif( pWndBase == &m_wndMenu )
( ] Q$ n4 y7 I. x' a6 N{) q# t* O; i% M
switch( nID ): v9 {7 a: @; }5 \4 Y' N* Q% a: e! O
{. m: Y5 h+ E! o) Z1 J8 ^
case 2:
: {# k1 p; ^3 j3 x9 ?( m2 b; P3 h8 h {4 \ X1 o/ l! ~& k/ Q. N
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
; }8 w7 d/ x0 X% j# y% ~+ f if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))1 F& y4 P- g' q, L% Q5 a! y
{6 F! X O- X7 j7 U
break;3 u: v' z0 i5 I! s6 r; E
}8 g+ _/ Q0 n0 }* A* T
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
- J2 H& x% C5 f- | o% f9 g {* p' c; I! a9 K( v7 `) x- W
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);& \( T0 y+ _" B9 k
if( !pItemElem )
0 w# ~* ~+ F, H3 ]2 i; b! q continue;
. w, E2 Z5 O3 f ]) y/ u if(pItemElem->GetExtra() > 0)
8 M, U% _0 F8 B% D8 g( _ continue;2 t U$ ]5 {9 B. o$ R, C7 c7 d8 W
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
& e$ I( ?2 B4 T+ p* S% t* B continue;
- A3 B1 j0 M) ~5 i+ N# E- f S if( g_pPlayer->IsUsing( pItemElem ) )
3 x7 M! |3 l* I continue;- L1 ?2 S5 Y- s H; c& l7 U
if( pItemElem->IsUndestructable() == TRUE )1 Z8 Q; N+ h3 E1 j9 e7 i
{
; R1 W6 t& L+ d7 @# d1 Y$ ` g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );- C- @0 o8 `" X A: Z3 G& h$ o
continue;5 z$ e1 h/ W( t8 e$ K9 Y/ Y1 L8 O8 f X
}
" u2 C# \4 C% k g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);; c1 j z* ^" A( G/ {7 U9 X
}( x0 N. U8 O4 A6 ]7 t& ]: _5 Q$ k
break;% n b* [5 B9 z: z
}/ A9 _! h1 p* `0 y- u
case 1:% _6 O5 {+ T: D K, @
{2 B. f, t* R: k0 {/ X: p" u
//整理背包
% r1 Q- e" X: P2 _ h4 K. a //////////////////////////////////////////////////////////////////////////0 L+ W# V# ?' b) i$ [7 D, F
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );0 t3 H, z+ C4 v9 [ [2 C$ Y( k
//////////////////////////////////////////////////////////////////////////0 i3 I. ]+ Q. w _& j5 `' g
//////////////////////////////////////////////////////////////////////////
7 _$ k3 \ i8 {& A' y1 }& G CInventorySort* pInvSort = new CInventorySort;" v8 K( n1 S7 v- L4 ]7 E
vector <sItem> vItem;
) N% @7 n4 R; j0 y2 Y) G* s# h6 E8 L vItem.resize(MAX_INVENTORY);//初始化大小
+ b8 L. I/ M3 K, f2 [6 N6 { //////////////////////////////////////////////////////////////////////////% w4 V, s: e) R; c: }% K3 t
//填充数据
a f$ v7 Y; ?# Y' c; z for (int i=0;i<MAX_INVENTORY;i++)
' @7 h+ U4 m% s, A" R {
. b( M1 j* ]+ t( x! \% B' c& G8 V& I# J CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
$ n& C7 c" R% i, C6 d" m if (!pItemElem)
, l3 A4 X `6 z2 u {
3 ^2 u4 Q/ A& N vItem.dwKind2 = 0xffffffff;
0 \( k: f& J' M vItem.dwItemId = 0xffffffff;
1 {; l, t; @" M4 C+ V9 Q+ a vItem.nIndex = i;1 a. y( Y3 a( Z: [5 }
}else {% N) h& [( y8 c1 e* A* G! r4 {
ItemProp* pProp = pItemElem->GetProp();
0 F& m# @$ w; ~" z+ @- A vItem.dwKind2 = pProp->dwItemKind2;1 y4 X `9 S9 I% \" F& z$ Z4 O
vItem.dwItemId = pItemElem->m_dwItemId;
6 `& d. I5 H# A vItem.nIndex = i;3 u# m" P3 f1 q5 h3 p4 [
}: C7 l2 b/ P1 d
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
! |* S1 _5 X1 r$ L+ T' D$ x }
2 q' Q# ~1 N3 O: u0 q //////////////////////////////////////////////////////////////////////////& E! T1 B, o8 m( d! l
sort(vItem.begin(),vItem.end());//排序
0 @9 V O0 d9 [3 A2 q$ n p* ~ //////////////////////////////////////////////////////////////////////////' ?+ t6 @0 l/ K
//交换$ C* c2 q' L5 u& h9 O- }
for (size_t i=0;i<vItem.size();i++)* E, F1 ]& j% @, M+ C; P& C: J7 x$ M
{8 j5 M3 }) r: |* V) ~
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
) \8 U j# a% D4 w pInvSort->Add(vItem.nIndex);& [1 k! H" x) m0 [4 Z
}* W1 M, q1 ]- B& y1 {) V0 N
BYTE nDestPos = 0;
$ |* O: M2 Z, I9 O3 ^3 r7 i/ g for (int i=0;i<MAX_INVENTORY;i++)* T! r5 C; n4 u5 ^# m5 J L, m
{, P) |: d: m+ j! i, `- U1 A; Y! s
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
% N& M4 z4 Z# j' K. X, o& V if (pItemElem)* o1 ?* c+ y9 B5 U
{
N! ?# [ G1 ? if (IsUsingItem(pItemElem)). o" q! H4 N, I! J; E: h9 a$ N
{
4 _- K! Q& K+ d8 y$ Y. c$ ~ //这个位置无法放- ]8 `1 G$ y8 d6 k6 T
nDestPos++;
9 H! t: f- k% ?7 U }% E$ Q5 H8 {; g$ \+ I
} ]' f U3 @* J
BYTE nSrc = pInvSort->GetItemSrc(i);. C" ^% x; l: `1 S
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
6 z! V S+ F4 J. H. a if (pItemElem)
8 `. O8 H* s! c6 O$ g' C {
3 j5 `/ A* c& S* R) J. O if (IsUsingItem(pItemElem))
, o7 j& G- V% x; r$ h {" U9 X) Q0 c/ _8 j
//这个道具无法移动,跳过$ Z `+ h5 d' N, V) b( N; ^
continue;8 p9 g6 G+ X2 s$ u: c" i
}+ d# ^# T% ~2 s
}else{
8 |8 e+ x2 D% ?9 ~4 e( Y //空位置 不用动
; D, N) P* [- O! N# q& S( g6 b4 D continue;
9 p% w2 {5 L4 [& l1 K }
3 q0 e7 y( e/ n! e. f5 O! P //////////////////////////////////////////////////////////////////////////( J* Z+ ?3 K! t' i
//开始移动( I, y( Y1 @( b5 u' I0 G' O* q; U
if (nSrc == nDestPos)
( J @+ A% P" b1 ] K! O {5 v; j2 `8 O, Z. d0 A* Y% [
//原地不动* A. g) f- j( G& E* ~. N& N
nDestPos++;
0 J* F+ u9 {: S$ q continue;, `2 ^4 r$ ~" P
}
2 }6 e$ S: u; U: q9 } pInvSort->MoveItem(i,nDestPos);' F; n. I: s; u' v
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
: w" _/ G/ ]+ T4 ~7 d0 h" x, i Sleep(5);$ _" e, l4 Z& C2 p5 y
//Error("移动 - %d->%d",nSrc,nDestPos);
' }1 T4 w. r% x- D+ p' l nDestPos++;
/ F Y- C3 ]& ^ }6 m1 W) `* W! D5 w" u6 ?
//取第一个元素的信息5 ?- P$ _$ E$ R7 u+ R
/*
! H! `) V2 v, B# g- h- s6 @ if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)- ?3 Z8 q$ W s4 P4 h
{
1 x) d& b, @, o, L4 V* S! v Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
3 L* i) J; E! N, h) D& m1 k* n4 y g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
3 [6 d- t2 c) E" ^% N9 L }
( U' G4 ^5 [& p- a' q/ k: b6 A/ ?( a */
+ ^- G# V x' ^1 g: d* O/ q/ V: ` //////////////////////////////////////////////////////////////////////////$ E: r, S1 }, g3 R/ n
break;
+ _) z1 }5 p7 O) l1 u. G. Z$ t } Z' E9 U t1 j9 [ {7 ], l; c5 ?
}
) O! X1 o2 N2 ?- B2 Y: q}9 o+ b& {. b8 I6 g# ^
m_wndMenu.SetVisible(FALSE);: ` r) B* w0 J3 A: w
/ o1 C R- V' T, i
--------------------------------------------------------------------------------------------------------5 I; R3 \) X2 R0 X
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
4 _( @) q- B8 Y. V{$ i- e6 C4 v& w Z- I5 M! }5 S$ J
BaseMouseCursor();
0 k$ ]) k8 ^( g, F: ^}- T8 n+ |& m M3 I
在其下添加:
! D, g9 L- j! m3 Bvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
$ L5 Q9 M/ X+ G! b+ k. {/ D{
q3 m& u( g& p Ym_wndMenu.DeleteAllMenu();
/ ~# U- i3 [. {5 n; v+ cm_wndMenu.CreateMenu(this);
) O" m3 Q$ z" J4 C" \ S" q, pm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");9 O& q1 |* B8 H6 D
! J, k9 i9 S* _: s9 T
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
; B) v: Q, t. _) Q7 K, E) F" p1 p{
9 u+ o: Z2 H* W5 w7 I; a //P以上级别才可以删除所有道具
! a' Z( Z3 a) N: L9 v m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
1 |+ q6 H* \2 N8 ?}! S1 J3 s# u; e
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );+ N5 W: N, T* a. j1 P' j: Y, W5 a6 j
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
* y+ `5 e6 X+ lm_wndMenu.SetFocus();$ V& c8 O$ q7 d8 M2 Y. N. H8 B
}2 ]! @* A9 n* `/ j& L" g
------------------------------------------------------------------------------------------------------------; n e5 ~8 s0 U# Q2 B* ?
*************************7 W' G: I: P' c6 Z8 K: V
WndField.h文件3 C* ^ X% v4 d. `# W2 S, N8 g
*************************
6 l# a/ [* k' _' v搜索:BOOL m_bReport;# V2 e, ^0 K- O8 I; M; X
其后添加:% O5 a& _2 ~/ F3 [7 U& k3 [7 P
CWndMenu m_wndMenu;
4 K) l& Y9 Q4 `+ @搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);/ z, M: }4 S) O# D: R. k1 V! _, x
其后添加:
& b1 i& n' Y( H2 T" evirtual void OnRButtonUp(UINT nFlags, CPoint point);2 \1 ]$ M. w5 }; f+ ~
; E3 F' w! r3 m" [
7 v% v2 e e5 Y7 E |
|