|
|
源文件中_Interface文件夹下WndField.cpp文件
+ v8 f) t9 b5 F% ]6 t搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )6 A3 d5 y8 j; }
# }& F, z* P% Q4 U! `struct sItem" \# U" ?6 I9 Q# L" N
{
\/ j3 }5 c3 b% u% l2 jDWORD dwId;& G4 V2 R. |, j! c
DWORD dwKind2;
9 u- @3 q# y A t% TDWORD dwItemId;
7 H, W, O" S. ^* h/ g' d {BYTE nIndex;( j8 y6 I. z$ }% G+ w4 X6 n
sItem(){- X9 G0 b" C! U& w' A
dwId = dwKind2 = dwItemId = nIndex = 0;
% F" g w! Z% p% K}
) B. T6 O k) g0 _. x: c8 W+ pbool operator < (const sItem p2)
) P4 w( |( F N{
# N+ K3 d) N; o: |$ a" D if (dwKind2 == p2.dwKind2), E: [5 W/ [& X/ X
{
3 @" E9 \! I; ?( f7 n) y return dwItemId < p2.dwItemId;
% | c+ M/ x! I }else{
% E$ D2 d1 I' x" i0 L2 ?1 J return dwKind2 < p2.dwKind2;" X) A: [8 {- s4 _7 H% u
}- ~1 x' O8 Z, S
}) g- r5 U$ a* K7 T$ c' a6 M& u
};
4 m9 x X0 j& {' P( F$ p% sclass CInventorySort0 d- R r0 w$ E* r* o
{% u( g# \4 {" U& ?
public:
. _8 n$ A$ M) R5 F- ACInventorySort()
% k. a# q, {1 t: G! T# I, D4 V{) ^6 y) x. ^" G/ }& Z7 n* _
m_dwPos = 0;8 L* v. H5 t& R* Q
}- b1 u3 @, G- v( [- _
~CInventorySort(){}7 i" T& `( A, e2 B
private:' w) r" C% C$ `) ^% a# |: d& {
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息2 h# A( M; Z) Z' a7 y
DWORD m_dwPos;
0 }+ i& p3 T0 H. f, A$ Xpublic:1 t' `5 n1 T9 [. [! \
void Add(BYTE nIndex)
: ~2 ^" @( i( R/ b B8 f9 o{- f7 O" G j# z% s9 \- n
if (m_dwPos >= MAX_INVENTORY)
! q; [* V1 A9 n6 F# c# I1 ?: e, n {
@0 L, E2 g3 @0 j$ F( c return;7 X% A# P* C) [" c1 K H6 e
}
) Q- y1 @$ C4 P e0 X m_Item[m_dwPos].nIndex = nIndex;1 a# n2 l, A0 ^& m3 b
m_Item[m_dwPos].dwId = m_dwPos;
0 s" c$ `2 P+ |! j9 b3 l) ^, e m_dwPos++;5 q4 ~% ^$ O: P1 G+ c3 t
}
2 A$ _ g% W4 A: |; E; E% UBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
/ T! [4 s: x6 x( r# W& d3 X0 `{/ L- W; Z1 f9 [# y
for (int i=0;i<MAX_INVENTORY;i++)2 @- `1 G2 P0 h2 M
{
' S: i- V: e, w- Q( t% J+ T if (m_Item.dwId == dwId)! G6 {& f- @ c8 Q' w' b! ]
{
6 a5 B7 h4 n: K! b% `# j return m_Item.nIndex;$ F+ `3 q/ q3 F" v
}
. y( n! G, P6 k% K* j; V) l7 L }
0 F3 E( O8 {! d/ A% R3 l; ^8 D return 255;
" b+ X8 h2 u# g4 {$ L# y# n}- N4 U5 C6 W% ~; t# \ \
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
. d3 y! {& k, b) [; z4 N% P{
( F" w! n' Q) J+ [/ e$ \ BYTE nTmp = 0;, c2 |8 y6 M1 _# D
bool bDest = false,bSrc = false;
/ m: W6 a0 }9 d; G/ |* D for (int i=0;i<MAX_INVENTORY;i++)
9 ?) g7 D" P6 j( A {' @" e! d2 U' m" P4 w2 x1 }
if (dwSrcId == m_Item.dwId)
' B9 ?8 ^5 d" D3 C; B$ @" g {
$ w, W u9 M9 A/ a //id相等 则 改变对应的dest和src5 J& B/ q" F# R' q, j7 s
nTmp = m_Item.nIndex;6 i C5 d& V" s( h
m_Item.nIndex = dest;# d6 b' ? B* O( ]1 ?
}; }0 T) ]" u! T. Q
}7 M5 w8 m% V& J0 @$ w* _4 h. R" ]
//临时数据保存完毕,交换开始
6 \4 z- d+ L X7 ]$ f& V) e for (int i=0;i<MAX_INVENTORY;i++)
4 s, L9 o; p- n6 e5 }) v$ t {
8 l! B) Y# M* O& k if (dest == m_Item.nIndex)) m1 }* r5 [0 S8 o: W! f8 h
{1 P' e6 S# O, L8 R8 e9 l
//id相等 则 改变对应的dest和src
/ l- y, y* m2 Z8 d L/ b6 M0 F m_Item.nIndex = nTmp;
6 C9 E {0 R! F) u& \, m* Y6 s }% T! h, D: d I8 W% o# e* M
}
) t4 m; |5 E, y! a& g# o}
; m% m: T5 c. {};; H+ U3 ^) t& P# y. }+ q% G
-------------------------------------------------------------------------
( G. L( x. @7 d" O5 z6 _依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )6 h; Q& ?! R. k& P+ J7 ^2 D7 j: R; K
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);& c$ n3 z3 n- t7 ~ {
紧靠其上添加: b+ R1 ?; f) ?4 ^- h. ]* s3 {
if( pWndBase == &m_wndMenu )- H" f1 Z3 {& @) j% z0 l
{
( A8 b$ i/ T% n. o switch( nID )
1 g$ g, m1 u& I+ i {; Z7 m u' v# {% d1 I, X( _
case 2:
6 i0 A! i) g3 f {0 L: _, ?" q8 J. z& n
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
$ y# J6 Y2 R2 j' l3 T' ~ if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))( v# H! y; ^4 r# Z8 S6 n# h2 V$ w
{
3 S+ ?; q5 G# _, H1 r% ~; H break;
; _% W# S1 T5 }, ]6 G# x! t- Z: l }
$ Z2 \, _' q- y for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)9 N% [ A9 ~7 F2 Z3 b! E& A& P
{8 _- e) ^3 n- C' ?+ C' z
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
4 d6 z7 u8 l9 V3 W* @9 A if( !pItemElem )4 q, _4 @, P5 O$ z, ~' z' ]$ O
continue;
% o8 n: j2 F% C4 d0 C3 @' j if(pItemElem->GetExtra() > 0)4 y* x; V9 Y6 P- q' l+ e! _
continue;
2 n& V6 e& z3 |: O( O+ j6 j* ^/ _7 s if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
0 z2 Y! _* t4 Z- m/ w continue;. X% B: v0 Q7 e, A4 I* x# H
if( g_pPlayer->IsUsing( pItemElem ) )1 S0 R' W' L$ m, Q9 V7 n
continue;
5 s* Q% M) F' o$ V2 E' X if( pItemElem->IsUndestructable() == TRUE )& ]. y% V' K; C- [6 y( j
{( \0 Q% Z/ \9 a6 Y0 t
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
" ` f% _* t9 A H continue;
0 \8 _ C+ W0 R6 b }
( K- @ S$ L& ]% c g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
0 Z& q9 r7 G4 t# i/ }- X9 d }: m% d/ W) ~7 A0 l6 r5 F6 T
break;
. }1 r9 e' p" b* F0 m }. x) T) `0 Z, v7 _/ M8 `9 e' b
case 1:6 i6 y1 b$ T% N8 v5 F
{
0 B1 u2 Z V8 Z* r$ t# @# i //整理背包4 H3 o! F' Q! f. a( j
//////////////////////////////////////////////////////////////////////////* o4 F7 q$ c" E0 l, V. w" W
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );# a; `2 l9 x5 `$ I# l- Q% x
//////////////////////////////////////////////////////////////////////////
2 U+ c4 v1 P1 ^9 Z7 ^ //////////////////////////////////////////////////////////////////////////
5 |/ m: Z R6 \8 E# ~ CInventorySort* pInvSort = new CInventorySort;7 u' F* g9 X/ f# T& H- |7 s7 v
vector <sItem> vItem;
3 }( E8 g/ L- i+ G6 i4 {2 z vItem.resize(MAX_INVENTORY);//初始化大小
$ J! c9 P9 v# T- C, Y0 Y0 o, | //////////////////////////////////////////////////////////////////////////7 w2 z3 J$ F4 S
//填充数据
. y2 A, P# \. k/ @1 c4 _5 n" f for (int i=0;i<MAX_INVENTORY;i++)' [* a( w% A& M8 ~
{
' Z8 M+ J1 ^! S% n9 A- m CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);; R. [& A: M5 r3 P& B9 U4 e
if (!pItemElem)% X0 r/ y& a/ D7 h
{& m5 X) p$ i* c$ B7 ~' w5 r! c4 N
vItem.dwKind2 = 0xffffffff;8 P5 U4 q% F0 N. _+ Z5 c. a
vItem.dwItemId = 0xffffffff;
+ q1 ]9 C$ ?, ~% U4 ]8 Q% q1 F vItem.nIndex = i;
7 b ~$ q9 n% e }else {
$ B* T, g' d" h2 ]8 ^) w0 O- l ItemProp* pProp = pItemElem->GetProp();
0 i9 T" ~, d2 e0 z3 ? vItem.dwKind2 = pProp->dwItemKind2;" z0 K8 M# {( Y5 t
vItem.dwItemId = pItemElem->m_dwItemId;) n& y- c1 l; O( Q3 Z
vItem.nIndex = i;
8 r" y9 D+ V; W. \ }+ x" F$ f1 \ k) V; K/ X9 s3 l
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
2 K$ b* P/ a# \. j3 U }
) v, x0 h& d* r8 K //////////////////////////////////////////////////////////////////////////
$ T, z3 e, }1 |: S8 L' K+ g sort(vItem.begin(),vItem.end());//排序( R& [; z( j) G" J+ q
//////////////////////////////////////////////////////////////////////////) w6 q% F. `$ a2 Q- p" n
//交换
; X3 m \0 q3 n/ n+ |2 f for (size_t i=0;i<vItem.size();i++)- J4 {6 r5 T, s
{# w8 d& @+ U h+ h! S$ ^+ @- _5 ^* A8 U4 s
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);6 w, H, ]) l7 W* Q) t4 W
pInvSort->Add(vItem.nIndex); z2 X3 n# y+ s0 e& A5 k6 D7 d
}: _$ v+ z3 }* V/ }+ K/ ?
BYTE nDestPos = 0;) P; i1 K- S0 O8 C
for (int i=0;i<MAX_INVENTORY;i++)
: `! @2 H! N: q {
. w1 X5 H' M) }; O9 H* W+ l/ P7 y CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
/ ~- T7 j7 p5 D; b! e- } if (pItemElem)
' m2 |/ P$ y$ H7 i% p( g4 x c {
2 J1 i$ d' s( M1 ~1 z) } if (IsUsingItem(pItemElem))
, r0 \) q# B+ S1 R; x9 ~ {
+ B+ u: M8 l Q3 C7 r# Z //这个位置无法放
7 R! K; d( C1 K5 h nDestPos++;
9 B# [8 ~/ O l) S' d2 R6 E }
) t- k+ G4 u3 L }
9 C; r& g* Q) Z: g BYTE nSrc = pInvSort->GetItemSrc(i);
, ]. C5 K# J1 d pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
' b( h: d1 u* _5 R h# F- E1 S if (pItemElem)
: t. b2 U( J( K6 ^9 W {
8 G. ?$ P; M- D t% O/ k/ X3 ^ if (IsUsingItem(pItemElem))' T% ^( |& [- S1 e
{, u% h0 V! g* d3 l7 Y
//这个道具无法移动,跳过- R6 S' p# q0 M
continue;+ t4 t5 Z8 I8 u4 {, k+ D- Y
}
& h0 n* l: u3 S; ^! y) v$ t" A2 P }else{% I9 t+ k7 _# f, K6 N% ?7 M
//空位置 不用动4 S- C" ^' t# t' c$ F
continue;' n% N8 G( i1 N- ~: S2 F" q
}
7 `3 R) E1 j X+ X! L& f //////////////////////////////////////////////////////////////////////////7 H1 Y ~* O8 n1 R
//开始移动7 Z& R5 c7 @$ @1 [- M9 W( N
if (nSrc == nDestPos)
4 c P# [+ }9 N2 u! H3 ] {: S9 F* {" t6 x8 T3 g% y n
//原地不动
( t* D1 W; D7 u' Z/ k nDestPos++;* A+ C7 T- K T( }- W; h. }, B) T. Y
continue;
3 b' O/ D5 \; _, M7 \) L" ` }1 ] F9 C1 B; ]* p( ?. n+ c
pInvSort->MoveItem(i,nDestPos);
# E# {1 z" b) B/ B: J4 m g_DPlay.SendMoveItem(0,nSrc,nDestPos);
. \& J3 h2 A, s' h* W Sleep(5);
1 t& Q4 G# K2 ~. e9 c9 a d //Error("移动 - %d->%d",nSrc,nDestPos);
4 c7 K( I& w; |5 R nDestPos++;
; t/ |# F; y6 q" T4 }% ?: g& i2 @- z7 P }
% K: Q2 p- E( I% X0 J0 s. T //取第一个元素的信息2 Z; D5 Y$ u/ Q
/*6 l/ |! A1 F5 j5 O; }% Y5 S
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
( z, u2 M. _: n2 [/ x' E {
- J/ M: _0 w% A5 i3 j2 B Error("Move - From:%d,To:%d",vItem[0].nIndex,x);3 g. T3 Y2 Z; d1 B2 U' G
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);5 g/ `1 X6 S8 |2 o9 Y0 q% i8 c' Q) z
}7 S @) N9 b5 @ U+ ^4 X
*/
$ a. E7 N4 E% ?% {2 G //////////////////////////////////////////////////////////////////////////' s# e8 E- F! R- A# q8 `: }' r
break;
/ ~* E/ [0 X+ ] H }4 n1 u& U! g, N C" q
} , y! Y" R# r# ]2 V
}
, P! F$ a) E" h' {m_wndMenu.SetVisible(FALSE);
# _$ H2 W" Z2 G" Q* l+ `
/ @. o3 r% n1 I. u# C--------------------------------------------------------------------------------------------------------
* u3 H9 K% ~* l( P9 m搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
4 T8 x8 u$ D! i8 I2 x1 t! t{& Y$ _% S( @3 ?! t4 }+ K
BaseMouseCursor();
3 W; |: U V i: D4 l6 Q$ }}
1 D' b" v# G6 O! x+ b0 }' q在其下添加:
! v8 s) n! I) z avoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
- k. o' r. ^+ k! R{
2 G4 ]) Y7 r, w6 tm_wndMenu.DeleteAllMenu();
3 t: c9 c6 K0 M0 f8 y6 qm_wndMenu.CreateMenu(this);
. L- S, P4 c6 X: D) [8 N# ]+ V/ Zm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
+ w/ B# X o4 W6 z$ W: t: x0 ?+ \6 o3 b$ U3 P3 O( t8 q8 n+ [
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
+ T6 {9 v3 y- s! K) t{8 C# m/ T" E0 D- c& j2 }2 J
//P以上级别才可以删除所有道具, F; R4 h7 Y) D3 x
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");# }+ Y1 U6 Z8 N8 i6 \
}6 s/ g( r4 s: ?9 A* D
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );3 N* h# M8 `* H9 H% ~4 s
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
; w/ J" b$ E7 S1 n( x6 x) qm_wndMenu.SetFocus();
5 D: D8 n. M: X: I}* [; t: W4 ]9 T6 f- j* ]8 y
------------------------------------------------------------------------------------------------------------
2 R9 T6 M* N4 K4 R9 j- s*************************, Z3 x! `6 J/ s% p" a" z8 g# Y/ h2 u
WndField.h文件
) v& [7 ]4 F% ^! _5 N*************************
; K* K) k. |0 f0 e+ a& d搜索:BOOL m_bReport;
x" c4 n4 n, T+ r% n% |/ y其后添加:3 ^9 h0 D& W6 d) c6 U" P4 P0 V9 S
CWndMenu m_wndMenu;% p: O9 ]! l0 ]+ H
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);2 R j# e( ^+ R( i8 C2 u0 M I
其后添加:7 }& f# e6 R+ I9 g' V
virtual void OnRButtonUp(UINT nFlags, CPoint point);
, }( n+ b3 d: T! g! S$ O
, W s Z' \! |- t/ Y( c
/ s% r8 Y& C: @4 a9 H |
|