|
|
源文件中_Interface文件夹下WndField.cpp文件
1 a J& C$ |! q* n搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )& l# ~0 h/ K n3 D$ Z4 V
. ?: l. ]+ G! C- P
struct sItem9 Q! y0 Y+ j4 B. N% s# b0 Z& q7 g
{
) I' _% D9 Z# n* S" r0 kDWORD dwId;
! S. b% {# J, H0 L! F) ODWORD dwKind2;
* d! [- F+ P- H4 N* `, G0 nDWORD dwItemId;% w/ ^# I4 x+ ~$ w( ~
BYTE nIndex;/ m/ [- }# D; P3 h# u
sItem(){3 d# V3 V+ H* V) ?
dwId = dwKind2 = dwItemId = nIndex = 0;" \5 [( J+ I) F
}
+ }5 b# T ^9 l0 Nbool operator < (const sItem p2)
q( x0 ^8 s/ C* e, T$ ~{9 h; { ]7 r9 T& j
if (dwKind2 == p2.dwKind2)
, l; J# N6 x+ u1 y% X {
/ d m+ O. g( M. k! m return dwItemId < p2.dwItemId;. U8 X: ^ q+ c7 f' T6 h
}else{5 _, l: M7 l0 h
return dwKind2 < p2.dwKind2;
6 I# m h5 C, D7 P }$ k$ ]+ s2 w, e) W% r$ e
}
8 a* |# O E; D- ]) U6 [7 c};
: Z' e: m! ^* M; C, Oclass CInventorySort) A' n p- x6 s" @
{/ c# @! M. T0 W2 N4 a) g3 \+ C* D0 ]
public:
, d6 s! J+ E4 a* a, e/ x9 D( \9 wCInventorySort()
8 D0 K8 \ k @0 q3 {5 i{
9 Y# c1 x2 M8 J) D! q# U m_dwPos = 0;1 z5 l* m6 E9 S6 @2 y% Q
}5 ]1 ?& x: l1 L
~CInventorySort(){}" T0 Z) d9 N/ ^% K# j& O
private:
\! G+ l! X ^# B, J& n M) s- J& IsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息 ~5 r* g/ q3 ^/ w9 o) W
DWORD m_dwPos;
1 S9 ~6 e9 Y8 Y7 m) T4 ipublic:
" v3 t% L4 _1 O: rvoid Add(BYTE nIndex)
; V8 m- o" @3 P; | `; o3 j# i{5 D. L2 \1 Q2 T6 b1 E5 h% O7 L
if (m_dwPos >= MAX_INVENTORY)# G" n& ]. O- q, e3 q+ \* {
{
/ w* e1 a) J6 \# e3 ^ return;" X6 c& J# N0 a& J+ O9 M; f
}7 @# l4 ^& R1 f6 e0 T
m_Item[m_dwPos].nIndex = nIndex;" x; J# F( Q' \5 p
m_Item[m_dwPos].dwId = m_dwPos;
4 F$ g1 H; C8 i& ^2 `3 [ m_dwPos++;/ O0 J8 r0 V" s6 k, D$ X" ]
}/ Q' i! }% {, _- U+ l4 n
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列: p/ |0 i* y3 o5 V! N/ L3 E9 p
{ F# g N1 K, Z2 U& E. F4 N0 N
for (int i=0;i<MAX_INVENTORY;i++). X) s" f9 ^" P/ E% t1 e$ u$ K
{4 b* S/ Y( Q% H! y9 J! c) T
if (m_Item.dwId == dwId)
t2 O$ e# i: T) o+ T {' h- q6 o3 K7 }% k! ~2 z4 H# z! e* v$ r, U( |
return m_Item.nIndex;; d+ r& K$ R! l2 K3 I
}2 i2 B% b$ [0 n2 Y: x$ k& G
}5 ]2 p3 B& ~# Y9 ~9 d, N
return 255;. l; k" P5 r( x/ o) Q* _
}( `( @; J. _4 } P0 r3 Y
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置1 m' t2 Y. m' t- ^; _
{- b: U% O4 o, I# @' ~ Z9 [" z
BYTE nTmp = 0;
. k- x3 h# S; `# }0 O bool bDest = false,bSrc = false;$ d% |* G. @' L5 Z% m f2 n# S ~
for (int i=0;i<MAX_INVENTORY;i++)
R5 w# G1 K7 o/ N) {4 F4 Z0 y( _ {
+ T* _: [- t, t if (dwSrcId == m_Item.dwId)9 N, T6 j: @0 u
{$ p _+ h9 A" t8 E9 {: y4 {$ c0 W
//id相等 则 改变对应的dest和src# k5 F, p7 @4 s* @0 B
nTmp = m_Item.nIndex;
, X, ?8 m: u- U m_Item.nIndex = dest;# `2 I0 p5 f1 w: v
}, @1 q- @' a2 K' O
}
. w# L4 _) M9 a2 s //临时数据保存完毕,交换开始
0 w+ l* X n3 M# h( [" o/ s+ O for (int i=0;i<MAX_INVENTORY;i++)
" B3 S5 z( U# U/ o6 b$ B" i9 b6 j {" c/ }. o; h" C {9 V# P# O5 o
if (dest == m_Item.nIndex)$ u( Z* k7 ~, S( Q# i
{; l+ m" p( k$ V5 o7 ^; u& p
//id相等 则 改变对应的dest和src1 r9 [+ e6 l+ o4 p" w8 S
m_Item.nIndex = nTmp;
5 Q' C7 b5 {2 n1 r }
, e3 T1 ~, N4 m; J$ w u5 h. M }
6 `# v Y) S% _7 [1 M9 H}
+ }! ~( d- ^' _3 u" I% h};: N- L" A6 X- B* d* D
-------------------------------------------------------------------------
2 ~& K0 ~2 k, m. F0 f9 O* J: R依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
5 v. }# ~" U5 e7 o% S6 i Z搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
! k7 \6 H( o) U! }7 P: w' q紧靠其上添加:. ]! N4 O/ l0 x p' v5 t9 h3 g
if( pWndBase == &m_wndMenu )! l7 ~ W2 k+ S& f( X' l1 L# j& {
{
' P/ \$ `8 ]$ U' a( q switch( nID )
F. u0 e# Q+ Y$ P6 p( B h& r3 P; B {
2 x5 Y+ {) v9 H2 Y5 P0 r/ P9 U/ B& m case 2:
9 {7 g, K) ^) F* s* _. B A {6 `2 M% \; }* F8 y8 C
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);' z* ~' [ n+ Y/ D
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))# ], C( W* z$ d, Z' s( L
{& X/ h @# g5 b/ D& A5 i
break;
8 A. L0 G2 b" A }
2 ?% v4 ^$ h+ H' T8 Y7 X% w+ K) ?$ k for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)7 i- D2 b% Q8 v" ?' [* I
{
# G0 g& M- F) c; G CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
n) y" C7 n4 [& Z) Q7 b$ p5 C if( !pItemElem ): {5 d+ @' a/ P( ]8 k+ {! i
continue;
8 ^9 ] X# w8 {6 g" C- E if(pItemElem->GetExtra() > 0)
0 I' ]. g9 w) O. u# h5 R8 | continue;* n8 G9 v) _3 M% g* V
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
0 N4 P o4 j- T! T1 U continue;% M1 K+ g. O9 T: T" Y& n- j
if( g_pPlayer->IsUsing( pItemElem ) )5 R6 f1 i9 ?4 q
continue;
8 T! r" a+ P# K, V if( pItemElem->IsUndestructable() == TRUE )
; I4 H' j' t+ Q2 }+ s {( r! Y% ] n& W$ N7 W0 q2 E5 R
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );3 S$ H }% n* d0 a8 @, E
continue;
& {1 @% k% u& V5 F) U& q }
' T0 O4 _6 A! G$ c( t1 y ?5 @ g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
9 X/ O5 c: i+ v6 H6 m* C9 H# X" u }7 K0 c" j1 X( s
break;
$ Y% p4 J# @$ e7 I }$ w/ N3 i3 `; a* h2 g/ m" O7 y
case 1:
/ D& w# Y9 e$ P! K( J/ q H {
R$ {& }1 m- U' p" K: _ //整理背包1 p& e7 D* T) h
//////////////////////////////////////////////////////////////////////////' L3 U9 q) q/ p' L
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );, q$ c, ?) {, C8 h. e1 P5 ^' h
//////////////////////////////////////////////////////////////////////////
8 ]; p0 N1 Z- Q8 }; \; ] //////////////////////////////////////////////////////////////////////////
8 ^& {- J7 c$ i+ J- O/ M7 a. b$ x CInventorySort* pInvSort = new CInventorySort;; w& B4 u1 o) ~* M
vector <sItem> vItem;
% D- p4 \0 R/ {9 F vItem.resize(MAX_INVENTORY);//初始化大小
( _& d. L8 \9 k& [9 M& x F //////////////////////////////////////////////////////////////////////////: p$ J7 Q0 N2 L, y( M; W
//填充数据$ T* ]0 F( F( Z0 ^' q/ r
for (int i=0;i<MAX_INVENTORY;i++)# u( F3 d- D' r* `
{; J# C% P/ h, A' b" ^8 M G
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
( l/ g# ?6 Q' e H if (!pItemElem)
4 G( Q1 x& S* U5 f& _ {0 V. {4 ?' v% K. d9 J( s
vItem.dwKind2 = 0xffffffff;# n2 t/ {% S$ p
vItem.dwItemId = 0xffffffff;! l; z" j6 V0 p4 g) ~& h* e4 c
vItem.nIndex = i;
* Q* R% L" H, D- ]' T }else {
* ~* \( x2 ~/ o( n P; t ItemProp* pProp = pItemElem->GetProp();
}3 T# h2 w2 Y' c# t vItem.dwKind2 = pProp->dwItemKind2;# I2 i% K' H, `8 s8 {* F
vItem.dwItemId = pItemElem->m_dwItemId;/ g' P0 i' k6 Q# d& ~+ R, v; d! c
vItem.nIndex = i;
7 K8 ^) b# m1 R. g' _ }
% n x t$ m6 l { //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
) K' G0 h" N5 R, ]* N! j }
- U5 F6 k/ U: h6 N; N$ V$ a //////////////////////////////////////////////////////////////////////////
, E3 L: l/ v0 J0 t. Q* l sort(vItem.begin(),vItem.end());//排序
* [& z! _; Q" L, J& `" k9 Y //////////////////////////////////////////////////////////////////////////' a- C. H1 K+ t: D" C* V: t
//交换! m/ _( p6 {1 R
for (size_t i=0;i<vItem.size();i++). `! M% j3 `$ w1 G% V
{ P6 \& z6 }) M1 t: j. N0 C
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);5 F( \6 |: f4 R9 C
pInvSort->Add(vItem.nIndex);% q0 c2 N# y: s8 D
}; ?. A; i: C$ h5 B5 F
BYTE nDestPos = 0;
! t( _, e- p; ~; G' y) _" n' G for (int i=0;i<MAX_INVENTORY;i++)
) J- l: D- b1 B( C4 I) d. Y2 w {
/ ]3 w" h* |4 D" r/ p( }% @* _0 Q CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
2 d2 o" B+ J0 h; ?, N2 H if (pItemElem) r$ G6 I4 ?6 B" C% ?0 |/ V! L
{0 l) {% E" G D- i
if (IsUsingItem(pItemElem))4 L6 ?* g4 r$ \6 |. X+ ^. J
{
: n% s( `3 X+ c& O! s9 u3 r" ? //这个位置无法放( t D4 V( E! I/ [( [
nDestPos++;- B0 ?8 r$ _! b! x: g
}
; X# l% I# Y8 z; h }
& o2 n3 m9 j# Z BYTE nSrc = pInvSort->GetItemSrc(i);' M- z( b4 j3 t2 m& Q9 f: J9 ]' E
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);" Z) c8 c' C9 r+ O8 C8 d" R' Y
if (pItemElem)
" ~ k5 s/ m3 x H& H" v# v- G {
( e2 e6 ]: u: L$ N' S& j ~" K if (IsUsingItem(pItemElem))
# \) y1 G# {- w1 g) X {: G# @$ x/ A) d$ V% M. p- T
//这个道具无法移动,跳过1 h) X0 ]. E7 w1 [ K V
continue;, X3 c& L9 |# d t
}
* T8 t( D; |1 p4 l }else{
) q9 i/ E5 s! P& a7 q; ~. S- W4 I4 E //空位置 不用动
! O+ c4 [. h' n4 U0 Z continue;8 \! Y y/ V; C2 m
}+ Z' V! `0 `+ t! Y. v7 ]1 p
//////////////////////////////////////////////////////////////////////////
l, G8 J# Q _% z ~ //开始移动
4 E, C& `! {: p( i! T if (nSrc == nDestPos)
: }8 O( q! r; a2 G {
4 ^! n; i$ C! D/ I- E2 G //原地不动& ^" I6 m+ O5 c% N
nDestPos++;9 V4 O, c' t" [( _0 L# X# N
continue;
' y" `7 {$ O R, h. D }
7 o/ X/ f- h* Z pInvSort->MoveItem(i,nDestPos);! f& j, x' J; y% w
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
* t* V4 B# \( e6 }4 E* n Sleep(5);9 C7 \+ i' q( h4 ]
//Error("移动 - %d->%d",nSrc,nDestPos);
, G, S- q6 N& Q/ o \+ [* x. Z4 N nDestPos++;! D. G3 f# m" n/ ]5 `6 d
}$ }; ^ r& k) e1 |1 V; S! [4 ~
//取第一个元素的信息6 b3 h: _! k- B
/*
. N5 w) a; C" a4 Z* t2 j7 d, G o if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)! j* r$ n/ Y6 q
{
9 D8 L* V7 v {: i2 M, d7 I Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
" b# P- n' k+ M g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);, ]( g3 n0 u) T% t( q
}
4 W! k1 W# e( {0 k6 u */4 z2 M+ l# z3 {$ N) A5 A
//////////////////////////////////////////////////////////////////////////6 w5 z) G( X) g
break;
* C# C. P' B7 V1 L# p }
$ O" ~0 ?) V l. ^' l w+ {% ^( l }
- @% p& x$ \& N7 b# f}
d9 Y4 H4 ~1 z$ r0 x7 Am_wndMenu.SetVisible(FALSE);/ j) e# x3 l. }; p
5 [% v. }/ D3 n$ W5 A( W1 @/ Q3 \--------------------------------------------------------------------------------------------------------
2 {1 A0 M% q5 W9 C/ Y搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)8 }$ y+ m" n7 ~2 _3 O% i3 L8 R
{
) \# C! p; i T" ]( e s8 l" Q6 @% WBaseMouseCursor();
$ T9 A+ R: l% p! I}/ h6 f2 j1 R4 U( n: O4 T# v
在其下添加:1 w+ ]; r& R7 y2 O1 W
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
" U1 [; Z5 `& e) q0 ~{" P6 J/ g) k" J+ J$ w" P
m_wndMenu.DeleteAllMenu();
+ v* Y5 H2 n' Bm_wndMenu.CreateMenu(this);
6 x7 E w# k6 q) x( R3 l+ pm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
\! P6 Q$ t; M
, a* H$ w5 `8 Q6 Q% Z1 y2 P) jif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
) `- b, @/ d1 m% Z" T{
) \" Z& c" [; a) b( N: c //P以上级别才可以删除所有道具& h; n5 ?$ M i' Y/ k
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");* _( {4 \$ ^8 }8 M Z) L6 g
}! |! G3 ^2 |1 b3 S
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
$ v, h6 Z9 o( v2 [4 \m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );8 p" v0 N" w$ ]3 l
m_wndMenu.SetFocus();
% f1 V2 e5 d4 S0 }) X}
6 M; p1 E" K" Z# y------------------------------------------------------------------------------------------------------------( `/ j9 J. ?+ S" c& p' o- c3 O
*************************
1 [' x9 Y& Z4 i8 y$ tWndField.h文件
# {- w; \7 v, M' t: h" f*************************
6 N6 m- ~4 ~- Z3 T搜索:BOOL m_bReport;
7 B1 s; e7 N( j' u; Z* l. t! Z其后添加:
2 L1 r9 J6 u2 y$ e, t/ pCWndMenu m_wndMenu;
6 @9 H) r( \4 F* y* x搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
7 k) Q$ ?- F. w其后添加:
$ k G) X% f. X1 @) }% kvirtual void OnRButtonUp(UINT nFlags, CPoint point);
# J$ a( L. U. e j" b! [
8 y- V' Y0 ]8 [) L" D- z& b2 }" L( U3 y1 j' l/ o$ q
|
|