|
|
源文件中_Interface文件夹下WndField.cpp文件+ g9 F: i; J" K9 R+ r
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
8 W( e1 R, [- R3 H$ B: T& R; i
7 _4 G$ Y1 d+ L( M+ ?struct sItem
) K5 U0 ?0 e x{( v! F4 q% M! Y
DWORD dwId;' b" b7 Y% N) Z5 z+ o6 A; A4 h
DWORD dwKind2;. U! K% E* k% B4 @; e% s
DWORD dwItemId;
, S( Y8 K4 i$ n. _BYTE nIndex;! T; Q0 I' `) q x# k$ I0 b: S
sItem(){ l4 X# m7 M) }' K8 V
dwId = dwKind2 = dwItemId = nIndex = 0;
5 {) _4 k7 u6 X}' Y9 d' U9 H# i5 e! ~
bool operator < (const sItem p2)# Y% D7 F/ j8 X3 ~
{; ?, x# a+ m# }
if (dwKind2 == p2.dwKind2)5 x* l) C2 @1 e' [1 s1 f
{5 \! G/ p% g9 g/ s, J' J
return dwItemId < p2.dwItemId;
" o g( v) C, U- k6 x: d }else{$ M$ O$ Z8 w# L# }. t
return dwKind2 < p2.dwKind2;& P/ J% v2 d6 y7 T2 f: x
}
' c Z- G) t+ i( R" U- v}
5 I' V9 m1 m$ T7 B% {3 Z};. |0 ~4 k& K, g6 Q* i& y) q
class CInventorySort) ~# w+ I! e" a5 p4 y) n3 E
{2 R% q0 J: I! B/ |
public:9 C- d* U/ [1 G* X; q- I! o
CInventorySort()+ b+ g" I6 K H; |7 O4 }7 `
{ Q' f# A6 R. H' K
m_dwPos = 0;% B# ^) G7 V3 K3 k
}6 c3 n3 a$ x p3 u0 j5 R
~CInventorySort(){}
. \8 y. ~' C7 G- U" gprivate:
0 m) C, t) \$ U. gsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
* Z4 r/ ] c# j' C: VDWORD m_dwPos;# {! u+ |( P* d1 S
public:! P# i* S0 }2 {' I7 }
void Add(BYTE nIndex)
8 a2 M0 L3 G! z( \1 \{
) |2 X! g k, T6 X1 p! O1 T2 `4 ^ if (m_dwPos >= MAX_INVENTORY)/ [$ Q. j ~4 [* K2 H
{
6 l7 m- ?7 ]' |* Y' q return;
2 z! Z' s, J+ M6 _9 w7 l& B }
8 D' k- {( U* |7 l1 O m_Item[m_dwPos].nIndex = nIndex;
* G2 l4 w J0 F/ h m_Item[m_dwPos].dwId = m_dwPos;0 k3 f+ I4 W# Z$ N5 T6 T
m_dwPos++;, m5 f1 b" m. L# a! I. C) |, W- S# @
}
# ~7 }. F/ |! b) E1 g2 YBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列/ q. e7 C7 r( @! U. u% d+ B
{& Y4 d( g) u; o) C* O! @
for (int i=0;i<MAX_INVENTORY;i++)
@) F& k+ _- a/ m6 }; V {5 _* i0 K8 m0 Y
if (m_Item.dwId == dwId)
" t4 w4 e9 D( E3 l' \/ x6 m- d- q* p {
9 G8 k2 w) M; Z# L5 N8 f4 A return m_Item.nIndex;
" D: {7 _2 ~0 s }
0 N0 k% F! y5 G3 ]% ?6 g' P' Y }
, ~# K# w2 W6 F. e% a( A2 g* \' { return 255;
0 C- o2 \0 x) h* H2 [}) X/ ?/ J3 y' y5 P! P
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置+ A. b6 K. g$ c3 ^) I1 Y
{+ y& ^. Z+ u/ |+ Q* O7 I
BYTE nTmp = 0; d% G6 A5 d. \+ Y* H B
bool bDest = false,bSrc = false;9 v* L* l u* N0 s
for (int i=0;i<MAX_INVENTORY;i++)- ~' ~6 \' Z2 {7 t* o( U( y
{ C- y- S$ x) M
if (dwSrcId == m_Item.dwId)2 U% N& h+ u" f3 s" I# c
{0 W8 @( Q9 S) U( u4 @$ T
//id相等 则 改变对应的dest和src
+ d E! _; X1 Y nTmp = m_Item.nIndex;
; g/ Z$ Y3 g3 v8 w/ Q' k( Y m_Item.nIndex = dest;) z7 C& r2 d4 M; A! L2 W
}
! B! s: g: V/ o$ ^ }/ _9 _" u# R. _. l- X6 S
//临时数据保存完毕,交换开始
! o1 h4 l: B' [& {* K# F; ^ for (int i=0;i<MAX_INVENTORY;i++)/ c& M4 @; D+ _/ H& a$ i6 g6 O
{
% ^' H$ D7 g3 B) q) a! j4 N if (dest == m_Item.nIndex)7 I: b. W7 j7 o8 x! D; m& @
{
: d. s1 W0 a0 R4 B. a! a //id相等 则 改变对应的dest和src
& R {. V& u+ r- `. g m_Item.nIndex = nTmp;
! d! W f9 {' J+ O }
- |: T2 q! v6 a6 a7 {" G }( ]5 Y* H3 N- P4 ~+ F1 V3 N! d
}
' [2 q- m! ~1 O5 u. y5 l# \};
9 ^ _+ t" |7 [" ^4 }$ T0 r-------------------------------------------------------------------------
2 k6 S" N3 _. d. m依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
+ F' W$ ^- ?" Y5 K1 Q搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);) N) ~# @: ^" X( I
紧靠其上添加:( t2 i* r8 M5 }! B
if( pWndBase == &m_wndMenu )
# T$ |' r! [$ H( v$ f# c{
' D/ I; l: h% ~7 H! L; h/ M ^2 O9 C6 J switch( nID )/ ?& O, [/ `0 y' Z% V" o
{3 s3 N+ r$ f/ g4 h. t8 ]# g$ d4 b
case 2:
8 l, k8 t( P+ l& w6 d$ M. T% I3 J {
* P7 D8 U7 W4 I8 g& j Q) d* [ //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);0 N/ ?3 S$ v+ m W- E: j
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
1 {9 h# D/ Y: B7 R, [ {8 `+ n( R7 x; @( u2 r
break;7 M {" J% w Y3 c7 C) N
}
2 I3 A* n+ G3 k I for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)& y/ F# u8 X4 n2 `" z W) D
{
5 T1 X( ]1 R$ F. g! C' U CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);( B" \$ P3 [- Z* I$ {) _' z
if( !pItemElem )% }% y( `2 ]' c0 X1 K; N5 D/ g# G
continue;' y' x8 c( \$ I
if(pItemElem->GetExtra() > 0)
; o6 c* r, d- J continue;
. I6 ~# I ?' O$ w! I if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
7 L* N6 T4 r B6 x9 p4 L continue;
3 D) m8 i Z0 M if( g_pPlayer->IsUsing( pItemElem ) ), [4 _! N0 j8 K1 p( }
continue;
; i8 K4 O9 _2 j( e if( pItemElem->IsUndestructable() == TRUE )$ c& ?% M4 v E# l" h3 Q0 o" y5 T
{1 G2 ]3 k2 k, e, ~- m6 `3 }
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
5 `* V3 T9 P3 @ continue;% L$ ^$ {4 R `4 R
}5 N1 t3 R3 B3 D. z; h
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);8 E r+ i& n" j) X: H) h/ [& m: ]
}4 m `4 q* d, q U) K3 F$ d
break;& n; x/ s1 r F
}
5 h' y4 p9 t3 s/ x! c& e6 e case 1:: U# ~) T3 {, p
{
2 D3 e3 ]9 K% }/ n" e //整理背包
; ]% O" ~& ~/ T! ` //////////////////////////////////////////////////////////////////////////! e; Z! m* w( n' D/ s, v
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
! _5 M( \/ u- n+ t1 y3 t //////////////////////////////////////////////////////////////////////////# v7 g `2 \# V) M
//////////////////////////////////////////////////////////////////////////6 ~8 r' q' V3 h# F2 B
CInventorySort* pInvSort = new CInventorySort;
; h+ G; U v7 E: L# \$ N# _' q vector <sItem> vItem;
* x" E* W5 S3 q! A8 ]2 R5 ^3 p vItem.resize(MAX_INVENTORY);//初始化大小2 B: E5 `5 x& m/ l
//////////////////////////////////////////////////////////////////////////
! f/ ~7 h5 T& H& ~$ t: l //填充数据
& d% t5 S- t7 v( F& O9 g9 I for (int i=0;i<MAX_INVENTORY;i++)) o) c3 q, ]. N/ h; \
{: S6 z% W# M; m1 `
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
$ F& _! `( O- k* [" n if (!pItemElem)
6 N8 z% J- }6 y1 u+ G {6 @6 Y# G! `+ ^1 Q# A( ]- ]
vItem.dwKind2 = 0xffffffff;
9 i. x, b$ w+ E5 X3 E! v5 M vItem.dwItemId = 0xffffffff;' F9 j' q, M8 l0 s9 Z
vItem.nIndex = i;
+ {* m4 N& ]) {4 b9 ^; y: b }else {
# w2 s6 C' J& m- J1 Y+ h& f) q2 @3 Y: ]3 Y ItemProp* pProp = pItemElem->GetProp();
- t, h8 _7 N( k v, |1 F3 a. @ vItem.dwKind2 = pProp->dwItemKind2;
c5 E5 ?" Y K. g6 O6 { vItem.dwItemId = pItemElem->m_dwItemId;1 L! h# C4 j& R) Y# X0 ]
vItem.nIndex = i;$ O3 [1 t1 A/ @9 V" Z* u3 I% t9 t
}) H7 w7 V' K0 c, j4 a' ] R
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);7 @5 D1 ?* A5 W0 A* K
}; s2 V' Z- f6 \6 c1 ?" d2 D
//////////////////////////////////////////////////////////////////////////
# x, O3 H f' G# u- Y7 y sort(vItem.begin(),vItem.end());//排序) [4 I' t9 [8 U8 @, B- Y! [
//////////////////////////////////////////////////////////////////////////& J7 z# w$ A: V: a) z) J( m
//交换* n+ K: S8 U( m+ X& k. E0 v+ V3 c' ~
for (size_t i=0;i<vItem.size();i++)
$ `# n) w- U4 S/ F3 m! ` {1 @# [: w$ N4 u% s- o ~# L% T
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
* P% _% i7 F4 V a- v, J' X pInvSort->Add(vItem.nIndex);
/ e. b6 V6 |' X" Y }
# x9 z7 f7 Y% q, |' b BYTE nDestPos = 0;9 g( k e$ @' P$ `7 d: I
for (int i=0;i<MAX_INVENTORY;i++)+ q. ^7 ^- C5 X
{
1 E4 L1 @7 c6 X CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);4 p1 I/ Z; _0 n; G% H
if (pItemElem)8 K% t8 H( o+ j; W) C7 p
{1 e9 A+ @' m- e% x
if (IsUsingItem(pItemElem))
3 T: Y7 \5 w9 w. Y! ] {
7 H. `2 ~6 I, ^# s, U+ A //这个位置无法放9 P; |7 C: y# k. c& j7 g( `8 B
nDestPos++;
2 _ V. ?7 }! U& r# e }$ b" K) ]9 m* v; u" u: M: m' ~9 d5 b
}
& U! M6 D3 n! \& S8 \ BYTE nSrc = pInvSort->GetItemSrc(i);
% E1 x! u' H/ w1 v3 Q: n) ^2 K pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);4 ^& m8 P/ }1 [: V+ K' x. d
if (pItemElem)# o" F' `+ s5 O: g m- C, f, N
{
+ e8 }: k7 V. |6 B5 y' m+ S6 A if (IsUsingItem(pItemElem))
% V; I3 `; E. n& p {6 [( g" r( O1 J. `% e
//这个道具无法移动,跳过
4 q# Q' F/ c. ]2 T! E' L continue;& \/ I2 Y b( P1 L1 r* J/ j
}
/ K9 i B' ^4 I7 N3 x }else{4 d6 E% W+ C8 @" k) Q+ v
//空位置 不用动
+ z' y6 P5 B# b" w, C3 [0 x continue;
& F2 ?# B+ ?7 ^8 V. W }
7 E, G1 g; `+ J% S; q; H /////////////////////////////////////////////////////////////////////////// P) o& U# R- u" Q& c. u
//开始移动# y; l# F2 a f, [& x
if (nSrc == nDestPos)
, j* K$ p9 s0 `$ v3 m {
* G% S, [% \7 f( Z2 Q' x+ m //原地不动
% z& e2 B4 ?5 B nDestPos++;
7 P& ^& v) e& a! S" y/ c/ p continue;# @; q z0 ?1 V$ U
}1 v! Q5 t9 H( {1 L& w
pInvSort->MoveItem(i,nDestPos); f) u' D2 u; _0 t; o, d, z
g_DPlay.SendMoveItem(0,nSrc,nDestPos);' d4 s5 m( q5 g/ a) `
Sleep(5);4 x- L2 y# U1 ^* ]( r- z0 T
//Error("移动 - %d->%d",nSrc,nDestPos);# o( b/ a3 J5 r9 [5 H) ^5 w
nDestPos++;- d: K3 A9 o* ^5 M( K6 W1 E& V
}$ d. h. C! z/ O4 |
//取第一个元素的信息' P' K$ s# M: ]+ Q
/*
2 Q/ u1 r& y* | if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
4 b$ V8 e$ l# f& b" B {
0 v6 w0 c. D A. Z& _ Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
# x7 f6 `0 V' _# [8 c) y9 S0 M g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
8 e) H M* F! T/ g- t7 l }4 M6 I/ \7 K' e" R& l# J
*/# }' \) E5 L* U1 m( ~* t& j
//////////////////////////////////////////////////////////////////////////$ O1 ^* D! ^/ _! Y; A1 I, [" H
break;* n3 a4 F1 v* {; }4 M3 @3 G( {
}
! E3 e) I) l3 I }
# }+ @) A; G9 t @! t8 z6 R}
% n1 h7 Q" B2 I0 om_wndMenu.SetVisible(FALSE);/ U9 I' [9 a9 p
8 u" }. v2 }0 [--------------------------------------------------------------------------------------------------------- @/ h* q) F( r2 u* Q) m9 d$ X
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)/ l/ ~% `/ m- p* s9 R9 @
{% m3 A* @7 m) A' _* D
BaseMouseCursor();& m1 Z* x5 m! W) s# X. A1 W( \" \
}$ c) T u( v% ^+ X4 D* R
在其下添加:
5 w6 }6 ` W+ b3 C" C0 yvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)* u& D7 n* C& v6 n- y
{3 H' A% w2 l" F, N; z
m_wndMenu.DeleteAllMenu();+ G o! a0 M& j4 o! y1 E# u, S
m_wndMenu.CreateMenu(this);
( F+ ~+ j5 R6 `6 Hm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
v0 b0 {* A ~- X: y9 p# v) n7 q/ @( h- d+ i5 s
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))1 _1 U4 m% o2 \$ F
{
; u% ~6 I- h' ?) }, s //P以上级别才可以删除所有道具
. p K1 S# X5 _. _( [$ h* z. l m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
5 J" q$ Q8 m6 p( z}2 D8 ?/ O, ?0 b
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
0 ]; V+ U. I& L8 [3 ] km_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );, Z: @9 e* @/ h. ?$ x6 Q! c
m_wndMenu.SetFocus();
+ d4 l+ f, r7 {# b6 O}
4 ~ h" R; L w" M( z------------------------------------------------------------------------------------------------------------" n1 g7 v" }: {
*************************( |4 D8 x; ~% a: d; K7 I
WndField.h文件
7 Q- e; R5 v# z+ c*************************
! [8 s9 |& Q B+ J# C搜索:BOOL m_bReport;
$ ~! n, D4 Q. U3 r# k其后添加:
) b0 F, |# u% y/ @+ b& |1 HCWndMenu m_wndMenu;( W6 w0 u$ y3 `9 v6 @! U
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
: A4 F7 p3 J' ^+ W4 U其后添加:
, f r( \% u- y5 P# a" [; Pvirtual void OnRButtonUp(UINT nFlags, CPoint point);
$ R7 I! g1 t; o0 D* G; G, V2 R5 h" j4 B" K, c- q: T+ p2 G. T
$ {$ o( g4 ~' J
|
|