|
|
源文件中_Interface文件夹下WndField.cpp文件
2 u) C$ |$ k6 r; O [搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
" u V& E- @! B1 V; U$ e h4 H4 H) Z& K7 s
struct sItem4 ` N7 D) ~; e B& H S2 k e
{
! }3 d* k9 ?' HDWORD dwId;6 ^2 {; e3 \' W; D4 }1 W# b& }1 `
DWORD dwKind2;" n: t( f1 G2 _/ z5 y9 H
DWORD dwItemId;
! S5 v+ c* m9 L2 |' D9 mBYTE nIndex;: [: H5 S; n a5 W. J
sItem(){7 l% n3 \/ M+ b- x7 B/ D
dwId = dwKind2 = dwItemId = nIndex = 0;% S g3 _5 e0 f/ Y; y. \2 I
}. j' J7 t+ |8 B1 ~1 S
bool operator < (const sItem p2)
5 q# G K8 J0 B' C. Z2 u6 b{
$ ]# i y, C# }5 B) m; O if (dwKind2 == p2.dwKind2)! D% w1 n) a1 y E) C
{, Y4 t4 H4 n% U) c6 i8 d
return dwItemId < p2.dwItemId;: r1 I/ u5 I E ~1 e) Z$ L6 H
}else{, S! N' Z. x9 p* o
return dwKind2 < p2.dwKind2;. w# K) E: o' O/ z( ^: g1 K" h7 j/ r
}
7 t" U4 k3 G8 V* K}
7 u1 }2 s, B4 K8 P};. I' H$ \0 p4 ?1 G1 ^% q7 C
class CInventorySort
. g$ h7 a. Q) H9 S) S$ Z{( i# Y5 I' k3 b5 n/ y4 @
public:
& y0 V. v8 I8 XCInventorySort()
0 t! ^8 e' m& L5 w$ l7 x2 P{
3 `% b/ R _1 e: U H) N7 ^ m_dwPos = 0;
# F9 a+ o4 Y* u9 X# \5 W) N}
: K% v4 r# F! z# K. L) P2 {~CInventorySort(){}
/ F) X7 c0 r" y5 `- sprivate:
. ]5 H5 }: ?" ksItem m_Item[MAX_INVENTORY];//存放排序好的道具信息' y( |, U4 |" \) `- @1 U8 K$ Y
DWORD m_dwPos;
$ C/ Q* j- V5 [, X$ P; Hpublic:
. e7 v0 L$ J8 p; B, u% }7 ?void Add(BYTE nIndex)
& U7 s" l) v& q3 _7 n B{; _" U6 ^: |2 o6 `, [8 h+ ^
if (m_dwPos >= MAX_INVENTORY)
* U/ a$ w* S( s$ y9 m |6 w {
' \. c9 n/ J- R3 H8 i return;0 f M0 Z* N o
}
8 A- g; i9 k$ D0 W m_Item[m_dwPos].nIndex = nIndex;
~ H0 Q+ X: i# {3 y* ` m_Item[m_dwPos].dwId = m_dwPos;
: @% d% Q8 ~ F) Z% O) [. ~ m_dwPos++;
- d: W! n9 V/ |}# T" H- w7 a' e6 ^: L- \9 n4 R
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列2 F+ J( Q, @' Y2 A8 H
{
) l& K* G* D! _4 ~2 c for (int i=0;i<MAX_INVENTORY;i++)% ^; a. O* `% k% `/ `
{
" a0 Y$ i) a0 i$ D& `' ^ if (m_Item.dwId == dwId)3 C+ l2 i: n0 N8 J0 D! k( i' r0 B
{
o2 p$ t$ E# ]/ K9 O2 G5 y- H return m_Item.nIndex;8 E) l, s( c( a& M, @" o
}
) P7 B! ~2 h5 O7 V/ |! X8 M& u }- C, k8 v# X/ b4 J8 U
return 255;
4 F6 L; E$ V/ y3 O7 b* `}/ f- r2 \5 P+ B9 x" ~4 P
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
! m9 j1 B* u5 D; w' q; k{; x* B& f6 @: N1 a
BYTE nTmp = 0;) q4 u6 d5 G( |9 ~7 K8 e
bool bDest = false,bSrc = false;( r3 [; I* W0 @) R3 h
for (int i=0;i<MAX_INVENTORY;i++)
K5 R7 W' W' D4 f& g- B: H {& N* p5 M$ ^. Q+ m6 [5 G
if (dwSrcId == m_Item.dwId)
7 |& n9 r& A, ?9 s( @ {* O2 W6 A( ~& M, k) p
//id相等 则 改变对应的dest和src
6 M# U( t6 _, _5 {. z$ H6 P nTmp = m_Item.nIndex;' N- u' g# ]. ]! _% r8 e
m_Item.nIndex = dest;8 G5 b! ], S! Q" z, F4 L
}, g. } P8 P; F2 Z4 s1 N& s
}
: k2 k$ Z0 E4 E7 g/ | //临时数据保存完毕,交换开始
3 P; I+ x. s9 j) o for (int i=0;i<MAX_INVENTORY;i++)
4 }9 u) M' z, C {
: k( ~+ M' G# {. f if (dest == m_Item.nIndex)5 R& s* H% O! j$ R# B
{
. ?8 D* W) s N d* _ //id相等 则 改变对应的dest和src z' r% y" M- z5 X1 I
m_Item.nIndex = nTmp;
/ s2 y" _: I( V! n/ k }6 ~7 h9 Y! d; U, Q( z u2 E8 i
}
2 G; P" P/ O% l: p3 S}7 m: K7 ]2 D4 d: X( V
};3 z- H+ D i& a. m! o/ @7 G6 p6 m
-------------------------------------------------------------------------
( C! i4 c" m9 A$ m2 U' r$ V; N依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ). d: ^% L/ w% I7 V: q; X! o$ f+ [
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
4 e( \: _6 v/ a; i紧靠其上添加:
' a& I0 L5 Z4 Fif( pWndBase == &m_wndMenu )7 e2 b% L- P6 r. f( f a
{) T. p! i; [* |+ s$ | u( [
switch( nID )
0 R Z3 R# ` I! t! b( S {5 w! a: u& N3 T- T/ P
case 2:6 y3 E, |9 v& I: A& I
{7 m; I, t8 a+ q1 \! Y) T
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);' w4 b6 U# @5 F7 }- f
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))6 v+ n: U4 |" p6 L3 B5 i( i/ i1 r
{* Z( m+ G( M* v1 l5 D1 G9 M
break;
$ U" K6 z& b# g! S. s: b }
2 x$ m! H$ K( m for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
" V) ^5 g- J1 ^! W- w9 a( g& ~ {: O: P5 X3 X* ~* \
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
% S: T$ t: Z$ L if( !pItemElem ). K7 X9 @; u8 q
continue;: t1 m3 L, n7 G: C2 `3 Z# `/ ^
if(pItemElem->GetExtra() > 0)
3 {* o* v4 R. e/ m9 a) Q continue;
* R: s. N N G" N$ M; N( } if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
2 \7 y' e: Y! m' X5 Y, W continue;
: x# ?4 I4 [/ D5 E: Z, M) M5 W if( g_pPlayer->IsUsing( pItemElem ) )
* X. c9 s$ K0 y" \: r" _8 A- x continue;
8 K5 @6 l8 h- y$ {1 K if( pItemElem->IsUndestructable() == TRUE )
2 }) w; A% a/ `; z. \ {3 O8 n' L( M: j5 z) ~- f+ \
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
7 z E9 ~( [3 M& ^% n continue;0 D9 Y( G) J, r, x7 l W
}
8 ^- ~% G1 g5 L! t- R g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
/ }/ w6 y' J) w Z% V& \2 n }
8 i1 W$ L* U. m! j break;
9 n7 Q8 |) x* P4 p8 Y# W+ Z. X }
6 j) g0 v& Q/ u: d* C/ ] case 1:' T# w; x4 s, L/ X/ `5 W. w" P
{% d. N6 B. {0 C2 P' C! U& p
//整理背包
9 x6 s6 Z6 z3 q- k //////////////////////////////////////////////////////////////////////////8 w' C/ X9 X4 C% d$ ^& u5 h
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );% Y, A; ?% g1 i# {6 o5 k! ^/ f
////////////////////////////////////////////////////////////////////////// R& t+ Y4 }3 V3 z' i* D3 `: \
//////////////////////////////////////////////////////////////////////////* ~! v: y. l a# j
CInventorySort* pInvSort = new CInventorySort;8 E+ O# k$ R/ k
vector <sItem> vItem;0 t ^$ [5 w8 e, i
vItem.resize(MAX_INVENTORY);//初始化大小
/ V5 z: `' i) r% `6 J //////////////////////////////////////////////////////////////////////////! ^( k+ m0 A- m% P0 p# r
//填充数据8 [* ?8 c; M* t& }* S/ d( x6 X5 O6 D
for (int i=0;i<MAX_INVENTORY;i++)
9 V$ e6 h0 x" y9 j! P, U. {' H8 | {
: @# T Q# m6 d& k( x CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);4 o) x ?) S3 k1 e; n
if (!pItemElem)
# O" {, f3 q% M7 { {
1 g4 [' Z' F z+ w1 c1 C' L vItem.dwKind2 = 0xffffffff;; X9 {3 P# F/ N# E) Z3 w' r! A0 f
vItem.dwItemId = 0xffffffff;
2 \, V: j% l4 Z# b vItem.nIndex = i;& G; ^/ `- Z: R) Q1 k/ s3 v7 R( h
}else {
; r! e) J; h2 ]; s5 c3 a. P# J ItemProp* pProp = pItemElem->GetProp();- }$ J+ {4 l$ F; o# }& u n' C2 w% [9 ~
vItem.dwKind2 = pProp->dwItemKind2;
* K- H/ n1 G. h$ ^' u vItem.dwItemId = pItemElem->m_dwItemId;: T9 `4 y- H& A+ |& S. j
vItem.nIndex = i;0 K' q# T6 c) I& j
}
# A$ q$ r* a1 x" z. G //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);7 V8 L, q ~, z
}0 g, J! m( v3 T2 E; z: m, I0 N. d
//////////////////////////////////////////////////////////////////////////9 M. x: X( [3 R# N
sort(vItem.begin(),vItem.end());//排序2 S F1 o! z5 t0 R
//////////////////////////////////////////////////////////////////////////; B. K2 T3 ^/ [ d8 a+ R
//交换% E# }) X+ ^+ L0 M' H
for (size_t i=0;i<vItem.size();i++)- C7 }7 `5 j2 _2 m4 t8 Y, Y `, y
{% O( M U& B) y1 g
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);3 Z6 ^3 P2 F2 t) c6 u6 v) I
pInvSort->Add(vItem.nIndex);
0 b& m1 ?. ^4 `# l- v% t }. L9 _( R5 T @; j! x
BYTE nDestPos = 0;* o' h$ p) u3 \# |7 h! l
for (int i=0;i<MAX_INVENTORY;i++)
, K" i1 T/ t1 | Z8 Q* | {' g( c9 s8 D% t3 F/ \& _7 a) X
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);( H8 @( _ O* {2 I
if (pItemElem)
2 b' w" X: U& }7 G# S. W: s0 v6 i. _ {* P6 P) [5 x3 q; G# I
if (IsUsingItem(pItemElem)). h c9 l6 s4 B+ q9 r6 |1 _
{9 A! [) A" \1 T
//这个位置无法放! D5 d: E$ C" V; D) N$ w* ~
nDestPos++; \! H) R! C- D$ f+ i# _+ T3 @
}, G+ ?, D5 D6 t3 G5 h5 @0 O7 g
}
n: B" H5 Z. t BYTE nSrc = pInvSort->GetItemSrc(i);% a$ M% }/ ^: w! X3 b
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
+ f3 d! j1 I1 P' K9 e if (pItemElem)
' v: S l5 w1 V/ p {
3 k* k5 h. F/ u1 G4 z h if (IsUsingItem(pItemElem))
( _& [) a7 t9 c$ K+ M1 {& c {$ n. `2 J/ Z- o x2 u9 z1 A
//这个道具无法移动,跳过 u8 p+ t7 P6 }& z& p( O1 X' ^
continue;
7 L+ p, a2 n( X2 ~; P }, t+ \1 J/ S" E s4 |+ C
}else{
4 t/ _+ k* H* C+ x. M6 F' e //空位置 不用动
* ?, i1 ?- Y" |8 u continue;
; i( X9 a* e5 S7 Y/ {+ \ }0 l% B7 t9 [2 X3 _; k; r5 Y
//////////////////////////////////////////////////////////////////////////
' ^7 d, z, k8 p0 `5 b+ e //开始移动
7 Q5 A4 `* R" U3 @1 @5 y0 V, P) A if (nSrc == nDestPos)
* E- e+ {' g) R/ l0 u* b/ L+ H {/ z* @( e# n$ p5 C# c6 w4 h
//原地不动
0 ?) w$ @! p4 D" ] nDestPos++;
3 `+ |) V( L8 y, \" D' i continue;
# p2 Y% }( x8 s" ^! v }: ~( o8 C% X2 j' s/ a8 V, L# w
pInvSort->MoveItem(i,nDestPos);
e# i; X) R4 b$ b g_DPlay.SendMoveItem(0,nSrc,nDestPos);9 m1 i; b; l& Q K
Sleep(5);3 K& I! a' L/ p5 W; @
//Error("移动 - %d->%d",nSrc,nDestPos);
6 o4 J+ s' T$ }; Y nDestPos++;
/ q" I2 S3 W2 ?8 v5 b+ f7 g' |" u% G }) U" p8 U' _9 t0 P6 c, Y ?& ?
//取第一个元素的信息
6 ]) g* K* C- t' x /*
4 @" U3 z6 q8 ], D if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)0 Y* s. q3 C7 s/ v4 y, I' y
{+ ]! N* q+ m* D' G' f; F0 @
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
! g9 C: ?' X$ j3 b0 v g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
2 E6 o( s! ~: U0 R8 _ }
5 c3 r7 V3 S U; r8 J' Y [' Y */
8 `5 Q" B% }4 c$ b0 @ //////////////////////////////////////////////////////////////////////////9 H' H8 Y v E0 G6 z X8 o
break;( w; T( h! m6 }; M2 J
}6 y4 X) \$ D$ ^8 N* O( |
}
2 ]0 Y: d1 R, l2 p9 q2 P) I}
3 p7 ]9 y4 N1 j% fm_wndMenu.SetVisible(FALSE);
4 C/ ]& D) A% d
$ S+ W, S2 e+ X: N/ Z6 l0 W--------------------------------------------------------------------------------------------------------
+ h8 R+ h$ @$ M9 W& S! [) }! |搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)+ t4 j/ Q5 _1 H# O, T4 i- [
{/ S' R0 P4 Q, C9 y! B! r
BaseMouseCursor();
. M" n3 @) n$ a' z g# j}8 j$ W/ r7 p) t6 R( E ^
在其下添加:, E( Z; z. Q: {& _" }" \
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)- N7 ~- A4 x) Y5 n) K
{1 @' z1 L1 ?. _, D2 ~& f
m_wndMenu.DeleteAllMenu();# l8 m& A* i2 X4 C) }6 e/ m
m_wndMenu.CreateMenu(this);
8 b9 P9 n. n. u' c* X( ?& zm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");9 Q# k/ V& K. N3 p2 [
% ^- I8 r" t* c- p' J I, Qif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
# [* ~9 K, u, j: x( E! I$ j{
+ h; g/ T8 I; T: H3 K. h //P以上级别才可以删除所有道具
L+ q# r) \ m7 s3 O* Q) I m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
) F9 m( t& d. E1 |; C D}1 ^: D& G3 E- w8 M+ W9 q( K) g9 ^1 K
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );. Z7 ~0 n" O4 c9 w ?
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );* r- V' j" V/ {% d6 ]5 T( R* J; N
m_wndMenu.SetFocus();, ^+ i3 q! Q+ @) _% V
}( c% L7 ]6 O! V/ D- v
------------------------------------------------------------------------------------------------------------3 y' @% Z k' t% f8 q. S2 N" K/ M
*************************
; C5 ] i c. B; p3 c( V$ WWndField.h文件7 N A* o9 m( M1 W& x7 B; q' P+ H, B
*************************
+ D' H9 r. Z/ b T搜索:BOOL m_bReport;& {; G% J& M% ?* Z
其后添加:2 P; ?. O" O8 D' z3 |% E
CWndMenu m_wndMenu;
' q; c) }# _4 O/ m! n+ V6 e搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
7 b: k, u& w+ }* i其后添加:
; H' f9 I& A4 m9 Y2 Q# s A6 W2 e% Tvirtual void OnRButtonUp(UINT nFlags, CPoint point);) B; ?# J; }+ ?) t7 Z* D
* x K. l0 w1 E, y
+ C* o7 s, p) x0 u' w; U |
|