|
|
源文件中_Interface文件夹下WndField.cpp文件/ t' U/ C) _7 n
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
# s- I# ^7 t" z( _8 Y: s
4 s7 s. [+ R- r& o6 N% X# Astruct sItem
; c+ ^& y# m/ e{8 T5 W8 a a; I9 S" q; |: `$ o
DWORD dwId;
" E0 p0 T9 l) [) k! CDWORD dwKind2;
5 n$ y/ [; ^6 ^: k7 fDWORD dwItemId;
$ e. s* |3 O* R9 v8 o- M* h+ xBYTE nIndex;) Q8 C7 m( @; H& e# v+ Y6 E4 l
sItem(){
+ R& m, f, ^5 U" x dwId = dwKind2 = dwItemId = nIndex = 0;# S2 n/ M* F$ j
}
% M& z( d- p$ h; [5 \5 pbool operator < (const sItem p2)! [' e, P E+ B* \% @1 @
{
/ ~7 _0 }5 t9 A* s$ _2 S if (dwKind2 == p2.dwKind2)
3 _4 S# k' i7 W {
( t: }5 r* X6 {1 v8 I return dwItemId < p2.dwItemId;
4 l5 O+ W& N0 Y; M, n" ` }else{8 q* V: f9 K' [ ?
return dwKind2 < p2.dwKind2;
! [+ U" ^" V O; i' }% _ }
, m( D( S: C( V+ V! i8 z+ d6 v: I}
/ h J0 N" r* J, a};- l+ n% y# l+ Z+ P% u1 L# f7 b! L4 `! Y
class CInventorySort: J$ a* B9 [/ y0 @
{! t9 u- I, H a$ [- y n: V8 P) I
public:
d9 L+ |: ^+ {" G) lCInventorySort()! u$ |1 M, n# m; j" H7 D
{& A, P" I3 V3 ?' q5 @9 u# c
m_dwPos = 0;. [9 t2 I, C5 y3 R+ [5 |$ z: X
}* u( U( m" o+ \* {& S, ^9 w$ K/ j
~CInventorySort(){}
8 N* o. \/ U1 L+ ^ U7 Zprivate:* E3 N/ q O/ m ^
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
6 {0 _' l, t1 [- a3 WDWORD m_dwPos;
" w3 Q/ e( J! X3 a9 | zpublic:
. s5 N/ d9 B r8 q. @void Add(BYTE nIndex)
2 \. P. R( c- I0 j+ S7 `{
" e* t- t5 F6 w5 [* t/ v) z if (m_dwPos >= MAX_INVENTORY)
- O+ b. C$ p m0 h: k% _0 _/ D {
. c( \: h) r: U* V/ x+ }9 {8 Y" J return;
: q* u- q5 G5 Z% X$ Q }
2 M( \: Z5 I" s3 p m_Item[m_dwPos].nIndex = nIndex;
6 h0 J, \& A! e7 }' k9 ~ m_Item[m_dwPos].dwId = m_dwPos;4 ?: G; P' f3 p! i" D+ m
m_dwPos++;6 P& o' d0 E/ O& ]0 @
}
# U( Q+ F9 V1 F5 {& r3 x: ]2 v+ CBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
7 q! [/ [/ V* `! I2 E2 r, o{2 y( ?- d& W5 k- N" l: w
for (int i=0;i<MAX_INVENTORY;i++)6 G% ?1 p# Z4 a1 R! r% b
{# Z" P+ z# P- \) o; E9 x$ B* T
if (m_Item.dwId == dwId)
/ Z# |( f% k5 @) h0 T {1 R! e; y" b( Z
return m_Item.nIndex;
. f" a- z; e3 G- m9 @ }6 B- i3 X! k; i( a8 J; d
}
( U- Q6 e& F: q# |: p return 255;
9 i$ g" U4 t1 W6 R! @* x- f9 B4 u}7 N4 H& [ J, N# n1 M, V* V
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
% u2 t3 r; ~7 m6 `( l' s. j{" X+ _3 b" y# X; `! ~+ ~$ ^
BYTE nTmp = 0;
7 S1 G3 H4 V5 T, t; S, ~ bool bDest = false,bSrc = false;
$ U& O& `3 B3 u7 S7 I" M for (int i=0;i<MAX_INVENTORY;i++)
. [6 J1 Y& m! X6 z* {/ r) \- ~ {
: o7 |3 h. [% \/ H+ I L0 B; v) k9 L if (dwSrcId == m_Item.dwId)
% e% c5 Y8 a9 {( e+ u0 x2 h {9 S' I: z; L! x8 q0 V+ j. V
//id相等 则 改变对应的dest和src0 @1 V' p6 l+ t9 e+ a6 M+ \! C4 j
nTmp = m_Item.nIndex;
* F: ?# O- V2 z2 o' E+ Z0 | m_Item.nIndex = dest;
7 o' y+ { X$ Z) C: m( \ }
) `) j2 `9 J% w9 g4 [% i. b }8 d) s8 u1 a+ K
//临时数据保存完毕,交换开始 \, S' y& L% M ^, q4 p
for (int i=0;i<MAX_INVENTORY;i++)
& r8 H( X" z7 h' Q) |" i$ k: O {
% o. J* {; ]1 e! h if (dest == m_Item.nIndex)
' q" r4 b/ [; c* E {
t! R8 Q( ]0 A4 `1 d2 y //id相等 则 改变对应的dest和src
- T" d+ e0 \6 [" U( Q6 A, G* Q: O m_Item.nIndex = nTmp;7 Z) M$ G1 X9 M
}$ Y" l7 P1 W g/ ]2 C
}* x% i( R8 N( ]1 P
}
. V% v; o' B9 u1 k6 R};
4 r, }( a- Q+ E6 W' Z6 H t8 G4 J-------------------------------------------------------------------------
+ {5 H/ L; z0 ~; w1 s依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )0 R: f) B4 G4 O' m, ?# c( V9 Q
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
' Y* a/ y: v( C, |紧靠其上添加:
6 d( e W0 f+ B# ]/ nif( pWndBase == &m_wndMenu )
+ d4 _; Z5 W5 K1 ^{
! E! b7 k7 q E4 r, Q switch( nID )
7 D: O9 g/ Y8 z* b. F2 x0 t {
$ N) m$ x1 E; Z- w( D4 I case 2:
& l5 S- R! h: W) s( }; P3 V: l {
+ a5 \4 l' R+ ? //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
6 h; |- o' V1 u9 k$ J$ Q, u if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))" L5 n$ A" x7 u+ L
{' @4 Y; @' h2 e, _
break;
" N. x7 c% j6 G: H# F }
7 g1 }: X+ x" g* S- Q for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
% q, f, f: @' C. ^& N5 T& [! q {
0 r7 o! k6 p1 B0 ] CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
" C3 B4 {, ^+ c7 t7 b if( !pItemElem )
: ^1 `% O1 _) B3 r. ` continue;( h( w5 _* Z8 s) k
if(pItemElem->GetExtra() > 0)
$ p/ V6 {3 e+ N7 q+ S continue;
! {, S9 h7 @: _8 Y! G- | if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
( l8 Q: _$ v3 s continue;
1 u( i. O9 F7 e7 u& L if( g_pPlayer->IsUsing( pItemElem ) )
6 X# S4 f+ \% U6 O continue;5 ~5 [9 ^! t( r+ H, h% {- d" r9 f
if( pItemElem->IsUndestructable() == TRUE )
5 ^1 H) c8 g7 x3 [2 U {
0 m( p. Y& v( K2 i6 |/ S g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
- k/ q' } U! K1 k5 m& l1 F continue;
3 h- \5 G+ r' o$ n- J* D }! z: A/ f$ t1 |; b+ h. F
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
' a& E/ y- ?, V' s }
+ A4 {' a5 _& v ~6 F# w: E break;
4 A, ?, j" J- {' d `* ]' w }
9 n9 l$ D8 v: z1 x case 1:9 P- [, Y0 F# f& z- ^
{7 J" L* j+ O, q. c; p9 p
//整理背包0 ]" z( S. a8 @% [
//////////////////////////////////////////////////////////////////////////0 T7 x1 O7 n P5 G- I$ F
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
& A, f, s' g8 g0 w //////////////////////////////////////////////////////////////////////////
8 D4 v, f' S/ X7 g5 S //////////////////////////////////////////////////////////////////////////# v' k5 K6 t; s1 O5 R; U
CInventorySort* pInvSort = new CInventorySort;* b4 r/ u; Q: _
vector <sItem> vItem;8 t: h- T. R/ `" J8 \! a( H
vItem.resize(MAX_INVENTORY);//初始化大小
: W* H4 Y; q1 e" M; g) [9 m //////////////////////////////////////////////////////////////////////////* k ?) O/ X# ]/ u2 ^* q1 e" c |
//填充数据4 i" i) p! Q; o- G9 Y* F/ B
for (int i=0;i<MAX_INVENTORY;i++). o5 I( H$ K3 w0 H- i" ?
{( s% B w( O' x. F7 h A: q
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
) F( e# J0 O1 D; w if (!pItemElem)
: m9 s o& R3 m9 @- @- H {
. x1 @. d4 F. {: m. w0 n7 s% [, \ vItem.dwKind2 = 0xffffffff;( G3 `5 C6 {$ u, t! K
vItem.dwItemId = 0xffffffff;" Q3 P, }& G6 {! r: |* {7 N8 \9 U0 K
vItem.nIndex = i;% w# E; R. l' p0 p* a
}else {
5 i! L8 Y; k c; I- x, B6 W ItemProp* pProp = pItemElem->GetProp();
* l9 j' F4 l" t, v1 e2 M vItem.dwKind2 = pProp->dwItemKind2;8 a- r7 Z3 e+ a+ r/ B4 C
vItem.dwItemId = pItemElem->m_dwItemId;
# P0 t9 C2 t' D vItem.nIndex = i;" s! j& s- {- h* v
}
0 x0 M* g0 d! y: J ~' ] //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);9 X& N: y, V7 q x5 S
}
, v2 l( a4 L! x //////////////////////////////////////////////////////////////////////////
9 b3 r3 y7 q+ e4 A sort(vItem.begin(),vItem.end());//排序
" ~6 d* A6 `# U* Z E //////////////////////////////////////////////////////////////////////////" R0 ^* F; [# D! k+ f3 E
//交换7 i) }( `2 w/ o; G9 E6 G+ V# `
for (size_t i=0;i<vItem.size();i++)& V9 m7 H' ~$ Z U2 @' m
{3 B! X9 c2 i& L/ C5 {& }
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
$ l1 x% S/ M5 q6 r# D" W' w# A pInvSort->Add(vItem.nIndex);
C5 K8 T$ x$ U6 y# F$ N }
: N. K9 ~/ u: l. u U3 m" P BYTE nDestPos = 0;
' B, K$ r1 z$ h9 y7 n7 f for (int i=0;i<MAX_INVENTORY;i++)
8 Q( i) o( C# H! q% Y {+ K4 t( ^( y6 Q0 p/ G4 s6 i& v) E- w
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
0 Z4 z. _2 y X- R& W if (pItemElem)
0 b- C @: ^" g$ \$ }$ L {6 E G) S9 B0 M Q) h. z
if (IsUsingItem(pItemElem))& T3 ^: ?: H9 | F
{" ^' T n# u7 M# z* w, q" t
//这个位置无法放# q, a5 o# U5 j# t# F
nDestPos++;
& a. p1 V% E$ x. }( j }
2 g& U6 g+ S9 _/ ^, r7 w- w }
" x6 E( F% m3 z0 N6 Z* `& s BYTE nSrc = pInvSort->GetItemSrc(i);6 C1 W# J6 Q) Y* j' M
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);3 j' u& h' R3 F
if (pItemElem)2 \6 W ~, |$ c9 o4 f
{
# H7 a/ L3 I' } if (IsUsingItem(pItemElem))6 F. H5 C5 [' q5 M; T1 `! ^# Z3 b
{
6 a$ u# |; X( f% U+ A8 t+ K8 h4 Y //这个道具无法移动,跳过
/ C/ @! R( ?* _% `8 u continue;
( n" x M1 W2 V; o* l/ s& e }- L) k3 _/ t) H( M, l6 O
}else{2 p2 t% a x* `0 M7 @1 ^% I
//空位置 不用动8 x# a) `4 F2 v+ J& P& B: Z
continue;
) S! s, Z0 g$ F. o }1 Z& |- `4 J4 ?& u
//////////////////////////////////////////////////////////////////////////" @5 U/ e6 u2 P, |: \( E
//开始移动
( W* c" U: y0 c1 v' @ if (nSrc == nDestPos)9 J3 d9 k( ^: t0 w
{
1 z- }& o2 g; m //原地不动
+ ]3 y4 F# }! v, v nDestPos++;
& z; W* f2 [/ Y/ n5 ^- R$ V* I9 A continue;6 Q( U9 [: Y9 |; ~" k
}
" T, C; D2 u9 k$ e, v% q& R pInvSort->MoveItem(i,nDestPos);
$ @2 h3 V! N% B/ f8 b g_DPlay.SendMoveItem(0,nSrc,nDestPos);
1 n( O& Y$ Q& m* F" o" [/ I% S Sleep(5);
* E. M' V4 @( ~) D //Error("移动 - %d->%d",nSrc,nDestPos);6 t% x) Z. y/ ^/ [7 o. F
nDestPos++;9 E7 V% }" w, f0 A& \5 m
}# i' W4 u3 \" z, x3 G b( h0 Z
//取第一个元素的信息8 t, d1 h5 f. x, F p1 {& W
/*
: `+ @! M+ s" \ q7 I; J, b; | if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
- b3 v9 r( l( y5 G {
/ ]) ?+ Q. m2 z+ G) _; m Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
# @3 T' c9 I' {* w! r g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);. o" |+ Z ~9 A7 b# n- [ }+ K9 C2 M' K
}
, B$ i, s6 J; l0 D& Q */
" A0 f' g; H" H) M6 K( O //////////////////////////////////////////////////////////////////////////, \* k& F& k1 t5 D; y
break;
& K+ S$ S% b) \. O }
) t0 k# w5 m; P2 A } " f7 \, {; G* F) D. b2 ]( t* H
}
- U: x: F+ v, U dm_wndMenu.SetVisible(FALSE);# }8 ~0 M8 H' Q5 P- M2 E
, r* m0 c9 D$ g1 b, j--------------------------------------------------------------------------------------------------------
) g0 W% g% \2 @, X搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)( A$ Y% P8 h6 r8 ^4 k8 H4 N
{
8 Z( `0 h; p) z* dBaseMouseCursor();
, r6 _1 b4 N8 Q) M7 b- s# V}
+ H9 a* V5 }( N1 W' j. X1 ^在其下添加:8 h- o3 j: }5 a7 Y( l/ K
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point): B4 ?9 O+ o' \( e! p. ?
{8 V+ y" n8 U) s3 }1 S5 _$ n
m_wndMenu.DeleteAllMenu();
; z. M$ P, j; Q8 n, ? `8 Jm_wndMenu.CreateMenu(this);
: H& O! w! U3 _( G/ Xm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");) `' }, f6 K8 y" N8 F
2 W& k4 P+ B5 E. P, b. gif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))6 [3 o( K! p3 n+ D
{
: {6 Y" z8 B7 t* a+ U //P以上级别才可以删除所有道具
8 M5 l& K1 J: k6 p, P7 m' [. D m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");3 P. g$ } B9 X. _: G4 G7 x
}
& D Y+ ]+ Q9 H+ G7 s' ]m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
! l+ l3 m6 [: M$ x$ x) ]m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );' M1 F. L: c# |) v
m_wndMenu.SetFocus();
* |1 J0 n c. P/ Z5 r}
8 g- ^4 T- F1 s$ x7 c9 r: w8 J------------------------------------------------------------------------------------------------------------% z% T7 ^# k( V. w% ~& l6 _3 L
*************************
8 E: M2 A; ?' z: [. t9 uWndField.h文件
( `1 S6 k: ]$ n S5 {- D) u*************************4 p% n4 ~( j; a# Y: ^& \& s+ b- f
搜索:BOOL m_bReport;
8 G- X5 K& x; P$ } q' l其后添加:
& b* j+ p9 C5 C" A& t0 d k2 Z% hCWndMenu m_wndMenu;
4 l. ~6 t4 M$ Z搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);! |$ h2 _) i, E& T1 s
其后添加:5 N4 C- O8 l0 u7 }$ g
virtual void OnRButtonUp(UINT nFlags, CPoint point);( c- F2 J1 b: S9 X; K
" y0 @9 I# e; u9 k/ o4 R' c1 g/ O9 n" x: ^; O( F# Y! b
|
|