|
|
源文件中_Interface文件夹下WndField.cpp文件! ?8 k# r% `3 g% w- ^* g) ?
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )1 z7 G" j1 r6 ^; ~
$ ]# s1 X. F+ U" i% S* N' U, _3 estruct sItem
) M5 R9 q/ R% d* I{% H" c; M& \* K& i+ x/ A
DWORD dwId;+ D5 X S) w# D {5 ~5 c/ ?
DWORD dwKind2;
( c; w8 a, A _2 _' `: \DWORD dwItemId;1 l$ K# C1 Q& F& c9 {# c
BYTE nIndex;
+ }( p5 J3 o- h6 N" U7 S0 [* JsItem(){
+ T- s4 v# g( }7 _7 h9 s dwId = dwKind2 = dwItemId = nIndex = 0;
2 @ z8 O& F. K7 U4 I) d}3 z. J9 a+ }! H4 F7 N5 ^9 f2 ~' V& I
bool operator < (const sItem p2); r8 _* ?; X+ o. M. y
{
5 H; b9 H+ K( P: ` if (dwKind2 == p2.dwKind2)
4 s0 Y7 d" [. v* k {0 Z" s" y& k3 s5 z7 ?* _
return dwItemId < p2.dwItemId;0 q( m8 f( _! J8 p0 V
}else{
, U j: D/ Q# \& p9 \3 t return dwKind2 < p2.dwKind2;9 s+ H) I8 W4 k. `7 b+ J: I9 x
} C4 l5 P6 G+ E$ ]; [( ~7 q
}
4 p7 H2 A0 V9 c};; u5 E' y5 }) G( X+ V- ^
class CInventorySort
. S+ t% }: j+ x7 P" A \$ J{: [* q. w' n4 `1 U' P; j" S; [
public:
% F7 ^. p! S! Y; kCInventorySort()# g5 l8 N: c- m8 ] q Q4 s
{
: p" }0 \5 P& Y+ v7 \; h2 u% s m_dwPos = 0;* s, K% O6 ]/ P3 a! I6 Q
}" s7 ~( \5 D% t4 P: w3 U
~CInventorySort(){}
6 k8 I0 [; B/ ]! u4 i$ Gprivate:
* S; C+ n0 d1 f8 f+ ~/ ~, p# z5 wsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息0 C; U2 e1 T+ n1 M$ W
DWORD m_dwPos;
6 h5 I- g& y/ p k8 Jpublic:* B8 p; L3 |3 ~ ^9 R( x+ X7 W( p
void Add(BYTE nIndex)
6 h3 U- O3 p# \$ X$ V6 W{0 [$ f' B2 M% f) t8 }. Z I/ d
if (m_dwPos >= MAX_INVENTORY)
& B" [6 f: o( b$ g) a! { {* m" T: p% h1 T" E& F
return;
% N. d o7 n8 J/ T- R, I }
3 K' U0 o% |* @6 f& ^7 j' w2 t m_Item[m_dwPos].nIndex = nIndex; o, V% c0 ?/ r" t' W4 s
m_Item[m_dwPos].dwId = m_dwPos;
5 q' f% w4 j, J$ g! v' G: F m_dwPos++;
8 k* L" J+ ?4 }}$ N8 p" D3 ^, G0 C' _( a! t P7 i% L
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列. X W! [$ R1 V' g* Q
{
+ y& ]. l; f* y' l$ P" O C for (int i=0;i<MAX_INVENTORY;i++)
; _. J! @5 B/ q( O* ?) i3 [2 O) k {) {' g. P' i" g I5 h, x
if (m_Item.dwId == dwId)
* Y+ B$ t6 z, Z0 a+ G! F# U {) `2 K. d) m1 q& Q: P3 e$ O9 C ^
return m_Item.nIndex;: E9 c. Z* j$ S, {
}/ {9 f( M) Q( b
}
% x5 E% I6 C# L return 255;
# V8 o _" l: k) k}
; R0 ]% Z5 G$ q3 lvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
+ j& s8 o5 Q" h1 y{
/ T8 K( V! y& o( M' O. l( J3 t$ l BYTE nTmp = 0;/ |6 Q* k4 I0 `- q
bool bDest = false,bSrc = false;1 r: F) b' n3 J v$ l4 s
for (int i=0;i<MAX_INVENTORY;i++)
+ j1 [+ C) S; f, U" y {+ d) |5 S5 Z# N2 a: C4 w ]
if (dwSrcId == m_Item.dwId)! a; |+ Z/ M! u
{
5 b% [7 H2 w1 l //id相等 则 改变对应的dest和src" b" S. \8 w l# R9 q
nTmp = m_Item.nIndex;- ^4 l$ O- Z0 x! D# i1 G! j
m_Item.nIndex = dest;
; M) p; d; C( R4 _ }
: s* s/ {( \. a- R% N }
9 Y |2 I$ F a) a //临时数据保存完毕,交换开始: x( I! V6 w4 N: k' b
for (int i=0;i<MAX_INVENTORY;i++)
5 r) v$ R# n/ X4 K# r0 m) w2 B1 e* k6 r {: \$ P% j& z. q6 C
if (dest == m_Item.nIndex)
& N5 R6 `+ k$ p0 Q( d3 y, k1 {! n* v { f5 u% j$ a7 e" e% c# s. s
//id相等 则 改变对应的dest和src
9 C* _9 {' g3 b7 F/ P- v: r' h m_Item.nIndex = nTmp;2 K" @! Z, G% a$ I# f
}
; c9 u( X" w. ~! [, f# j7 D4 f% v/ E; J }- y8 E/ }* O, V8 |8 }- i1 Y
}
" ~) N. K8 l! Q. J};
4 V& s0 p& a4 ~/ {-------------------------------------------------------------------------! q& @# x& v" o% a8 M" c' t2 j
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
% Z8 ^& u* _4 l2 ]搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);, n4 R O2 {# n6 u; F
紧靠其上添加:4 T# Q0 e& d- u5 o1 b! f- P
if( pWndBase == &m_wndMenu )
7 _. _) F3 G( N8 @: H3 v% ~{5 j% ?" }9 X: f' G7 Y
switch( nID )" @% x2 o/ W# J
{
- u% u' s2 v! q( ]3 r t4 f1 q case 2:$ s$ w% Q2 m! K* q6 @4 _
{
# Q' t' E2 k3 A //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
0 S9 o: O! ~" I6 |- i if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)). r" g8 ?* `% m
{
. P |) P% w2 l1 e- q/ J break;
. e P8 ]2 @: D& ]) M0 ^! E }
?* c2 D: _) J+ I, s for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
* K; r8 b7 F% I" w4 C, Q' l' { {% u: I' m0 O; U$ {
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);& G, J/ {) k5 @: n1 `, s
if( !pItemElem )
7 G& ^% ]$ V4 n+ m3 d: `) U continue;' Y$ q$ W: D- T
if(pItemElem->GetExtra() > 0)) R7 ^) _7 O6 b
continue;
i: J% G% q7 } if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 1 Y O/ s. Z' b+ H+ |. d9 X
continue;- @* O# S) O C H5 N) A4 G9 f
if( g_pPlayer->IsUsing( pItemElem ) )
3 G* c; v6 v2 S- n) t+ }/ Y+ c continue;/ `1 \$ R4 N$ n5 h% @* q
if( pItemElem->IsUndestructable() == TRUE )
+ C- u+ T. E9 ~: g3 l {
8 s" O3 s ]' K8 r: ~/ ]# f g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
& @: R8 V3 ?' W4 U* E1 H continue;6 \9 E* |* |5 o& u
}
! a8 L3 @$ _, J# U" b8 D/ ^; j g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);- h6 K9 H- U: x* N) ~5 @ o- o0 U
}
; g( Q5 u" ]8 |6 `# ^8 f break;/ |* G. @; `5 u) ^7 o; t+ R4 }. ~; C& P
}5 {8 {! A$ X% X4 d$ {& |
case 1:
- N; t3 p" i- r {
7 ~& |) C5 f# S* ^ //整理背包& G& Z, p3 \9 }6 e
//////////////////////////////////////////////////////////////////////////( n+ _; G" n' A. E/ L a
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
8 @/ r$ q1 P- t# d- } //////////////////////////////////////////////////////////////////////////
. ^5 ?7 C) y1 ]8 q //////////////////////////////////////////////////////////////////////////+ H% @7 J! t8 e) S) P( z8 j
CInventorySort* pInvSort = new CInventorySort;9 N' r2 {) S4 A- U
vector <sItem> vItem;3 N" X9 j+ ~+ \* c1 S9 H- N
vItem.resize(MAX_INVENTORY);//初始化大小
# B' L0 c8 z/ j5 c# X4 m //////////////////////////////////////////////////////////////////////////( M2 u4 y+ h$ T2 F6 _9 V
//填充数据( o5 m- P0 K+ z! W
for (int i=0;i<MAX_INVENTORY;i++)
6 I P/ a& U' p) x; d9 I, D. R& e( b {
4 S$ A8 G% j( Y& D CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);$ M; a ]: `- U
if (!pItemElem)/ A8 X5 n6 n; g8 B
{
# w! a# Y1 B: c7 { vItem.dwKind2 = 0xffffffff;( \3 W3 s, `! X/ j Y
vItem.dwItemId = 0xffffffff;
8 R" D" q5 ]5 [* K) ] vItem.nIndex = i;
7 C6 K/ t5 E; ~% _+ o, \" c2 | }else {3 `) j* m9 W/ X0 }4 V0 v0 r/ Y
ItemProp* pProp = pItemElem->GetProp();% R/ E+ B# \) u+ R7 Y. M
vItem.dwKind2 = pProp->dwItemKind2;
1 Z! R2 m/ r0 z2 p vItem.dwItemId = pItemElem->m_dwItemId;
( T; |5 N) W* b vItem.nIndex = i;1 z! ^) d! f' \8 V, U
}/ D+ e/ t& v& _$ U# I
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
4 k8 G( K' }# _2 h }
6 [4 L- Q" ^7 \5 d; O //////////////////////////////////////////////////////////////////////////
- b0 z( s& p; T. w8 ]& ]1 o/ | sort(vItem.begin(),vItem.end());//排序
( ?5 Y7 N" g- z% b( S$ g$ h8 h0 \. l //////////////////////////////////////////////////////////////////////////
4 q9 p9 B& ]; b, d. z2 d //交换
/ U; D% c% d- {( [7 z) N* H `+ U& W for (size_t i=0;i<vItem.size();i++)9 U: T1 b/ ?- x/ p5 _+ d
{
# \' U1 M) Y; L //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
! ~9 g$ O' t; B% ~ pInvSort->Add(vItem.nIndex);
0 K" B5 q# z @' b9 {, D5 B' J6 y) x }" H2 X6 C( r6 {; O
BYTE nDestPos = 0;
# M( E/ g7 V6 K9 Z& [7 D9 A for (int i=0;i<MAX_INVENTORY;i++)$ U4 i1 v: S: Y! Y3 Z8 {
{
- b6 l( B0 Q5 ^, b" R; Y3 o CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);* G' X# ]( F# E/ u
if (pItemElem)
8 W( j* X) R3 D |7 J {) N0 Z4 [6 [( X, f$ r% V
if (IsUsingItem(pItemElem))" V* I1 n0 k" }4 V
{1 H/ d& I/ a4 C
//这个位置无法放
d5 N4 j' \9 Z- c8 Y nDestPos++;$ F9 X7 J* ?8 L6 f/ q
}
( R# H9 O# `/ o ]8 U }
1 [7 O) U& N& ^ BYTE nSrc = pInvSort->GetItemSrc(i);' c( t7 ~; F- Z. p/ n4 b8 `, v7 y
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);( K: f" c: ^+ f8 Z9 G
if (pItemElem)& k3 m+ P+ K& M4 b; D
{
4 {7 S' n1 j/ ^! S if (IsUsingItem(pItemElem))
: z( q1 v, T" ]5 X7 E2 H0 B {
- g2 G, I: ~/ a' ~1 ` //这个道具无法移动,跳过
1 g4 R9 }- v0 j( u& A% f continue;
& S4 Q( L# L9 w( F9 i D5 z) g }! B! }3 E) e" G& Y$ v# |0 z
}else{
/ o' e% J1 b' H! z3 b- q //空位置 不用动
, f! j) U9 t: q5 J continue;3 q2 s: Q% N7 v& k
}' ]9 D1 p' V+ h
//////////////////////////////////////////////////////////////////////////
# s6 U5 {+ R) V //开始移动
E u6 X0 H- k' P- [3 d2 C if (nSrc == nDestPos)% ]7 c3 v( F) Q& a# ~
{
& a8 _/ w1 O8 _! \- B A# z //原地不动
5 Y' B3 O* {. Q$ g g/ Q7 M# g0 d4 `) o nDestPos++;7 C3 {# v" [9 p. B0 b
continue;3 V/ Y, A' Y/ P k- P5 s
}
# g' k& D9 [; S" V2 T pInvSort->MoveItem(i,nDestPos);+ Z' V! F+ d. u& m6 g! c
g_DPlay.SendMoveItem(0,nSrc,nDestPos);7 T4 C2 k- M4 ?! J0 D
Sleep(5);6 s$ h/ @6 @1 c) s
//Error("移动 - %d->%d",nSrc,nDestPos);+ |' G$ {3 S1 r8 D- ?3 `- ^' z$ K' Q. M
nDestPos++;
2 E7 ~ `% [) y# a- `9 X }
2 T3 I ~" C+ z! B //取第一个元素的信息
# z/ p7 L0 {) n1 i( C, z /*
$ k$ W U: K' S) r- H2 A- [: T if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff). U# ]0 X1 N& [5 ]5 j1 s
{) m8 B3 t) w3 @, T; N0 k$ j; I
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
( s/ j7 C. \5 e1 L% D g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
% ^* Q) H% B5 P1 M" Y }
8 E# c9 j: i$ H) R4 G* _6 l */
3 J5 Y( `- P; _/ e& C' J //////////////////////////////////////////////////////////////////////////
: U4 \" m3 K3 c2 L/ m1 b break;
7 C, }0 M$ g% K+ @( H; { } K$ P6 V$ _5 B: [4 E
} ! J1 ~! Z% W. B2 q
}6 v: D, V4 s2 P+ [) f0 l( T
m_wndMenu.SetVisible(FALSE);
1 c+ D0 z! t2 [) v$ @6 f& z P6 K0 d' J. |: r. ]3 B1 ?
--------------------------------------------------------------------------------------------------------% i/ b7 h! u& Z/ l6 e2 e
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
( V$ d$ I: ~3 p) m6 w C% W{
3 A( _6 e; r( g( @" @, I. NBaseMouseCursor();" Q% \, b8 G# y: ]0 d
}& c/ q& p% i' e
在其下添加:9 E) d% E, z( r. I* Q- z
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
: M( H- i/ M3 R- O5 `2 z V" T9 t! W" e{* H1 U2 d$ h! e6 M, d0 ~0 \
m_wndMenu.DeleteAllMenu();, n: ?# E7 R" H8 k. O7 {6 U
m_wndMenu.CreateMenu(this);8 k7 L# f q% M0 S% A3 ?+ l( x" f
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
" C y: H1 I7 i
/ u9 U) A: `1 {( oif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
, r- G h2 {3 Q0 A{
, k! y9 B* p% j1 [ //P以上级别才可以删除所有道具. d& u& f8 X1 S$ [2 Z6 C
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
$ H. K9 X7 J6 H4 d/ G/ Z# ]}
' z1 N8 n. H, P& d' u* [1 N+ p# m% fm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
O e; Z8 ]; c, f, Y) cm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
' P% i1 |% ]+ q% l8 ?) M# \m_wndMenu.SetFocus();: a6 @( @" E4 }
}
, v: W* h: m) K" E [2 p2 s$ F Z- G------------------------------------------------------------------------------------------------------------; o- z! f; F, p& `: U/ r
*************************! d. ~' f" i5 K# h! k8 _
WndField.h文件# K0 e9 N/ u1 V
*************************
4 e7 i# ]. J8 V; `% e搜索:BOOL m_bReport;0 y* I. \ v+ x+ D: w( x
其后添加:
! ?" D2 \7 m$ R" ICWndMenu m_wndMenu;4 U0 N9 l6 W# p1 j9 T
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);. I8 t* v6 Y# P$ b
其后添加:- y6 E/ U1 V0 X4 B/ C2 c: j: ~: |7 u
virtual void OnRButtonUp(UINT nFlags, CPoint point);3 j T0 }' h4 V& B& L, b( a& |
% i/ J: J, h5 G# a7 M' ~' _
* Q+ J: A3 m0 u5 d$ y7 R
|
|