|
|
源文件中_Interface文件夹下WndField.cpp文件0 z8 r0 } L5 @5 G2 j
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )4 M5 W6 Q! x6 n" F+ V
$ W) { g) u0 Wstruct sItem
1 v a8 c2 J6 b6 \{. g3 a. |6 {# R2 f$ M
DWORD dwId;6 q- q/ h: t3 y
DWORD dwKind2;
: r$ R3 _% l* o$ `DWORD dwItemId;
. g: \: Z! C1 s% M1 `" i9 @BYTE nIndex;
9 F# o& i. B* ]+ G6 W5 isItem(){
, F: y0 l+ M/ g# |9 I6 j6 J dwId = dwKind2 = dwItemId = nIndex = 0;3 D5 D& R6 C8 z8 B/ y
}
: |. T* i( c* J# ~. }6 N" e Pbool operator < (const sItem p2)( T, Q6 t3 ~: N% Y: i D
{9 T; A7 x n+ i T) K4 v
if (dwKind2 == p2.dwKind2)0 O1 S4 s7 H( O0 Z3 f( o' M
{
! Y5 {5 @" s0 J return dwItemId < p2.dwItemId;! F0 P. m. E8 J9 s1 p U; y5 }
}else{8 E# r# L. F! V8 u6 L) }" m; G( W/ e+ M b
return dwKind2 < p2.dwKind2;
/ f% _' A: _ M$ C; x& [% n% v }: O/ u/ p0 X4 M7 ~* E3 c
}
. k+ ]. g, N# T9 _ H};
/ n, q* s( q5 ~, e# ?5 t' hclass CInventorySort5 V9 F6 B5 W2 O2 A5 X
{
4 _& }' j/ T8 C& A% k* P/ m& F9 _9 {public:
w! P* B- ~/ X0 KCInventorySort()! t; |7 J* K. o
{
9 m, a9 a. ^' g# i m_dwPos = 0;
/ }+ t; u) a9 E: \0 I7 p}
3 H: `+ k( u9 M0 O~CInventorySort(){}2 `) {& k2 y/ {1 M j7 s! j D J
private:
) E* g8 Q8 D# ~4 msItem m_Item[MAX_INVENTORY];//存放排序好的道具信息+ s1 }8 g2 s9 y8 l/ Z
DWORD m_dwPos;0 W O) S. s% ~
public:& D V) ^3 l$ J- ~4 W
void Add(BYTE nIndex)
$ S, F9 M6 T- k9 Q6 `4 s5 ?{
: V0 K" a8 j7 }/ Y a if (m_dwPos >= MAX_INVENTORY)
. w3 S% k% N9 V8 i' u' A i {- a# Q9 M8 G+ f$ R
return;
1 w0 ]8 w! _2 s/ }# V9 f- Y# R }
# h* f) i+ k( l, c$ } m_Item[m_dwPos].nIndex = nIndex;7 ?( I. {$ [ ]+ r9 L" g% a9 v
m_Item[m_dwPos].dwId = m_dwPos;
3 M0 n# v, ~6 ] m_dwPos++;5 x' M$ q# N' r7 W0 T# W% L6 I
}
/ i1 G2 L9 ^9 R& X5 ZBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
7 F) X8 b, C8 e) c{4 R% ~+ s) Z& c
for (int i=0;i<MAX_INVENTORY;i++)1 L' ?2 `8 q1 Z* m
{
, d4 O6 d$ y y# v! b& V if (m_Item.dwId == dwId). `+ i" z9 w( W @( Q( [* h3 R& i
{
% y3 w3 p* W7 v& K4 G return m_Item.nIndex;" p! u- ~4 Y- `1 P3 l
}
* c2 i! W3 v- k* P, v1 c }7 Q* ]' u, K9 R& n
return 255;
1 u3 k$ y( s7 G* g}
7 q. l0 z7 S% ~0 xvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置 F( t7 q1 J* K8 d B
{
n- c6 g3 ^: M# Y3 F4 N# F BYTE nTmp = 0;) @$ j, A" H! B* \% k4 X. \( b+ A
bool bDest = false,bSrc = false;
U# j" q: I, b! x, N( t for (int i=0;i<MAX_INVENTORY;i++)
+ s! n" [. D$ `* P$ D; ] {# J1 u% W2 J" H q1 w
if (dwSrcId == m_Item.dwId)7 D* ]7 J: g/ @+ Z6 @
{
* }; U0 `8 `# y9 s3 k% `* h: I //id相等 则 改变对应的dest和src/ ]! a0 _* V* s o/ J3 d" O& G
nTmp = m_Item.nIndex;
3 a4 \$ D5 s& p6 s m_Item.nIndex = dest;
/ q8 `6 {+ c+ ~5 X( s/ n9 ` }
+ d' h4 K( b0 J) s( a" Z }2 t$ ~* ?0 l3 ^' J+ X2 A( s% J0 \
//临时数据保存完毕,交换开始* Y4 n( @( K s2 e c4 m3 ^
for (int i=0;i<MAX_INVENTORY;i++)7 D2 c) l# D \2 b5 s8 c
{ f& F1 Z2 `, D$ q
if (dest == m_Item.nIndex)
( _ @ k+ S# r" v# X' @$ C$ [ {
7 G+ w% {- Q/ B1 i: r3 i% o //id相等 则 改变对应的dest和src
1 ]% L2 j' P: u m_Item.nIndex = nTmp;. a, D) {5 B/ }
}
4 e; L5 B0 L( m }
4 D' R$ X, T0 f% n% }. Q}5 ~! U6 T! w. u9 x
};
Y; D3 n. s9 } [& s9 U* |$ z' d-------------------------------------------------------------------------
" Q5 n6 j" i5 d u) P依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )% Y" M5 y% K0 m$ ?2 ]
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
! P7 x! J6 Q, a( K1 S' _7 c; I紧靠其上添加:
" O- ~- f0 {1 Q! I2 G" i- hif( pWndBase == &m_wndMenu ), t( r( b9 P$ y
{2 C- S5 @! w, O
switch( nID )! `% B$ n; d" [/ T, E/ B
{3 R) Y. C: A9 o1 }6 ?
case 2:& {9 T4 B9 w$ t) b' M
{
* G9 z L5 T; e! P1 _! } //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);/ P/ ?, ^# B; `6 l. g1 S: A' c
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
# _$ F4 r6 _) q6 w: k0 u; S {
5 [% P$ f. V# I# J8 m/ V break;
) B5 y2 h% z. r* P0 M7 D" O! h }( U: P& Q! x _$ n, b- D% Y
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
J0 s1 L# _% h: F) s4 E& k8 C {/ g" J# n$ {0 S! F4 A# K7 S
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
9 P( e2 `2 @, y% R if( !pItemElem )
" H4 }2 n: I8 ~$ U# X } continue;! Y) M1 i- e' z) o
if(pItemElem->GetExtra() > 0)9 }0 ^3 I" `& L& a% J7 y+ P
continue;5 ?" _/ A4 [4 {) i9 y( r
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 2 J# _/ ^' B0 l% i; W2 F
continue;
+ j* o j6 G" L" Q5 Z, U1 p if( g_pPlayer->IsUsing( pItemElem ) )
O, O( H9 F9 H; q6 s7 m0 X9 | continue;
' h+ ~1 _$ u$ h, o+ _* c if( pItemElem->IsUndestructable() == TRUE )2 D# f- F. X" O- Y1 `8 t
{( O% s- p4 h. V( V z2 l
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );) q! F8 R) w/ |, \; x: V0 h: Y6 n3 k6 ?
continue;/ F/ i9 S1 M4 ] H/ b
}# Q5 |* @8 `, ]
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
) n+ a5 S5 g2 k9 D }/ T; G# s' d7 i0 k( N$ N; E; t4 ~
break;- `% c% V d& W0 m- Z+ u1 J0 K
}3 a0 a% W( Q3 Y6 B8 d' `
case 1:
" @: n1 T. @# R+ a* G% j Z {* M8 j+ N4 a0 p
//整理背包
0 e- n# U- q3 C$ N //////////////////////////////////////////////////////////////////////////& u* @! o! g8 v, ?2 v
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
/ \" |, @. w' @" p. @0 a" z //////////////////////////////////////////////////////////////////////////
. a; W( A0 a% [$ W4 L$ _+ B, e //////////////////////////////////////////////////////////////////////////
5 I7 M3 b v; |% H, | CInventorySort* pInvSort = new CInventorySort;
& A! @2 u' a } vector <sItem> vItem;: o. A2 b' j# M; j2 u# b' V5 Q- K/ W
vItem.resize(MAX_INVENTORY);//初始化大小
2 G) @: }% ^% Z) [* D+ C //////////////////////////////////////////////////////////////////////////
- J0 n0 P6 B/ L6 Q //填充数据
5 O" o% |1 _( Q: o" {/ ^ for (int i=0;i<MAX_INVENTORY;i++)
0 y/ P9 |1 j7 |6 F+ W G {
( k) m+ _: ?- @, ] CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);. l7 M( N$ e! t. D/ `; N. V
if (!pItemElem)
: e. s/ c0 H( Z0 y% g, ` ?/ ? {
. G, O, T! x: x5 J/ a! b2 r vItem.dwKind2 = 0xffffffff;
+ `7 d7 l( F8 L* D# W' R8 J, X vItem.dwItemId = 0xffffffff;, V5 L/ @) `5 U/ H* d. K4 [& [
vItem.nIndex = i;0 F% w7 b" `: u
}else {$ e9 v7 j+ Q# W: a7 [! }
ItemProp* pProp = pItemElem->GetProp();/ P, `) O$ @. c6 i
vItem.dwKind2 = pProp->dwItemKind2;$ w8 x6 U1 F8 d) ` Y0 h( M F
vItem.dwItemId = pItemElem->m_dwItemId;
+ j* x8 L/ Y; a N/ o vItem.nIndex = i;% J5 Z9 `: y7 D" n. ?
}
+ \9 K/ l: A1 d% z, I //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
7 e. B, j" k6 J/ p8 C }
- f/ U2 m" i. M% x //////////////////////////////////////////////////////////////////////////
( B2 ^- F# U( r( F6 j sort(vItem.begin(),vItem.end());//排序
: t" w Y3 ^6 v1 j# I5 ]9 W& d //////////////////////////////////////////////////////////////////////////
! e; ~8 e1 A- { j //交换
8 q# Y1 d: }7 ? R7 ^; k8 B for (size_t i=0;i<vItem.size();i++)% Z) O/ Y1 ~; V& s5 g5 y0 m
{# {/ O: w' g" H. _" o' f
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
4 w# q8 c5 N' h& E, l; E9 c pInvSort->Add(vItem.nIndex);
. D2 ?5 W: X2 f7 x }
8 [" l8 i7 n' _- K- k* r BYTE nDestPos = 0;
: a2 q& G+ h5 C3 N for (int i=0;i<MAX_INVENTORY;i++)7 W" [- @; D8 K/ P: _* `
{
2 S; U1 C: v: O' _- ]4 j7 o) q CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos); l7 O3 w- ^8 g% Y
if (pItemElem)1 G( h% T4 A# i. q/ w
{
( m' L7 W2 z( j% _/ p6 o5 ? if (IsUsingItem(pItemElem))' P8 J* t9 g3 n: F, J
{1 Y* y' i' x. y; E J
//这个位置无法放1 _* c9 x, N- o. |/ @6 K& i
nDestPos++;( h- f0 j9 G: m, c8 [
}
$ }0 {: n% m* O1 X# ~' n }
( L( u$ h3 p& Z! f2 r BYTE nSrc = pInvSort->GetItemSrc(i);2 Q6 d* O1 S0 [+ f
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
( e( }6 W: }+ _% \3 i- D7 a; L if (pItemElem)% _2 [) X3 e) j4 r0 Y" c0 c
{) r+ r) Z; N1 p2 b4 }
if (IsUsingItem(pItemElem))5 `. i5 V2 |8 }0 K8 L5 y
{ t4 M. I# \- p' [
//这个道具无法移动,跳过$ N; e# D4 ~1 u' Q/ b. G
continue;' M* Y0 K/ S' P4 A) F9 M
}3 Y& R9 m9 Q0 b5 H Y) ?7 m. Q! B
}else{4 L# ^6 D: l! p8 l2 }
//空位置 不用动1 x- W# U7 J+ O3 }5 z ^* [3 U
continue;/ R4 _# S2 K6 G: P9 y7 A) B
}
! L# r8 f- m. B# M //////////////////////////////////////////////////////////////////////////
2 a7 Y# _, \6 ~ //开始移动5 f5 W: p4 C8 j/ a) r3 e
if (nSrc == nDestPos)
2 @6 f+ ?6 o$ U1 _9 \ {
5 O# ^- q$ A" g( P3 }7 A5 z //原地不动' s$ D, B1 l0 |- Q7 [* D
nDestPos++;0 d4 k/ Y* W4 x( x3 R5 ^7 g
continue;4 }8 d: v6 v" s9 M5 [, ?5 r
}
) k& g6 |# w6 r6 ] pInvSort->MoveItem(i,nDestPos);
" K! R* z3 S) P- |$ e g_DPlay.SendMoveItem(0,nSrc,nDestPos);
' w5 a+ q6 M) \' { Sleep(5);% F) i6 p1 |1 F/ A
//Error("移动 - %d->%d",nSrc,nDestPos);* k+ R+ D* l7 `2 o; f4 Q0 r
nDestPos++;
! n5 Q' a1 o0 |" S4 ? V }5 z, F3 z5 F) w2 Q$ u8 N2 i
//取第一个元素的信息
/ L* N8 t% g0 t: W% v/ b9 E* x /*% _9 X, C! {$ v% ^
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)& i( j, k4 x+ {0 b: d- {
{
7 @& {# ^" i. @6 G# _0 d8 h Error("Move - From:%d,To:%d",vItem[0].nIndex,x);$ ]1 C# @' U6 m
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);* u) W. ? W& H% P3 B9 {
} ?: |) N" n2 F8 k
*/
3 Z* g9 d5 s0 K. W* { //////////////////////////////////////////////////////////////////////////2 L# x! l+ G% w
break;5 w" k# Z4 A( t; n2 [( x: o3 K3 a
}
( e% J0 a8 n9 q, w2 ^0 A N ? }
( K! U: v0 ~9 J: D% f. L9 Y}
; u% W0 @2 G5 f5 |$ ]m_wndMenu.SetVisible(FALSE);
) D' d+ I' ?# Q) h# u- R s, x3 T
( l4 u U$ g+ o; p$ c4 W--------------------------------------------------------------------------------------------------------9 L. A! z. D/ L. [
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
P0 b h, s' ? D3 Y2 ?! u{- _& f: c6 {8 Q
BaseMouseCursor();
9 }; W: |8 k r. N4 d8 h; z}- q5 w, ^; Y5 ?- X e; [5 o( q5 U
在其下添加:0 w: D' g4 X9 }- D+ C
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
3 p! a* A/ b! G& j{% A$ d8 `: H5 R' P
m_wndMenu.DeleteAllMenu();( v/ B) F( D# J+ T4 f) r' S
m_wndMenu.CreateMenu(this);1 M# q2 r9 G+ q! v) k
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
1 }1 ~- C# A5 k! K2 G" v+ _
6 _" F* B7 \" g+ q, _ D/ fif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
6 g2 w8 n: R+ G; S, U" r{
4 v. z8 S# k0 v0 ~5 R //P以上级别才可以删除所有道具6 p8 X2 ~; s6 n5 ^5 O
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
9 G# m) [$ x4 `9 _" N" S5 L}3 ~# [4 F+ Z* I. M
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );- s8 E+ |7 P- _; @
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );: |* G ?" v7 `. K# @" v# f
m_wndMenu.SetFocus();$ F( K- a) o0 P! r" Q4 B
}% d9 n [0 n$ d2 }; z1 q
------------------------------------------------------------------------------------------------------------
1 V" H. Z5 f$ ~* e, Y$ J9 \- n+ B*************************! L# I/ W: X5 u/ w* w# z' ?
WndField.h文件( {5 a; H7 L/ d) p
*************************; }, q0 B* k8 z
搜索:BOOL m_bReport;
, T. M1 v2 u: l( \其后添加:
: i8 t$ l' p0 \CWndMenu m_wndMenu;# @9 A+ t0 N* s: P0 V1 O& K
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);2 X+ b) D7 }. p& f& W
其后添加:
% k) A1 a' n) u9 h! O+ f8 _virtual void OnRButtonUp(UINT nFlags, CPoint point);. U9 ^( I: Q9 O' J2 Q0 K7 l( ]* l% U
: t5 G& C2 |' w# D: [
( z- ?9 Q P* q- F( ? |
|