|
|
源文件中_Interface文件夹下WndField.cpp文件
% D q+ @! B- m. ^" d搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )% U0 P9 W, l! T z
r" Z3 i+ X1 {struct sItem
' x4 ^8 f; n8 C1 | o{
# U/ V- e/ H& |" R6 g$ x1 ~DWORD dwId;# g0 G6 N9 {5 s" L
DWORD dwKind2;
* c, P: F5 O- lDWORD dwItemId;
$ F6 ?$ r2 U1 k- w' sBYTE nIndex;1 N/ z; l. C# g+ G# e. b
sItem(){
8 d' d) i C# ~! n+ ~( j dwId = dwKind2 = dwItemId = nIndex = 0;! p6 l8 u/ ]: R7 Y
}
6 E" C. ^% s$ c3 ]/ i- Hbool operator < (const sItem p2)
- i; x: v3 B. Q5 _- H/ f/ y{* k) M' s- e3 W! ?3 v) Q& }$ a
if (dwKind2 == p2.dwKind2). P! F1 Q1 }$ S% G* Q
{2 h0 s6 M) @9 w k5 R; X
return dwItemId < p2.dwItemId;& j6 C7 d0 ?5 W8 Q( p3 l' G
}else{9 Y# k. l+ T( g% ^4 Q. w
return dwKind2 < p2.dwKind2;
5 ~& @% r0 Q. n# L# a9 | }
3 l" H* O3 g0 b' g0 s; W}$ o8 l, ^7 c3 L! _8 ^6 ^1 q
};, K3 k E; d' h- R6 F/ v) T
class CInventorySort5 @; `( {0 v4 g6 v: H+ V. o" S
{) [/ b; `* B" x3 r+ w( ~
public:% ] @; P K! O4 K# w2 @
CInventorySort()
$ t" v7 U2 ~/ K% H; S2 o{2 |9 C0 s! n2 i) K
m_dwPos = 0;
6 M# y% q# Z# f# s5 ?}
$ p. H0 P1 w3 f F+ K~CInventorySort(){}: h* s- J# |5 L% v0 A7 \" v
private:
0 j) r' h" [3 D6 A7 Q. U# ssItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
& I& I& e: b: L/ S0 O) s nDWORD m_dwPos;
$ E4 G) M3 u {public:
+ A' }) S: N7 |3 _void Add(BYTE nIndex)
/ }# ?# s1 Z" D) q3 O* T{
& ?" X* Z( b- T; v' k if (m_dwPos >= MAX_INVENTORY)
' b! m* @: B7 { E7 c8 O M: f+ v {
( @: r/ F! K* Y2 g4 @ return;' w5 C, M, e# A4 R6 L* i0 F
}/ |! C! w8 T/ e- x& Q: Q2 y% Q. _
m_Item[m_dwPos].nIndex = nIndex;0 e6 P- G# c1 d0 v1 J6 m
m_Item[m_dwPos].dwId = m_dwPos;5 ?" ~4 X- g0 R9 g; ^. l
m_dwPos++;
. p& H$ s/ v9 ]' S( z}
, G F! p$ D9 M3 x- g7 rBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列, ~4 {. w7 n0 r }$ O! s* s; h
{
3 M% V8 ?0 S. a/ U6 K3 F' Y for (int i=0;i<MAX_INVENTORY;i++): m+ f9 l* ]0 ~4 q
{
0 W/ ~) ?2 i& x$ J5 e3 _6 K if (m_Item.dwId == dwId)
* k+ J7 p/ h+ F7 |2 b: f {3 P: I) {7 M8 `! P" F- [! B8 V
return m_Item.nIndex;
4 t) A3 k2 e, D- D# y$ j8 e+ N }
- z9 {+ M k3 t- m3 y/ y }, p: R3 e' r; I. m
return 255;0 F7 i1 n2 O! C' J2 g
}
" K/ a8 C* f# T$ U0 rvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置 }# F' Q5 Z3 `$ R
{3 o5 k" |! }+ J' z* l; k. I) ~
BYTE nTmp = 0;
7 j; ]2 z B0 e8 ]) [+ s bool bDest = false,bSrc = false;: i+ b7 K9 Z: N+ W5 \- d- p
for (int i=0;i<MAX_INVENTORY;i++)) S3 b) |: H, F" q$ b% E) t, @, k. ^
{
$ f5 b1 o) i$ w" s5 {7 Q if (dwSrcId == m_Item.dwId)
6 M) [: g6 Y V! h8 W {8 J3 {9 J% g( E
//id相等 则 改变对应的dest和src
& U7 i: E9 J7 L nTmp = m_Item.nIndex;4 c- q( v2 E' x1 ^! n
m_Item.nIndex = dest;& M- [2 H7 @- Y5 }% ~+ A
}
% ^7 d# q) R! ~9 r }- R& f: `- R/ t: f8 ?! I/ \4 a
//临时数据保存完毕,交换开始
; P: a. n, r5 T& l, h for (int i=0;i<MAX_INVENTORY;i++)9 |* E1 T* Z$ J
{; I7 Q5 w! I& G" Z
if (dest == m_Item.nIndex)
% R4 v, ?7 E3 \8 n1 U# U1 e {
- @5 \: i0 h2 e! ?+ z/ Y: v //id相等 则 改变对应的dest和src
5 n4 y, ^' f+ \( ^9 G* z+ S m_Item.nIndex = nTmp;0 N( ]% q2 ]0 F5 R( B; o
}
% h" ^ v' ]0 V, k! \' H g: L) V }
+ j4 U4 Z8 ?0 @! G4 G}: M9 {% D& V( D! ^
};
1 E5 R, c' }! ~! e6 Q' P+ b. C: `$ P-------------------------------------------------------------------------
5 G: i' y9 Z" v3 i$ M' T依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
1 O1 O0 \ Q0 M& f8 H! E& a |搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase); x' a1 M! D+ \
紧靠其上添加:
' h1 ]$ M6 l& s# d q# F Yif( pWndBase == &m_wndMenu )2 H. O; w! j6 {" D4 z7 E, k f
{6 T- o9 G9 k; f& A: U0 |
switch( nID )1 y/ F0 m8 ?- I; B A u# E
{3 O( w2 Q' n4 R& S' Z7 {4 J
case 2:
# D3 f' v) V, w9 u' x# b {
9 m# S) ]6 O5 j //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);/ d, \4 Q) H- i: y/ |. M: ?
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
9 O2 i1 n* t/ U; [& C {6 I7 u. W3 L0 s4 F1 B$ ~
break;; O: d$ O% J9 n! b& W" ~" w8 r
}
; r! L( y- o9 I6 ?' { for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)6 d6 i: ?; g. K: o$ |: T6 Q$ P; M
{
2 z/ X/ }/ b6 G% l+ V; h/ J CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);8 Z# p, X8 l7 Q& @
if( !pItemElem )5 ? s1 l" ~/ e( _' r; R" i, ], g
continue;/ d5 [. R5 {; A4 j
if(pItemElem->GetExtra() > 0)
% @4 A8 x9 [3 u3 P0 M6 n4 Q9 Z continue;5 h8 [. p& A* o# E& O5 I% U
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
7 B f# y% F8 ~+ e" B* J6 b4 x continue;& d0 w* W* v5 Z; N
if( g_pPlayer->IsUsing( pItemElem ) ); z9 n3 v" D& X( \
continue;1 P# D. F" H* w, q8 l
if( pItemElem->IsUndestructable() == TRUE )
6 r; o/ ^# n+ f6 O* \ {( v" r4 W7 [! R. D( n
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );: q; N% d* ~) p, U* }2 o3 s
continue;! v* W$ X5 j8 u9 P4 l
}
; S3 X. n5 H+ f6 z9 E+ Z- q; h g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);! k- C+ d( u: Q% v! ?
}) Y: T" e. y- r4 H4 c2 L5 Y
break;
* k( l9 p& `% f E; D }
B# T# L3 h- ^/ ? case 1:
" s8 [/ g& |7 V& Q( n" c {
9 H& b3 I9 {% ~ //整理背包
- s- R8 C$ S( S) J; v //////////////////////////////////////////////////////////////////////////# p- b* Y8 X) t- o2 c7 f+ V6 Z7 m
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
& _! s! L1 x" Q1 B* ~! U3 ] //////////////////////////////////////////////////////////////////////////
' e3 N J8 w( g7 Q1 B1 B //////////////////////////////////////////////////////////////////////////4 r% \+ G) E3 N% a
CInventorySort* pInvSort = new CInventorySort;8 e$ s1 [4 U4 P* |5 N; C# n! c
vector <sItem> vItem;% G4 K1 f! Q" }% R; ]; m5 h, E3 y
vItem.resize(MAX_INVENTORY);//初始化大小
, {2 K6 s: i" Q3 d; J( v //////////////////////////////////////////////////////////////////////////
( N! i: P( b1 T3 E8 H S6 r" J8 S! U, y //填充数据
" L* V9 g. L& k/ Q5 Q for (int i=0;i<MAX_INVENTORY;i++)" v5 i% i m6 w1 F1 `6 E6 b
{) p$ s4 M% [, p2 j: l
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
5 ]2 C) p, _; A+ R- U( | if (!pItemElem)
j5 x; b; X" U; u {9 N4 o& F9 O2 I6 @9 f3 m
vItem.dwKind2 = 0xffffffff;
; s# ~# J) t' ^* w8 [' K vItem.dwItemId = 0xffffffff;+ r" N5 y: E2 f. w6 q( G6 [; d6 F- _" k
vItem.nIndex = i;
8 W, P: ^5 j" L* _ }else {* M& ?: S: t2 r8 H: W( H0 }4 p5 A
ItemProp* pProp = pItemElem->GetProp();; I+ y8 K- r4 M& h) q
vItem.dwKind2 = pProp->dwItemKind2;8 w( q2 ]& M+ s1 {' ?/ {0 D- e
vItem.dwItemId = pItemElem->m_dwItemId;
* F. k# ~6 V' Q! y vItem.nIndex = i;
@, I& N/ \2 t8 X3 y$ m$ P0 H }) ]8 H! V, _' S) h
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
) P8 }2 ^+ U8 @4 t V: X$ Y- g* J }( w. \1 U3 F; i* [. q
//////////////////////////////////////////////////////////////////////////
0 _9 s2 B. \) v' N- Q9 U9 w3 u sort(vItem.begin(),vItem.end());//排序 m+ m# _# U! [5 m
//////////////////////////////////////////////////////////////////////////5 {7 i% Q: }3 [( \
//交换
9 o0 ]+ i3 ~1 b5 ^3 [ for (size_t i=0;i<vItem.size();i++). F: n5 W. p4 B& B1 E
{
0 R: g2 N' N( s+ n4 k //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
* a+ H& J9 @ u" P pInvSort->Add(vItem.nIndex);
7 b4 @ I8 L5 D a* y l7 k }+ R) q- a5 F' }. u6 Q/ y
BYTE nDestPos = 0;- [2 M2 ?/ k; b& r4 W
for (int i=0;i<MAX_INVENTORY;i++), F7 ~# J) ^5 l5 n; t0 K' _
{
! P4 D$ t% V8 Z' ?( A' [5 d" ] CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
+ e' [/ D, i9 l" j1 f, f if (pItemElem): I. k; U# {- t! ?& V8 o
{
) @% n9 i, }6 s, H( N- g7 f if (IsUsingItem(pItemElem))
, a! w# X2 V+ o. | {
( e A- @ K r //这个位置无法放
. H. \) z. Y) g4 @; B# j nDestPos++; e N& ?+ o0 ?9 t. N; k
}! I4 d ^6 A" b+ \
}8 [# |% Y, H6 j7 O+ m9 V
BYTE nSrc = pInvSort->GetItemSrc(i);9 Z! H0 I% a% |9 x
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
. A3 G" y3 q/ ^, Q0 m if (pItemElem)
% I x' |% Q) M2 g {
2 }- j) Z& Q X2 ~ if (IsUsingItem(pItemElem))1 _0 x, s, U" F+ m8 B% h3 m
{
& |% s2 n! W. `6 _' c0 X/ u$ ?) | //这个道具无法移动,跳过( A9 m; d' c/ k* k4 s, Z
continue;
' P0 v# {0 U& I( z J }
# [9 N! Q1 E2 r( t5 P! T }else{
8 i1 g$ e( y0 A [. } //空位置 不用动2 c( q, W2 N6 o
continue;! i! S+ E$ e6 U$ p" _
}
: L6 @% @9 V5 o: Q" F //////////////////////////////////////////////////////////////////////////2 i5 i$ V: x9 r% d
//开始移动- v9 z' v/ r' g7 a& F( l% ]
if (nSrc == nDestPos)# G0 y1 o3 G) m* W
{
3 p9 I. }# R( D1 q5 Q2 r, o //原地不动" o8 k: x; ?& U0 }, u# t' Y* A
nDestPos++;
2 V! g7 \* t) W9 R# K! \ continue;. c+ l! }+ K: E
}# t u& b* L7 N$ A; u6 N
pInvSort->MoveItem(i,nDestPos);
4 {/ y0 X4 ]# r& c" `1 V g_DPlay.SendMoveItem(0,nSrc,nDestPos);
6 q+ T+ ?# L- A6 }8 h Sleep(5);
+ J) J. R( m3 o6 S5 k4 r+ F //Error("移动 - %d->%d",nSrc,nDestPos);
* Y* S. Q* U0 y) L1 A& c nDestPos++;
5 Z. v; l" Y5 ~3 { }
0 M# }& {! }1 | //取第一个元素的信息# h, b) o* j6 p, V/ N" t
/*) y- ~: f5 M+ j* r$ }1 T7 v* K* I/ i
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)& X8 ~3 [2 G6 U7 K
{# m% T$ C# c) L
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);! A0 ?3 q. K2 F T; z, h
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
" H) C* y7 ~+ t2 m; }3 ]+ K }- ^( m. a8 q/ [* P- u
*/3 @! _& ~: ?/ P% p; a( W8 a
//////////////////////////////////////////////////////////////////////////
7 B: }. x; n5 Z5 L1 d break;2 Y+ X% X1 H- S _* @$ d
}
: r/ i; G/ V8 ]4 _- |) r2 f# p' y, b } 7 E1 M& G( {9 u+ B# @) I
}9 T% a/ E+ i9 v
m_wndMenu.SetVisible(FALSE);3 i" Z( g5 a+ M8 J, \3 k8 F
: H {& Z+ |. }( j9 v7 ^/ M4 v--------------------------------------------------------------------------------------------------------% y8 i! j9 N3 L0 M% c$ k
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
+ L& x S5 P2 D6 F{4 G) B* \ d6 p& x& m
BaseMouseCursor();
; {! M9 |& a/ R) y, {4 d+ T} g2 n# }8 b: Z, |$ O2 ?, C$ l) ]
在其下添加:7 g' K* [; F5 @. Q" V, q# U' K/ E
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)* R# u* H3 G" ^; N4 ]' D
{
: x2 T3 B- R; [4 i ym_wndMenu.DeleteAllMenu();
; \- U3 K8 t/ l3 F5 O5 lm_wndMenu.CreateMenu(this);) k( L$ |( Y1 E. R' `& Q4 [+ @
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");, o, _8 F+ \7 z+ t3 h5 \5 ^$ |) t
& R4 V3 }% G! x& V. j
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))6 Z$ z7 \( {( h4 _5 G1 h u% ]" Y4 E8 z
{: L( J: ~1 |; P/ D- e5 P$ I L: [2 s
//P以上级别才可以删除所有道具
/ A$ z& y. X N( d m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
: h$ s/ I1 Y3 ^6 ?8 A4 a}7 \8 p' I( \4 @0 C7 `; n5 |) R6 `" k
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
8 O5 G6 |+ t+ ]3 v& Q0 gm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );4 ^, S' `* z+ I2 q8 E
m_wndMenu.SetFocus();
1 m' t2 h# P; W0 s# w8 K5 _}3 |1 ?% s' U5 h2 ?4 W
------------------------------------------------------------------------------------------------------------
: I" J. f' y+ |4 g' [0 _*************************. Y K! j5 ?' n' w5 Y% c. v* G X
WndField.h文件% A4 `) S% ?+ m/ g
*************************, H/ _; c: D1 B U6 G8 a
搜索:BOOL m_bReport;
3 d* d" P. z3 k, B其后添加:; k( T9 s a8 N; P, W6 {" ]; }
CWndMenu m_wndMenu;
7 ~2 \ |7 n/ ?$ g4 g; C搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
4 Z( @ [6 o. u7 `; G5 ]/ B其后添加:' n) o' @0 R5 U6 Q
virtual void OnRButtonUp(UINT nFlags, CPoint point);
% f5 T, t3 l% y3 ]3 J0 t, f$ ]
) g9 d6 u3 O! ~# E
: J9 E9 g$ p5 b0 |- ] |
|