|
|
源文件中_Interface文件夹下WndField.cpp文件: Q0 j1 y7 S! Y- @* L
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )/ D3 k4 I. u! l( Y# R
$ T' S7 ]. G4 W+ Z/ [struct sItem; C2 k( ~4 H5 s8 m& Z6 a: P
{
- d5 A: t4 i5 ~2 C$ J7 p! I$ MDWORD dwId;
9 ~7 G1 o' S0 y, f9 PDWORD dwKind2;3 ~6 k" s3 b. Z- W" ~
DWORD dwItemId;; H9 a6 _$ w" o1 ~5 j
BYTE nIndex; |4 ]- I" Y! T- u4 \% g+ [
sItem(){+ Y: T# I. h* @* a: T$ j
dwId = dwKind2 = dwItemId = nIndex = 0;
" H4 y1 B& K$ V. Y7 \- G}
& q9 l' D" W+ f2 @" jbool operator < (const sItem p2)
- q! L9 s1 k" H: r, b S! g4 e2 f{9 Q( r+ ]! q, c( l/ X
if (dwKind2 == p2.dwKind2); t q5 [7 I# Q9 {5 |- l0 ?
{, B" t6 [" f: o7 k3 S, P o' T
return dwItemId < p2.dwItemId;0 P0 T p) b E
}else{
3 K7 m7 i5 j0 h# K return dwKind2 < p2.dwKind2;
3 f# t$ Q! {' b( g: Y9 B }
1 U; W' w1 K T, e' W}$ G1 q$ m' Z4 ]8 J
};
" }. u1 w: n: e- e% yclass CInventorySort
) B5 x% E9 k5 F7 {, b( x{
7 O# |( Q' B+ s- a8 Y- Ypublic:
; R. C {0 h Z q& QCInventorySort()6 Z9 Z/ o% F6 S% }1 _1 s& `3 ^+ `
{
0 K2 O4 W& A9 z( g* o2 Y* u m_dwPos = 0;$ Q3 i7 O2 N1 U7 ]5 M
}& o: o3 c' V! u; `7 U2 y
~CInventorySort(){}
3 y, O C. B( z6 Z; Y1 }; g- pprivate:: W2 o0 p4 }! k0 T& ^4 A
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
4 ]8 k2 c6 k, m& M8 S3 J6 n- A2 jDWORD m_dwPos;. W' O5 B2 n0 ^7 D! g) B
public:6 s* b0 L6 T h0 y) z6 a
void Add(BYTE nIndex)
! q; r' i5 X" Z+ J{
0 P$ {2 Q7 w1 x4 S2 `! k if (m_dwPos >= MAX_INVENTORY)
9 L9 c/ M" j5 C6 s9 Z {% y( @( d3 B. c0 J/ `0 p
return;
0 S+ D$ P" M1 b( ~ }
5 @6 M& H9 q$ X) m) n/ l m_Item[m_dwPos].nIndex = nIndex;
/ P8 W3 w1 b' V! Y m_Item[m_dwPos].dwId = m_dwPos;
3 {0 l* }' d. q& d m_dwPos++;
! t, U6 Z+ p8 ]}3 p. t& X6 D# y6 v2 b7 O: }' `
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
9 d Q( e$ \: m6 I{
" h! O- J0 d1 }4 R for (int i=0;i<MAX_INVENTORY;i++): u: i5 }+ B9 H6 q% k
{/ U/ e' s: G- h9 W5 v0 L. W3 \% H2 X( @
if (m_Item.dwId == dwId)
% ~$ y( `8 D, \; C' H {' `+ k0 g5 d, V8 ~) ~' u
return m_Item.nIndex;1 F0 X( ]! Z J3 R, `
}
2 C: p1 q3 [" q9 O. v; ?- s }
7 }* x0 N* b$ n# B/ v6 P3 h return 255;/ u8 D% B, O8 E; T0 c3 Q
}0 M4 ?* u/ n7 H
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
; @8 r" M, {( H+ y R" j& f% h) T# j W{+ {# d/ {5 m8 x) U. d2 d; [
BYTE nTmp = 0;
. v' O, \+ m- o' i+ H2 C bool bDest = false,bSrc = false;
- R; g+ F, ^, B/ n3 R! } for (int i=0;i<MAX_INVENTORY;i++)
1 }" s6 C5 F7 `! u$ ` {
, ]# e% }, V. p8 Z7 P if (dwSrcId == m_Item.dwId)
3 i6 _0 @; B; j7 f7 L+ m& m6 E {6 d: D6 ]1 q% _; T
//id相等 则 改变对应的dest和src0 O1 B: r* ]5 N7 L( E3 I. H
nTmp = m_Item.nIndex;
- J# F B0 ?$ ]$ O m_Item.nIndex = dest;+ G1 i0 \" ~# w1 S
}2 f' E+ f: |0 ~
}9 B1 x) x& R: k" T
//临时数据保存完毕,交换开始
8 F4 X$ g! S5 i; V for (int i=0;i<MAX_INVENTORY;i++)3 `1 b6 r' Q. v2 x- h3 G& a0 \4 x" y$ U
{
4 A( G; ]* |. r; m if (dest == m_Item.nIndex); p8 y! w9 c/ h P% j
{
+ W/ A7 }4 e, @! P1 v; V1 J' O //id相等 则 改变对应的dest和src
& V+ l# g! _% C# |* v m_Item.nIndex = nTmp;
( N7 B$ O( l; `% B }, s8 U6 U# O8 H7 A. \
}
7 R% d8 S/ y0 @; ~' M! a! a}- d3 Q( D- I# ?/ x7 g8 j' [7 g
};( [( _* R+ O8 D' ^; M* y \
-------------------------------------------------------------------------
' m7 C4 Q3 Y4 o依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
8 z3 p6 Y, O+ i7 o4 C; j搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
$ { y' O! i% _- X紧靠其上添加:; M" S8 r- a0 O" i2 v. ]. F
if( pWndBase == &m_wndMenu )7 M! X3 E$ @) `# D8 \/ g
{
3 }& u6 R$ l! c- I' n h4 T switch( nID )$ H) q4 R$ f& a8 d: j
{. g5 x$ N/ ?; j( o1 U7 R& k1 X
case 2:" V8 } K7 C1 ]2 `4 {, \7 Q+ V& U
{
* n4 k. X* C; W! q! l- D) _+ `/ Z //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
6 |0 x" |; k) O1 S$ Z* W6 } if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
( C: P7 }/ r: t& J' {8 X* u* w {! O3 m: N% M, }; `4 A0 }: |
break;, ]9 y" p0 {2 r! H5 n3 ]: K) [
}
+ N K$ k$ r3 X5 s$ u for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
% I# Y; t: p+ d6 i {
& B( w2 }6 | M0 ^$ l e CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);) U5 S# \: r7 P; S8 X }: h
if( !pItemElem )
1 W6 A# |; ^) M3 m continue;
1 w/ |' h% Q4 U7 H+ L' m if(pItemElem->GetExtra() > 0)2 ]" g% |4 U! T3 P6 ?- P. M
continue;
( [9 k( f" T' D! @$ C4 e5 F if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
' L4 w' r7 l" L+ \ T5 V0 I continue;8 F4 d; O2 d6 J! a7 @' C
if( g_pPlayer->IsUsing( pItemElem ) )* W9 Q! Y# S( [! V I
continue;
! a9 ~7 Q2 J# ?7 C4 F1 \# j0 j if( pItemElem->IsUndestructable() == TRUE )- Q) I. b9 o, q/ C- Q+ w/ Y: d
{
6 f% j& M/ }+ P; Q8 p# _ g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
9 R5 q# W( |# W; \& z; P continue;* o- e) ?+ {8 V/ q- ]
}4 k1 W& j# D. B0 ^
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
, I6 A+ u1 f& K. C }7 L2 J G L# N* p% }3 j* x7 K
break;
7 q4 Z# X' A. k) | }
$ y1 _; G( w& k+ o+ r case 1:
# m" v# x* x; L6 A# I& m {
9 l0 r: S6 {2 J+ \! R- O. a //整理背包+ ~! X' U3 q) R* o: J+ Z
//////////////////////////////////////////////////////////////////////////
" c" h' J7 k3 Z( q //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
" H7 R/ E" J; ^: V0 ~ //////////////////////////////////////////////////////////////////////////
/ N7 @5 d. d4 s' C //////////////////////////////////////////////////////////////////////////
! N8 S* a! U2 Y3 ?3 O CInventorySort* pInvSort = new CInventorySort;$ i! q" d/ {* s4 t9 H! f5 N$ L
vector <sItem> vItem;+ H: w" O6 T) n* N
vItem.resize(MAX_INVENTORY);//初始化大小* G1 \& W: y8 ]
//////////////////////////////////////////////////////////////////////////
9 Z2 f0 h9 Q' m( N //填充数据# j( r% b, x1 N; r: w$ R& J
for (int i=0;i<MAX_INVENTORY;i++)) v K6 G* }( F9 c b
{
1 Z) V; {+ Y& G0 Q4 ^* j) H2 f CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
: E* z1 T% u, i* ] if (!pItemElem)# n1 W/ _* K6 p& {: F
{! y, U& a5 y0 O; z
vItem.dwKind2 = 0xffffffff;
/ O' n2 e) I+ d f" K vItem.dwItemId = 0xffffffff;% S$ h7 C+ U1 G& S
vItem.nIndex = i;) k6 z( x1 X" J1 Z4 x
}else {. A9 f* a: m; b4 u$ T6 s
ItemProp* pProp = pItemElem->GetProp();
" k3 v3 u. G! [5 r5 T- W! O vItem.dwKind2 = pProp->dwItemKind2;% p# L$ \2 t" M
vItem.dwItemId = pItemElem->m_dwItemId;
- [+ z0 U% Y9 G+ p vItem.nIndex = i;
( L0 a* [" r9 E }
& ?8 W; v, _- D: j //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
% F; v: d% a) [% d$ Z1 x }" j0 Q$ b6 r! j; Q
//////////////////////////////////////////////////////////////////////////
" f/ i3 H0 s& A' G" ]9 s/ E sort(vItem.begin(),vItem.end());//排序
% q# _5 ]) _& a //////////////////////////////////////////////////////////////////////////4 J* T7 j3 w/ w6 q) w1 X
//交换
2 A9 u( q! h7 m8 V& \/ ?) Y for (size_t i=0;i<vItem.size();i++); w$ U. X: i) Z( B4 V: K* H
{
6 h) O: e9 N( v, w //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
2 `9 w- h6 ^) ?* | pInvSort->Add(vItem.nIndex);
- }% L8 p* D- K" o/ T* H( [ }( v8 e% \1 P }9 b
BYTE nDestPos = 0;
1 q" o# v; H' \* C; U for (int i=0;i<MAX_INVENTORY;i++)
2 F$ O) R0 f, W; T, w% E {* q3 o, q2 P+ F! L6 ]% w/ b: I" d
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
4 v7 I; t6 D5 u5 | N" y if (pItemElem)
5 }3 e6 S7 G. T# H/ j {3 d! F" T# y3 Y
if (IsUsingItem(pItemElem))
5 q8 ?0 {) N$ I' s& B- G {
. |2 p, N" X* q# ? //这个位置无法放
( |! t7 C. C+ q# V nDestPos++;2 b4 D; J8 a# C `4 ]
}
, k* H6 p+ Y* Y" ^# W! M }6 N s: y( m' t6 I5 ^9 R
BYTE nSrc = pInvSort->GetItemSrc(i);
& d: x4 C1 w4 ]6 O: s, { pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);2 k- ~' G1 f3 R+ P
if (pItemElem). E- V# Y. p; S7 ^2 G) v
{- E) U* R2 |4 t
if (IsUsingItem(pItemElem))
* H4 Y R& c `0 w1 X7 f {- U, _5 w* o* O; x4 D) Z7 A
//这个道具无法移动,跳过# D) R D* S& E7 G8 e" \3 m
continue;
2 i; R7 e* u. ^9 P }
$ ?5 f2 U( ^9 ]$ K' }' | }else{
, \; P+ P2 T/ l/ j //空位置 不用动6 D$ e3 h; l$ I6 ~
continue;
1 d- N4 q5 M" H, r* t$ c: ? }+ F2 a% y5 T) \. z: d1 w
//////////////////////////////////////////////////////////////////////////0 Q" Z# N. G/ i
//开始移动
5 C5 [* T0 k5 M1 m0 b' v2 x/ V H if (nSrc == nDestPos)
- H6 B2 n ]0 G5 M1 Z$ h {
- r5 ~- j0 Q. s) J0 v+ m+ p! m //原地不动
/ _$ R2 A. f; _- x nDestPos++;+ L3 s) V4 T" h% X7 n4 Y- J
continue;7 v& g/ v5 K! Z3 q+ n6 q. v# I
}
& h7 f: ], [" \ pInvSort->MoveItem(i,nDestPos);
, n& U; @' D( U g_DPlay.SendMoveItem(0,nSrc,nDestPos);# Z8 B% S4 ?& Q( K, {4 ?' G9 w7 Z
Sleep(5);4 N7 A! q3 H) t5 K3 c
//Error("移动 - %d->%d",nSrc,nDestPos);- l$ a# b0 i8 A* a
nDestPos++;" |& e4 D V/ F' o" w! }+ Z
}2 B% \% T4 s3 t, N* R1 k% b
//取第一个元素的信息) Q! I+ T. o8 ~5 _$ O4 u4 `
/*
. W& B' U$ E+ a- N/ o( z( j X4 _ if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)5 O+ B$ D( C: L
{2 C) }6 w9 j6 G$ X% P
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);) V4 `' ?( J8 B$ j7 n; Y
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
" I( w& h+ \3 F' o- Y+ t) h }% G; p3 N+ Z- }
*/
' i) Z2 {: ]7 p //////////////////////////////////////////////////////////////////////////
. `& P( P$ D. s" N3 Y0 q) _ break;) L5 A" c7 l5 d$ N% f, k3 O% |/ u
}* G. L6 D9 q8 X- S
} ( R4 _% _1 d' X
}
3 R$ P; t+ q' B6 R% Jm_wndMenu.SetVisible(FALSE); D$ o* O1 q0 j5 k7 J
6 c7 V' Z8 F7 v1 Q--------------------------------------------------------------------------------------------------------
1 q) D) M/ \, |7 o搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)' m& ~+ A' }* V8 n
{" s& [4 R- O; l( A0 P& j% [2 T
BaseMouseCursor();2 ^) {9 g! ~# ^; L( h) g
}
* P9 O' E2 N/ T. r# L在其下添加:
9 E, e+ s5 k0 K9 T0 S6 Nvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)( l5 Q( {" c- n. i' i( H* h9 |
{
- i' ~9 [$ N! w ^+ ~, ]5 q2 [" m) Dm_wndMenu.DeleteAllMenu();
( \* l5 A0 z9 \! Q/ qm_wndMenu.CreateMenu(this);
( W+ Z; r8 u; l* gm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");* y2 W# [2 m7 W& E, T, g9 a
7 T3 E( l3 ^4 w1 K5 g
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))( o; n3 r1 Q8 S; q
{
, w. R$ I- @3 F5 ?5 l% x; R+ C //P以上级别才可以删除所有道具% f( ?9 o9 L" D
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
% Q$ L3 |) r; J}
1 j4 g2 g1 Z0 D# E- z8 K2 |m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );* D5 ?2 V+ ]- F9 i' L7 O' ~
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
% |( A3 _0 M( t, E$ cm_wndMenu.SetFocus();) p4 T; C( H" R
}) F; K4 I; x# k" Q* A3 Z' i: u
------------------------------------------------------------------------------------------------------------, s4 ]3 a1 q/ H, b1 u7 B N9 _
*************************/ s. h1 ]- p5 ?' V: U U& o" o
WndField.h文件
' V) Y3 w9 i/ S" }5 {! M) T# U*************************
7 k% {2 ~- H7 G0 F搜索:BOOL m_bReport;
% g6 Y5 p) k8 X/ d' |4 G其后添加:7 k8 V9 F; N+ i" V7 j0 @# m
CWndMenu m_wndMenu;
! e b0 m9 L# Z9 x6 ^搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);0 c1 `6 k, U' v% e0 {2 z
其后添加:
$ f- Y- M8 k2 wvirtual void OnRButtonUp(UINT nFlags, CPoint point);
5 m' R1 G, T3 z2 M/ i, D4 A+ j+ l, M6 k$ O
7 O k I) ]- R% S7 N |
|