|
|
源文件中_Interface文件夹下WndField.cpp文件
, f1 g+ ?8 t0 k$ d |" Y3 T* n1 g搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )+ X1 F" R: f, p6 s' [. G
) T$ a; v! a, G# p+ ~9 K e
struct sItem: {7 e( R$ b5 O) C1 m4 m- ^2 d- }2 p
{7 U: L+ |0 p) H+ l
DWORD dwId;& v1 p# k: m8 u Z/ ]- x [$ W
DWORD dwKind2;4 _" `. I1 F# ~0 ?/ a- b
DWORD dwItemId;
2 [, g) b; d7 q2 h3 e$ Z7 Y5 oBYTE nIndex;3 z4 c1 s: i& z# n
sItem(){" L, t: U& |8 Y
dwId = dwKind2 = dwItemId = nIndex = 0;4 W+ z O4 m u' e0 D
}
" B8 ^5 H! }. H) x# a- `& @3 R, {bool operator < (const sItem p2)& a# f1 G+ [! h/ A N
{) l; O* B% {0 l$ p$ o$ i4 }
if (dwKind2 == p2.dwKind2)
/ x9 ^) o, P! Z5 K7 g! | {$ q- U- M" V: Z P8 M# b
return dwItemId < p2.dwItemId; |" z+ s- P; C3 [- m
}else{
) _( t4 N6 ^0 K6 Q- } return dwKind2 < p2.dwKind2;
! x) o4 g& T$ O }* a% j: B# v5 [5 L$ ^0 A d
}+ [( ?* |6 n6 M+ R: e+ u8 V
};
" T/ m3 D0 n/ i9 ^5 R; {4 nclass CInventorySort. T0 \% d5 G6 Z0 ~
{6 O8 U& u$ a' ^. a
public:
9 `1 T* S; A# y+ b# ^- TCInventorySort()
5 }! G: t0 l* c; u6 X: Q0 |{# {3 b! G% {6 }. [8 T, U
m_dwPos = 0;5 @! ^) ]- s% O& o6 }4 K$ ?9 V
}4 R' {, h8 g5 W% @4 s. y D' A6 a
~CInventorySort(){}
# ~5 O; B3 w( j' L9 k U/ g7 @9 A! xprivate:
2 K& W+ I, \: y4 m, b6 _$ a' UsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息: G3 N' x+ ?6 U6 q$ |
DWORD m_dwPos;) G2 u+ S- c! K/ Y' L1 @3 x. f
public:+ ]) D; n$ m5 D* C$ r' h
void Add(BYTE nIndex)
0 o- \% h+ Z8 a1 \. K{
: a3 d$ B* |' g/ M8 c9 V! S' v if (m_dwPos >= MAX_INVENTORY)
+ p/ V V) K% m& ~ {3 S! G0 `; b1 l' j( I8 l! D* k K
return;
& `7 U. G8 m9 p }1 d( J- m$ k% r- F8 D
m_Item[m_dwPos].nIndex = nIndex;& S) P* M$ s, U! b1 i, ]! O" @/ q
m_Item[m_dwPos].dwId = m_dwPos;
& t8 i. \$ D8 h, q: j( I) ~ m_dwPos++;+ O `* p- ^# X
}( u( U; v, v+ G5 k3 K: o: z% r
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
g0 |2 @) `+ {* C: B{4 H5 H. c4 W5 \9 S i3 s8 j4 `
for (int i=0;i<MAX_INVENTORY;i++)
$ e/ S, O8 M' { {$ K4 G& C1 {5 q5 D% a2 f8 q) V' t
if (m_Item.dwId == dwId)) T/ X- ]$ }1 l- V
{
, Y- |! }* w3 d7 j' W, j return m_Item.nIndex;9 H- i$ ^5 w" }+ E0 ?
}2 V! J, Y6 `) `6 D N9 z" Q! g8 ~
}/ @2 k2 f( ?% t9 v9 k5 @/ H) t6 ]
return 255;
3 y# p0 y0 [( f4 j- `* _0 I} Z1 [, l% B2 E9 y2 u( W( r- e* z
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置. ]4 T4 @3 d1 h2 [
{* Y% Z L0 j7 M% b
BYTE nTmp = 0;2 x3 d6 n ~. [* P
bool bDest = false,bSrc = false;
& \$ ~& F2 ?& k for (int i=0;i<MAX_INVENTORY;i++)2 J6 P# A6 Y: n) @ I
{
5 z- s, p U! V' X. n if (dwSrcId == m_Item.dwId)
& c, r$ _7 R+ }3 M7 S! W {6 y1 d. f5 L4 r/ a
//id相等 则 改变对应的dest和src
0 Q/ f5 [6 U# s9 g/ a9 f0 k nTmp = m_Item.nIndex;
3 X$ J, \" C5 D7 U( m2 _, q0 D; j; v m_Item.nIndex = dest;
' C! Q0 T+ s" j& ~) j9 j }
( W( R3 ^1 ^5 m* i }
0 a3 q* H& Y% c //临时数据保存完毕,交换开始; |5 _, y6 {, F9 o" F' B# v6 H' {
for (int i=0;i<MAX_INVENTORY;i++)
% I, Z8 Y( B3 h3 f, R3 C1 H {
- R: v8 v) n1 Z7 V if (dest == m_Item.nIndex)0 f1 i5 w4 F! q: {2 M7 z$ g) B
{/ y; ~3 S7 u2 M4 y! d6 y
//id相等 则 改变对应的dest和src
4 N! G! h. `5 F m_Item.nIndex = nTmp;
/ w7 U1 B3 e9 f% y+ d. @9 j }( ^8 ?& ]1 H2 O$ Z: _
}! \9 u) S: q. A: @6 c5 L7 }
}! m3 o) _, i" d* S' h
};
' n7 a7 y2 g# m, g/ ]3 r U-------------------------------------------------------------------------
1 M0 _# P' I/ h1 g- ]依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
8 _# O4 o O) P2 L# B* s6 G- S搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);% |+ V5 Z7 d; W- L4 P! H
紧靠其上添加:9 l$ B8 b: T& h8 K' t3 y V
if( pWndBase == &m_wndMenu )
+ u( s; e5 ^) n+ V7 i1 B{
2 R- {7 I. _. [8 Y, _4 g switch( nID )
: b w4 ^% T5 b7 _2 }( l {, p' e( P2 T5 H0 j& P* G
case 2:& t% R# A% O; }
{
2 Y- J# p( O6 U, E5 u //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
/ Q9 J/ w8 v. B) t! a' `- @ if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))0 M+ X; a7 \6 E4 _0 A( ^
{
, E) k1 J o8 |6 m5 y break;0 T" Z7 n {, A
}
, V* l$ \% P% q9 a for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
: T* O" ^0 n" Z- U; P5 q {4 R u f* W* H8 k( L* \& [3 z
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);. u- g4 w" J+ z- a( i% r
if( !pItemElem )
" h- x) T8 \& }# |/ I( O continue;
) S! y' Q" I- Q+ ~8 a: O if(pItemElem->GetExtra() > 0)2 M( h5 b% I, b6 J8 }" |
continue;% O+ z4 i+ G- N8 W
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
0 a+ V. |" e6 r continue;
% L/ K! I/ p. Y$ r/ X if( g_pPlayer->IsUsing( pItemElem ) )6 m. \! c% \( j* f: X
continue;0 ^3 G8 G" v) o2 a5 a4 L
if( pItemElem->IsUndestructable() == TRUE )' `6 e$ ^* ~! O; F! @! Y G! L& N! ?
{: p% C; u8 J6 L8 z2 g# j
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
5 w# G; ]" y) w8 Q1 k/ i; Q continue;
- y2 Q/ |" A3 c9 S. U }
+ c4 v* y* v5 D4 D# B. P g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
3 _0 m& u; _3 P3 q! c }
: j. @ X7 U! ]- ?: F! k, n% d break;
, D4 h! O" l+ V1 \) V X, g }
# N) g- _* Q9 ^: }" s case 1:8 N' ?: u1 s) K
{( W+ p/ h; i; o$ W0 j
//整理背包
3 ^) O: g$ J+ g8 D //////////////////////////////////////////////////////////////////////////
" ?) q7 ~, R; E' l //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
9 R5 {; X& C6 `% ]1 y, F //////////////////////////////////////////////////////////////////////////4 L6 F& Z5 k8 L6 h! {
//////////////////////////////////////////////////////////////////////////# I! z) y V3 V4 p
CInventorySort* pInvSort = new CInventorySort;# h7 b' q0 Y4 U5 V
vector <sItem> vItem;
2 r' F# m4 b' W; ?' T vItem.resize(MAX_INVENTORY);//初始化大小, X4 V) S2 A5 L7 C; a. M
//////////////////////////////////////////////////////////////////////////
u! Q; k+ T) t$ v9 c& N6 r3 x: y //填充数据8 G7 b4 P5 ?2 y% z# s1 p
for (int i=0;i<MAX_INVENTORY;i++)6 z4 u- f/ e! J1 m
{" m) C( Y5 {! |, [# P! q4 d ~: y2 L! y
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
, K& T8 ^* u1 j+ u. V. D/ j if (!pItemElem)( B' e& i+ a4 N+ _2 Q
{
8 f M% ]- D9 {7 f% w/ u! m! R vItem.dwKind2 = 0xffffffff;
- Z$ \! w" }- }& u vItem.dwItemId = 0xffffffff;/ G$ e. _2 U' g; E! o
vItem.nIndex = i;
% J; S0 D# G0 j }else {
9 E8 f; E" U% b8 D ItemProp* pProp = pItemElem->GetProp();
9 y+ w% G4 L. T1 D$ S# ] vItem.dwKind2 = pProp->dwItemKind2;4 o4 F- u2 Z; C
vItem.dwItemId = pItemElem->m_dwItemId;
! z" e. Y6 G, }: U* L, b vItem.nIndex = i;
$ Z7 @/ y8 [6 Q4 X9 t+ v1 s }2 e; ^! t9 Z4 Y5 n Q2 i0 ]
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);, W# g) n1 U2 ~) a* s" X' J
}
, T4 |3 f4 X( y n. g p //////////////////////////////////////////////////////////////////////////
; n$ Z& [% _" i" `7 G7 p sort(vItem.begin(),vItem.end());//排序
8 ]4 f2 l: v, x( N" b: ^ //////////////////////////////////////////////////////////////////////////9 {; q" U4 A' h, R
//交换3 z. t' X3 { Y9 [6 w4 j
for (size_t i=0;i<vItem.size();i++)
& x. L" h' K; t* P5 w* ? {
* U1 H2 U4 ^! K, N8 s' o- g //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);: |/ {! ?- x& A- M% v2 g( v
pInvSort->Add(vItem.nIndex);
0 K+ y; J" \4 ^2 X$ s& V0 ~7 q }5 j! v) R% A5 T# f& O
BYTE nDestPos = 0;$ F# t8 Q8 t C8 j
for (int i=0;i<MAX_INVENTORY;i++)
0 `: @: J" L9 [/ j, n9 _ {
4 |* r9 d8 R& b9 P. Y$ Q. ^" ]" Y CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
2 j% y0 Y. T: N" M+ v. r if (pItemElem)
* `; A5 \( Y! s+ t/ Q/ Q _ {
" g8 Q" }; A/ H/ g: O9 N if (IsUsingItem(pItemElem))3 K T8 T& {8 T3 c9 f
{
0 m# }& C4 s8 C' J //这个位置无法放
; @. E; @4 Z/ ] nDestPos++;) v, o$ N. G9 T& v; A7 v( }* U7 r# L6 r
}
3 V" S. s0 G- b( ^: D# o }, B0 l0 b, B3 Z" Y
BYTE nSrc = pInvSort->GetItemSrc(i);0 T+ J+ m; s. q' t% \6 i. }
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
6 V+ U7 |# n1 r) u2 E8 G8 Z if (pItemElem)+ K* F/ F" n) [0 f: d
{
5 L A! B& U% _! i8 x if (IsUsingItem(pItemElem))
& y) v" x* U9 X; Q, G {
& a' K. A1 {) a //这个道具无法移动,跳过; D4 I; q- j$ y; w& L
continue;
2 U4 q" z5 l6 i3 L. Y& E. q }
B# F- l. S9 |' G: D) n% a5 l }else{
8 R5 T8 R0 Q% Y7 Q! j$ C# h+ D" s( P //空位置 不用动
# i9 v$ A5 l9 V( ~9 m! ^2 k# x$ L continue;$ D9 _: U' P- }! Y% ^0 A
}
2 `5 r1 C+ \4 h7 Y$ V( s5 j4 X4 b //////////////////////////////////////////////////////////////////////////
& w5 M1 X+ n; B6 O9 v //开始移动$ A$ J" U }$ ^0 M% i
if (nSrc == nDestPos)
. K7 M/ M, W. `* Y4 a {
/ Y7 V# A/ [- t/ x. Q //原地不动
w/ o4 m5 W/ x; k nDestPos++;+ f5 ?0 k, G, q2 w2 o5 ]
continue;
5 z; J3 h3 O3 r1 w M" u9 l }1 M- y: j* x" j3 P
pInvSort->MoveItem(i,nDestPos);
. u6 Y u+ d: ^- Q! u1 z g_DPlay.SendMoveItem(0,nSrc,nDestPos);# F+ j. A$ w; l) d( |& v4 E
Sleep(5); |; j+ ^ V1 [! L' c3 Z' V
//Error("移动 - %d->%d",nSrc,nDestPos);
! J# o+ @4 i' J" f* F nDestPos++;
! g: h2 g, n/ l: i3 L$ o }
/ d5 L+ d7 W: Z& p8 d/ Y% h //取第一个元素的信息
/ f H) x) ~" b( k, X /*- @ Z& r: f6 w" g$ h* X3 y) w' P: @
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
3 L1 t% r- U! _ {/ s* U& ?8 y+ H
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
* m% y# K8 m9 G8 C g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x); m/ e; U3 J4 x4 M
}2 p, p7 d) s+ I' t: b$ Q
*/
/ m. h3 R9 Y2 `+ I2 f0 I W+ f" X5 R //////////////////////////////////////////////////////////////////////////- p9 Z& B- y. G
break;+ ?4 M; w; |& ^% c+ X
}
2 a/ A9 `1 {$ B$ | }
! y% V' u A, y/ C- C4 D6 [}
1 m0 U' l x' G1 A# O, M! ]* p+ Z* tm_wndMenu.SetVisible(FALSE);; E9 D% s( R/ E7 ]1 P
! d& R$ j7 i% U- Q--------------------------------------------------------------------------------------------------------4 V3 s Y4 {( A
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)2 v6 k% K+ a5 J- i. n: k3 \
{
8 }2 `0 Y: |- W5 A% a mBaseMouseCursor();
B/ q. A. [4 l, c d, E7 H( s, Q}. s1 J6 K G( _1 `
在其下添加:4 M. L4 U+ q- H3 `2 B+ [! y
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)6 ?1 G$ y0 x' t* O9 X
{# S5 M Q& \2 M* I' n
m_wndMenu.DeleteAllMenu();$ K6 G& o) E: `- `) N6 }9 L/ G7 @5 s
m_wndMenu.CreateMenu(this);
% l$ F2 e; \+ f7 v8 V& zm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");, M+ H+ T3 e7 b" d8 J+ z, o
( Z0 e0 l7 ~/ H7 K3 Vif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
+ A5 [1 J' r$ w3 R{
. O, s5 e5 ]' X# k% ] //P以上级别才可以删除所有道具- R7 M N# k0 Y! Z6 f k1 L2 {
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");2 T7 q" L5 o# b) ~. u
}
$ n* T) @2 Z+ L. D/ b* o3 n) O$ \7 Qm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
% I' X0 f4 N+ a( gm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );4 N4 a! h5 t4 [, q7 w
m_wndMenu.SetFocus();
% y7 w4 \8 T: z9 ?: v}
8 c- {1 c. O+ F, q, |* j, M- s------------------------------------------------------------------------------------------------------------# `2 K+ y8 M+ S1 a! ]
*************************
+ _2 y6 v. l+ |& f& ]2 U; Q# _; n4 IWndField.h文件! F, M, I1 Y: I, a
*************************
, A1 d% P7 \7 u7 h& u搜索:BOOL m_bReport;& j3 z* b J: g
其后添加:
& ]/ x' r6 F0 [2 ~CWndMenu m_wndMenu;
" ]4 b2 \- B7 v G) ^" m搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
( z+ d' a# K. E: a- j1 T; b: ~其后添加:4 v. t. g' I5 ]( {6 M7 j8 Y; G4 |
virtual void OnRButtonUp(UINT nFlags, CPoint point);) s% H+ l! f6 Q1 c
- l% m9 p; P" d$ M$ ]9 K
! ~# E5 c$ O4 `' T+ S( @3 b ` |
|