|
|
源文件中_Interface文件夹下WndField.cpp文件/ \% W; m4 _7 L$ s8 y& [) s
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
, n" r1 a8 @1 t0 i/ P9 @; t* C, G& P$ x) V. p5 S! a
struct sItem
. W. u$ U R* W" @; w1 s) a& s4 M{
: ?; x: M! |2 R1 o$ C) x: {- D9 J/ l8 WDWORD dwId;
" N$ O8 s9 d$ f' ~) h, v8 t0 jDWORD dwKind2;6 c/ Z$ P! r/ W, a0 @& I1 q
DWORD dwItemId;
* h0 i6 q/ X5 B9 U! q t4 N- BBYTE nIndex;
8 ~$ {( w2 b2 g. V3 K+ i) lsItem(){* M4 u8 T$ p/ Z/ s' N9 ?
dwId = dwKind2 = dwItemId = nIndex = 0;4 H" G4 ^0 e; O0 p) p5 ~* j
}3 I8 ?: \- p" O
bool operator < (const sItem p2)
, `8 w9 d9 k3 ]7 M) O7 J5 W{
+ F6 b6 ? i: N* d8 ]! y) ` if (dwKind2 == p2.dwKind2)
& N3 `6 k8 g1 n* K. _' } {5 o5 w9 X/ M, W
return dwItemId < p2.dwItemId;
# } r+ q+ S* K4 S4 i$ W }else{# X: s6 p* l4 x* B
return dwKind2 < p2.dwKind2;
; S( ?3 Q8 k+ z; c% } }
2 o; K+ O9 X. q% x$ f8 [# U' L2 M. A}) U, c( I% Q, L$ W( X! V5 [
};
( m; o g3 \, R7 c& ~+ R, `6 Cclass CInventorySort
5 P* Q: A( ~$ x0 g; \{2 N9 U% X) r) b0 g- [( ^
public:
% G7 d6 d/ I( rCInventorySort()
, J. Z! Z% K8 h' B8 P; I4 j: o{
$ V1 V! k, f8 G C1 O. r9 e. F! i; z m_dwPos = 0;
0 V/ a( N* G3 M6 M6 `6 f}3 Q2 [; E( F) v6 v
~CInventorySort(){}
0 B: I' Q) |/ tprivate:
) a6 ]7 Q1 w& ]sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
7 N* g }2 e0 mDWORD m_dwPos; ]% l5 ^1 k6 @' \
public:4 I4 a' x4 j: x% @+ f$ `( ^' Y
void Add(BYTE nIndex)% V" [+ ]) @6 _- W
{0 h/ C/ i% |' K" c9 q
if (m_dwPos >= MAX_INVENTORY)
% `" ^5 U6 V' W {: u0 `3 {0 g1 P) O0 A
return;) g# u" Q2 Y- s5 \
}
! w. I# Q' K! X! J8 D m_Item[m_dwPos].nIndex = nIndex;
* I, \7 \4 j( T& I6 [6 z# r m_Item[m_dwPos].dwId = m_dwPos;
5 a$ n8 ]/ l: E/ g [ m_dwPos++;& ^; r$ ~+ s) A: x
}
3 I, Q8 W- B* B0 Y5 ]BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
2 [( Y3 Z. c" ~% u{
) \8 m U( O6 H8 C8 _7 k, q! F$ b8 s for (int i=0;i<MAX_INVENTORY;i++)
4 m7 [ b v/ o/ I8 y2 t {
5 M, N( I. D3 {" W% j/ _, F if (m_Item.dwId == dwId)9 o/ C0 [, w) b1 V, y
{2 x7 v( k8 r) V6 f2 ~4 \# `
return m_Item.nIndex;
H+ Z/ ~( |1 ?9 g5 j0 L5 N4 Q2 ~ }
3 B" j: {7 Q; H4 a: i: ?8 x2 ~9 W, y }
& k2 J- g0 ~% E* j2 \/ _* x; N9 ` return 255;
4 _- c) e$ d( m6 b2 T7 ?2 x}
. r0 `3 a4 W( ?0 N: lvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
J0 R4 l' z) Q) r5 g7 Y{
' u. v# O9 ^1 [* m- z BYTE nTmp = 0;! D0 G+ U3 s) J4 S: m
bool bDest = false,bSrc = false;
/ O" z! k* t5 v! |0 x4 i for (int i=0;i<MAX_INVENTORY;i++)
" q; \0 @. f7 m- G3 n9 ? {3 C. g: [5 w) ]6 _2 H7 w4 i+ Q; o
if (dwSrcId == m_Item.dwId) V" K+ P R/ u' A! b4 P+ P
{9 s- K5 q3 p* T6 m
//id相等 则 改变对应的dest和src
+ O, U, B) S# S. y nTmp = m_Item.nIndex;0 s, L! v/ P4 B9 m
m_Item.nIndex = dest;* ?+ J. I( S; B. }- ]2 i
}
- o' |1 f0 R: B) r$ C4 O3 b3 z' { }
7 d' I% I7 h" A/ t9 c6 b# K) t //临时数据保存完毕,交换开始
1 T# `& q; r$ T% k for (int i=0;i<MAX_INVENTORY;i++)$ N' v. ]4 w9 h8 S7 ?
{
7 M) l" a4 {' E/ [7 M if (dest == m_Item.nIndex)
4 ?$ Y: }6 G" ], z, d* t$ N, P {+ @( }0 J+ w' n6 l& m$ o7 ?! _) S
//id相等 则 改变对应的dest和src
4 h! l/ | Y: m2 |- a4 ` m_Item.nIndex = nTmp;
& b1 p) A8 }& ^, A8 P" m$ g }
- u0 [$ E% L. z2 m }* d( N& o& K$ j8 V! l E
}
2 |* M; ]/ p X( R};6 e' i# z$ N# h6 ?$ A
-------------------------------------------------------------------------
; L/ q, S \3 s依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
W1 k" D0 X! N搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
$ o: V; C2 \/ T6 |; H1 _6 ~紧靠其上添加:
& _' q2 N- Z" V: Dif( pWndBase == &m_wndMenu )
9 N [ A; l: F0 V+ j' v{
. O/ @: k4 @+ [( l switch( nID )
; r7 z' `, E6 G+ N: I" S {$ U2 m) v+ y5 r C3 X( P% d
case 2:
* q( i/ K% h% w4 V {
9 r' F& n' {4 N7 t/ d9 K7 A //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);: g1 _9 P: q9 _) L! c. O# e2 F
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))* j. X% V+ v4 a$ u M$ C$ d$ f& p" ]
{
1 ^+ Z! r$ P) ]# {8 K( t break;
& U( H' E% F' E& t }
! Z& K5 l$ I8 P" t for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)1 G5 m, m/ p1 b. G* m4 t
{
. E3 R- Q5 D& E* B- a. T8 e CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);* p* N: Q6 T0 Q6 J9 @
if( !pItemElem )$ b B4 Y. n- X
continue;
* |$ J* K; Y. L( Z7 H if(pItemElem->GetExtra() > 0)0 z/ w0 T9 m2 P
continue;. w q H: P: o( a \
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
7 r, v# _3 E, Q( O+ u continue;" f0 \1 e, f1 S& y( u
if( g_pPlayer->IsUsing( pItemElem ) )
6 v6 z1 f% M" R2 P continue;
3 ^5 v' Y" _7 ^8 K if( pItemElem->IsUndestructable() == TRUE )
1 N Y8 p1 e1 g3 g: `; \0 @0 ~" l {
6 i" w" F7 C) S8 Z3 l g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
( [* O9 h9 W) g' P continue;
m% h/ v0 }4 q% e# M5 w }
9 z; J' j5 w& B1 |# h: W4 X g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
3 E' q# w% P( m3 Y2 A' I. K }
# P/ y) X) A; t7 T" Z: Y7 ~2 @9 M break;
+ n: @5 O' a) L( L0 O' y }$ D D$ ?! p2 z* p, N
case 1:
# }+ _% D" P$ [$ W1 ^$ y {
: C5 A, j' E; K2 p6 J/ n //整理背包% J+ N9 r0 r! a
//////////////////////////////////////////////////////////////////////////4 A* l, \& w% g( T+ C+ ]
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
5 G. z' N k0 p: y, b7 V2 a/ v //////////////////////////////////////////////////////////////////////////
% y+ m0 Y$ E. o //////////////////////////////////////////////////////////////////////////( F. m+ W. Z/ ^. v+ R
CInventorySort* pInvSort = new CInventorySort;
9 Z+ x/ Q/ F3 Q( ^+ m# { vector <sItem> vItem;
9 [5 Y$ c( Y; ^/ K k vItem.resize(MAX_INVENTORY);//初始化大小
9 b2 z1 q) }+ L" a# j M //////////////////////////////////////////////////////////////////////////- G {# O8 z8 z7 o0 [
//填充数据
# W. v; h$ p* |6 M4 `; x8 h% _ for (int i=0;i<MAX_INVENTORY;i++)" r: @3 w1 W$ t
{# r+ W/ f1 E a2 O- `2 h
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);7 t2 m& w4 U6 Z$ T' ^5 H
if (!pItemElem) o1 ?/ O: f- S( o0 l8 n
{
/ P5 U W& z; w, p/ x- ~; t vItem.dwKind2 = 0xffffffff;4 r' h: b" ]2 a5 f0 d- F) O
vItem.dwItemId = 0xffffffff; @4 [" [/ `/ M1 W
vItem.nIndex = i;% P4 p ]8 D6 L
}else {6 ^) R5 }6 x* u- e1 {
ItemProp* pProp = pItemElem->GetProp();: T1 M$ x3 E( p. b H
vItem.dwKind2 = pProp->dwItemKind2;
; b/ A4 t9 c* J" b8 H vItem.dwItemId = pItemElem->m_dwItemId;
- g0 M. j* F" }+ n( N4 l vItem.nIndex = i;
- P0 B4 u6 H) U5 z0 k5 ^$ x: z3 J }
4 \0 f4 ~( K* Y3 ]! x! @5 G //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);/ q$ H4 T; }- Y% o9 K' D
}
: S4 T: _9 r( K //////////////////////////////////////////////////////////////////////////9 X2 [" I& s& o, e6 k
sort(vItem.begin(),vItem.end());//排序
1 i) I, \# ^, |+ U+ _3 { //////////////////////////////////////////////////////////////////////////
1 t' _; p) k, ~1 v) u //交换
* k* A& E' o( s- x for (size_t i=0;i<vItem.size();i++)
/ M' C: q: b ^; q' H {
! c2 ~5 `6 ^7 @# F //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);4 O. R; }( o9 v( F* L
pInvSort->Add(vItem.nIndex);
1 a! M1 a' d0 g }0 w6 a/ C1 F4 h' y' H* k
BYTE nDestPos = 0;3 F" p% P+ C+ M" y% C, F& B" o1 ^
for (int i=0;i<MAX_INVENTORY;i++): d4 ~$ b6 f) Q2 R* u# X q
{ N4 O4 R* g" N" p5 I
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
9 W0 E, m2 \: [4 K9 W8 X if (pItemElem)
, {" ~! W/ \: o+ ] {2 p8 p- ~2 d* U% j
if (IsUsingItem(pItemElem))
) O8 w/ d# T7 G' j4 Z6 _) s: P$ F {* ^# z5 w- P8 h* L) ~
//这个位置无法放
( \+ P1 C# ~( b+ R6 q1 g nDestPos++;
7 v1 x% J# X( [ }
: `6 a/ G' g# M9 d# B: g2 c# } }
' E% g5 u1 l3 L BYTE nSrc = pInvSort->GetItemSrc(i);
5 j5 K$ w* J$ G% v. s* I* ]$ c% R pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
: u; x. J- f; A7 i- N7 m if (pItemElem)
! ~; P2 a0 ]+ T* q/ Z' S6 }9 F' w* Q' @ {
. d( h' D7 O" a# W if (IsUsingItem(pItemElem))
$ N8 C+ z- }; i' _& L {
9 H( \: u g0 l1 s8 p //这个道具无法移动,跳过0 ^* @0 N* F0 G" P& r. L
continue;: b( F+ ~" s5 ^- V
}
. ~$ n: I% i4 \: ]+ | }else{
( Q0 y8 {" R: r2 Y. J% ` //空位置 不用动& Q' u# E* H5 n3 \0 ~4 x/ e: V
continue;
# N# L- ?0 U4 h6 @ }5 g# n7 O3 _$ q6 f: P4 y
//////////////////////////////////////////////////////////////////////////
$ j$ w0 c' w5 a( `9 H* O' o9 f //开始移动
/ o6 ~6 m" [5 L& @1 Y if (nSrc == nDestPos)
6 e3 F0 \: g& F9 l- i1 u# m {) f, Z! d3 b" o8 {
//原地不动) z% Q1 Z0 O6 [9 T
nDestPos++;
% b5 k. ?0 A6 \. `7 g7 n( k/ b continue;3 P' M" X- Q3 \. g" W+ _
}
" F$ A- T" ^: n) _/ i pInvSort->MoveItem(i,nDestPos);. p8 s3 I* Y4 Z2 Q* z
g_DPlay.SendMoveItem(0,nSrc,nDestPos);7 ^, Z3 c4 e$ g1 Q
Sleep(5);
8 V4 ~* h! Q4 m3 F //Error("移动 - %d->%d",nSrc,nDestPos);' u* k6 E& q# e9 f/ ]8 n+ C8 o) Y
nDestPos++;
& J8 q5 \6 T& x+ A, ]6 {" o }( Z; V2 a7 i% p' H
//取第一个元素的信息
% v3 I l8 S* G/ e" H /*+ f7 n2 X; I# J0 w
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)/ X! a8 B- i5 O$ U* w; r6 ?
{
+ U6 X7 j4 e {+ K' B9 z: c Error("Move - From:%d,To:%d",vItem[0].nIndex,x);: |8 P' H! l, U- d
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);) Z+ u1 I1 i1 k$ j" W( |% D* ]
}: C/ [$ M# Y2 j6 @' ~0 r# L ^. M0 I
*/
4 T" j- C7 F7 g$ m1 } //////////////////////////////////////////////////////////////////////////
1 K0 u/ J& @3 K3 O: w1 M1 m break;
" s0 |' K+ z% ~% N& G' y) h2 } }, o" J% |- C' N3 ^0 m
} ) t5 y2 @- r; K0 F; c; l
}
% U( k$ o7 z F" D8 Lm_wndMenu.SetVisible(FALSE);
/ u3 _2 X5 V! X2 ^. {
/ ~! h+ y6 g, ^ ?! X& E--------------------------------------------------------------------------------------------------------; e( R5 Q8 P* p( s; h6 b& S; f
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
. r9 a* P1 j2 n{/ h1 S% a2 l9 P* N5 {& A
BaseMouseCursor();6 k1 m% t% N7 b* ]8 F
}
) v3 _2 S7 X- K3 k7 b4 y在其下添加:% v( C; O( T" d( D S
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point): y9 u! a, _. I, S9 Q* G6 a
{% w' H$ A! ]# s z4 ^
m_wndMenu.DeleteAllMenu();' ?8 o' @: S! Y; L- S- d
m_wndMenu.CreateMenu(this);
6 b2 K* B+ T1 c5 M: Xm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
1 E& U5 v% p& ~/ H; B/ j+ [( [, m( G' a4 H7 _, P
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
# c" n+ l/ X( r' h) c6 y8 I{: J* U& l6 |+ j9 Q8 J N6 F" n5 G
//P以上级别才可以删除所有道具
1 J& r o) A9 u$ B p! I. k m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
6 B I- t0 g& _}
6 t" ^0 O! t7 {/ J! z4 fm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );$ c# t, M4 l4 C' P. R9 B1 K
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );* }% E, z' s0 l7 Y/ i- b+ i3 L
m_wndMenu.SetFocus();
|9 G. Y2 J& Y+ J6 J}
1 {! Q! ?1 L3 X: s# d------------------------------------------------------------------------------------------------------------
2 T( V' h3 ?* d' U5 y*************************
1 ^% j+ A b3 sWndField.h文件5 _7 M0 K0 Q% y' r
*************************. ^0 w9 Y. `# W. `; H6 j9 r& E1 I
搜索:BOOL m_bReport;0 |( a3 F4 U8 P4 m
其后添加:5 T. z$ }$ s- F, y9 Q2 p
CWndMenu m_wndMenu;" ]/ k0 B7 X, G; @ C+ n
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);! L/ C0 ^' o1 b- t& x- @- V
其后添加:
W$ t+ t# \& @0 q. w5 [- ~virtual void OnRButtonUp(UINT nFlags, CPoint point);* j/ Z; o5 k% }7 W" p3 q* B! k' ^
) D) i' L# l# @+ {# l5 S' P
. h, i8 V! z! e# ^
|
|