|
|
源文件中_Interface文件夹下WndField.cpp文件7 O0 p, M) {$ [% i0 H
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
# n8 Z# _1 n" T5 `( p% c% F
( Y& }' [% U( b8 z" Jstruct sItem. i# a5 R) Z b) q. j3 G6 Y
{* I6 V4 k4 U4 D
DWORD dwId;1 B* X7 g z& ^) ]: @
DWORD dwKind2;
0 E3 y h( n; l$ U# U$ m- \" JDWORD dwItemId;" O( y- [ J6 S3 l' R' `/ A
BYTE nIndex;
# G! k9 \9 T+ L+ FsItem(){- ]$ g" r) Q/ J) W* f
dwId = dwKind2 = dwItemId = nIndex = 0;
8 a/ l7 n, f( i# x+ z' K7 E" `}/ h8 h$ l0 ?- D1 q9 F1 G
bool operator < (const sItem p2)
. f' e i. Y; V9 c( a T+ V9 b" ?6 Q{
+ j/ e+ A. C+ f6 x } if (dwKind2 == p2.dwKind2)/ F& I! v+ C0 i2 k8 O7 r
{
* p& B- H& E- c return dwItemId < p2.dwItemId;
6 W4 f- y6 K3 j }else{
9 y2 G- u- S/ J return dwKind2 < p2.dwKind2;7 ^* g" W8 b: s% e
}
( p5 ~: s0 M) H- P0 f}
, e1 m1 X/ Q1 M) B5 |; E5 R+ e5 M};
& R4 s8 W1 d# L. F; bclass CInventorySort
7 k2 F$ h. z+ r0 X4 J$ d{
6 |) L* `7 |- f; J) m3 mpublic:
1 K! G) A+ @1 D: @0 r" Z3 dCInventorySort()* u% Q: E- F! C( A) c
{2 k& V% v3 |$ O$ g8 R
m_dwPos = 0;8 k- S) A/ L4 h9 `: X
}2 f0 P5 I' O! [5 }
~CInventorySort(){}
/ |) w) c8 w, v8 Nprivate:
! f. i& _" K5 ?6 P& ZsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
1 O3 s) G' }# F% g5 LDWORD m_dwPos;, I1 I5 s* n. `5 F; y" p; `, Q: Z
public:
$ Z4 R1 A' o- r# r- y8 M" b, zvoid Add(BYTE nIndex)
( ~! u% I+ Y8 Y2 l{
+ `7 G! j! `- \( J' h8 Y if (m_dwPos >= MAX_INVENTORY). {. i" x1 _/ e/ \
{7 F6 R9 E3 a5 A8 Q3 F
return; H5 _) d- y: o" v/ e+ `
}+ Q2 n/ L( e5 j- ]2 a6 N! M( t
m_Item[m_dwPos].nIndex = nIndex;
2 m! q: t. T5 c: W& h& F+ q m_Item[m_dwPos].dwId = m_dwPos;2 \0 ?. V% `" Y: p2 b. l
m_dwPos++;
% D P( b% L1 O& Q3 X$ E% q6 T6 K; P}
! \! m Z3 Q; zBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
. `3 M; e/ x) p' |( r; ?{
2 J5 P1 O3 k) q' U for (int i=0;i<MAX_INVENTORY;i++)9 y& L( S6 [7 M2 \8 m
{
, t' ?2 ~ C3 ^, U. k7 ? if (m_Item.dwId == dwId)5 Y9 l3 h. o w: m3 t1 F% c' }
{
4 B9 E5 `; g$ B% |: j3 g return m_Item.nIndex;
' r. g3 j' m! B k" z" ^" d }/ p8 o9 Z; `" R
}
' G5 g' y A* n! o+ ` return 255;* a5 z! j0 S1 C; U
}. E0 P0 g" A4 u7 a
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置* J* f1 p4 y/ X, g
{6 A3 i; w# t$ l9 |5 q3 _
BYTE nTmp = 0;' g/ g4 [2 [" N: Z
bool bDest = false,bSrc = false;+ w% G0 M- k M9 J$ g
for (int i=0;i<MAX_INVENTORY;i++)# G. m6 y i; t y t( o
{: s) l4 S4 D7 B) y/ j9 f \
if (dwSrcId == m_Item.dwId)
- _3 J5 t; Q7 W' h: p {( R# b0 s7 g0 [
//id相等 则 改变对应的dest和src
+ r& m( i; u7 o; d1 u$ c$ { nTmp = m_Item.nIndex;
( g! u4 ~( r- v m_Item.nIndex = dest;% u, F: V* \$ t' Z0 {3 J5 [, t$ Q' E
} j- S6 k0 H' D! p, R' K; ^
}
8 B0 t9 l, R+ I' Q' O //临时数据保存完毕,交换开始/ o! p0 B8 B# m, e% D# A8 ]' P
for (int i=0;i<MAX_INVENTORY;i++)
* j# v+ I2 j" q$ ?) a9 l {- s$ \1 }: }8 T" D
if (dest == m_Item.nIndex)4 B: I! ~7 i; Q5 L3 R$ u
{
& m$ c9 Y) u7 R+ ^ //id相等 则 改变对应的dest和src
* B2 S' H& e' w; R m_Item.nIndex = nTmp;5 @$ Q' m1 F2 M5 m: ]3 j
}* o) \0 x, |# r+ w% ?4 ^- t8 l
}
" U7 Y7 o; C- e3 }}$ l# q9 c: B9 g% `
}; E: [- k/ h; n
-------------------------------------------------------------------------* O4 D+ x" B! B) U' J
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )3 X. u- x6 J/ P. U# G
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
A2 M4 n$ i2 {' d# j/ q紧靠其上添加:/ B5 c" M# @0 S4 r6 U# u( }8 G
if( pWndBase == &m_wndMenu )+ m. Q' X! D% l8 Q: q$ T4 l; @
{
+ y0 Q$ i* Z% B" A" i9 q switch( nID )
# v- }/ U& Z. t. b6 r {6 V( Q( x$ R5 q- s: \/ I
case 2:9 ^# R4 U, R/ [# ?
{# l$ X1 R$ k8 Q3 t( y
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
! K( e% ~5 L# R! M( X( A5 o if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))! P7 F# X) t1 A9 N1 J
{
6 G* q3 J1 k H0 ~ break;) A" [/ Q, r ]/ o: _1 O6 u
}" U7 X9 R* Y3 @7 S8 X- U
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
y- U( j4 H9 n0 L0 W" G {8 P: ^9 m3 a/ n
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);' O+ j, P2 Y6 l) r _ }
if( !pItemElem )% K0 u* j8 @9 p5 ~) H \, m+ Q* B# j
continue;5 i% y/ H$ r! E) k* z; \4 j3 s) n
if(pItemElem->GetExtra() > 0)
, G8 ]0 o+ n7 s" _2 \& ] continue;4 D3 y% D2 j& [ R. u
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
) l" }0 i6 @6 Q( t0 y( k! T$ X8 r/ x continue;; h' Z/ T8 F' N: a# y k
if( g_pPlayer->IsUsing( pItemElem ) )
3 r& t- @' T8 t% F4 @7 V" F. ] continue;
d( o7 P0 m0 f# c" a! G% I5 \, @ if( pItemElem->IsUndestructable() == TRUE )
; {5 m+ t% K1 `: z {
$ J3 ] V, M* U$ V3 t g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );& }8 m& v9 `# V' W
continue;$ S2 s! `# r; ~: j& B
}9 m5 o7 {' M @0 s( ]+ P
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);, a0 S Z3 q/ H9 \+ X. q/ a
}
1 N" t: |# k4 ? break;+ W/ t; W7 w. `4 L% u
}
! S' G9 u: k. P( s case 1:& ~% [* H% S' w5 p' _* o
{
& ~' i* x5 D! J1 c //整理背包
) @( _6 V* U7 l e4 ` O //////////////////////////////////////////////////////////////////////////7 R! b" ?0 }( O/ N
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
) [$ W/ T9 ? S, O* i1 R, t //////////////////////////////////////////////////////////////////////////0 w+ p* ^ X& h2 @$ F6 y1 q
//////////////////////////////////////////////////////////////////////////; G6 P2 a2 n: b) G |
CInventorySort* pInvSort = new CInventorySort;
4 f& D6 E4 _- k Z vector <sItem> vItem;
0 n, U! d& c1 t6 `9 I6 Q$ S3 X vItem.resize(MAX_INVENTORY);//初始化大小4 K( F! Q2 g, w+ b# Y. H0 i! O
//////////////////////////////////////////////////////////////////////////
. k) C4 U) `: ] //填充数据2 ], P# X4 m/ v' R( \
for (int i=0;i<MAX_INVENTORY;i++)
: M' V# P. f% O" ~ {4 x! ~( X( L, ^
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
- ^4 }, F- c& ?: [, p: k- L! c if (!pItemElem), }) x8 t$ @+ B- k( n
{
! T' X, X7 K) v vItem.dwKind2 = 0xffffffff;
. ?, u9 S$ T. n. t8 m) W; N$ k vItem.dwItemId = 0xffffffff; T. j' [- ]9 H: x# e; o
vItem.nIndex = i;
% q/ x/ \( o: x! A8 l Y6 z }else {0 V# n3 \* o* L$ b4 N4 _& `- S- a
ItemProp* pProp = pItemElem->GetProp();
( {8 y8 [! u$ a vItem.dwKind2 = pProp->dwItemKind2;
* ]& |) f+ L1 v% i0 r vItem.dwItemId = pItemElem->m_dwItemId;
# T N+ l; N& G! r. k vItem.nIndex = i;- l% S2 I0 ^3 |" f
}
) U; M) i6 Q* L5 x# u. R; w' h+ o //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
% @; }7 u! D) o$ i. U; W }; r% ~ B b; P; k3 R" X6 @$ z
//////////////////////////////////////////////////////////////////////////5 e7 S$ h0 W1 l8 L. [ Z9 |+ {1 y
sort(vItem.begin(),vItem.end());//排序
- v9 u( h( K+ ?. q //////////////////////////////////////////////////////////////////////////
7 W- O+ K4 W1 y1 d/ d4 X4 }$ T7 E //交换 D R( G+ c7 o+ g# @
for (size_t i=0;i<vItem.size();i++)# q' a- l h) r' y' W
{1 r7 `) m7 ~6 V" p: |* p2 m
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);5 _% g$ ^) p( t/ H
pInvSort->Add(vItem.nIndex);( _0 S: z! f9 u7 {
}
- @, R$ f' P" Q* r7 V J BYTE nDestPos = 0;
. Z5 ^& ~8 H0 r; D) b3 O for (int i=0;i<MAX_INVENTORY;i++)% u' t0 K. e7 ?2 \+ `' G
{2 Q3 n" E5 n, |, q' T* B+ ]
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
. I5 k+ X* S& r: s. q$ @7 C5 u6 C if (pItemElem)
' J3 T n3 D( k: B$ n) |+ `6 M8 K4 u( U {) G; i; ]: b. r, p
if (IsUsingItem(pItemElem))4 y$ R$ n1 Z+ T$ G. B
{
% p; x9 ^4 t/ [9 M( m" X4 L6 h //这个位置无法放
1 n/ E/ m0 W! y8 K8 b nDestPos++;; i/ e& }% S3 K% a: o
}6 C8 `- F8 G: k, Z0 I7 z
}
6 U% b; Y! O/ K( f9 ` BYTE nSrc = pInvSort->GetItemSrc(i);1 L$ A1 @; ?; j1 J P% R. w' i
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);, f* @& E% L/ W& b; C+ K" J
if (pItemElem)
% L, F/ y8 U/ ], O8 I' S, T {
. _( s7 D3 l2 R6 t if (IsUsingItem(pItemElem))
" a" T9 }1 G: y/ Q {
4 J, h* P; V& s //这个道具无法移动,跳过( B2 L1 D8 @. ]( ~! H7 |
continue;9 {) ~9 A4 G+ y6 I) c
}
h+ R& H/ h8 R+ b& }1 q9 q }else{
( _: Y4 ]: m7 K2 F3 \% y //空位置 不用动
8 M2 p' j5 A2 r* i continue;1 F& ]0 v( r. S1 U
}- k$ ^: H' w$ e8 T6 u5 L5 j
//////////////////////////////////////////////////////////////////////////
0 o( r7 k; Q/ R+ v //开始移动
6 z7 R+ B" O8 b/ p0 p8 T, C if (nSrc == nDestPos)/ s* ]( f+ N) E' H& Y5 i. @
{
R' U4 k! r8 W8 O- X //原地不动$ b7 I6 s9 A/ `2 S9 Y5 N0 Q
nDestPos++;8 d4 ~; y/ q/ r; S8 R- z* N
continue;
7 k/ E+ g G( K9 @' m* C- G! d. { }
8 Y7 {% Z! c: s5 U; }% } pInvSort->MoveItem(i,nDestPos);
8 z( G- l: a; k R7 o5 ]! ?# m3 ?: y g_DPlay.SendMoveItem(0,nSrc,nDestPos);/ a! t! G1 N5 _2 J# v
Sleep(5);6 Z. U9 c# {, Z6 e7 b3 g' l
//Error("移动 - %d->%d",nSrc,nDestPos);
# [& ~5 q5 z1 x" n- V* q& H nDestPos++;
6 c0 n# R5 o; u: q2 s2 e }
# i; ^, W3 s0 @3 U7 q& R //取第一个元素的信息$ b2 t/ x( i: }+ D; u3 e6 ~
/*
0 r9 A( f0 C% s& ^' q if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
/ s& i# M1 y: ~) I" B+ x {* A2 p% @+ a x, b1 y/ [6 Z! r. l/ Z
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
3 C1 X# H0 ~: I5 w g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
2 W" @% o6 q; R* ^9 g1 c }
' @5 x3 P% x0 E */
4 T1 S$ q8 j2 f1 g. ~& @7 E" \- c9 j //////////////////////////////////////////////////////////////////////////
. c$ B/ ~; E5 j& J0 P break;
' |/ D2 s- e, ` T4 r+ f5 X }
! `& X/ _$ n( s8 |' \ }
3 j% ?) ]2 @" w' n$ ?+ v}
. x1 s0 k' b5 Xm_wndMenu.SetVisible(FALSE);
8 H5 S( p4 j/ {, n1 E- U6 G) k- _% X$ L. Q& B
--------------------------------------------------------------------------------------------------------$ F7 _( ]3 h% a$ x' N- O
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)+ y, e& p: d/ n& b" z5 Q% O
{+ i) K7 x5 m I X
BaseMouseCursor();
+ P$ G8 ^ l' b}
8 c @4 _" }: h4 M在其下添加:5 d _% G. a& S9 E y3 v
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
2 `% ?9 _0 h& ~" ]3 q0 V8 t& v8 z{# \* Y2 z5 W H/ l
m_wndMenu.DeleteAllMenu();
% X# H( x, c/ {: f# Bm_wndMenu.CreateMenu(this);
7 [' j, \0 W0 ^3 K: A3 x7 km_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
" ?8 y) g' ~- O. N w' z" [' o4 {+ `0 E2 {/ W& D1 ~) |1 ~: T
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
3 i Q& L4 c5 l{
- Y! R8 ^. C0 K5 Y2 y# S& w //P以上级别才可以删除所有道具
% n9 a2 E! W6 l0 @" q* n k m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
' T3 {" z. d* O5 Y, ^}: B, e2 ?8 X0 b6 J8 k1 r+ t$ I8 e0 e
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );6 f6 o8 g$ X$ z0 M2 ]. n) F
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
2 k: O. @/ ^# |+ y# u" c) A5 a4 [m_wndMenu.SetFocus();
8 R$ Z" D$ e2 M- a: l- i}
* t6 N3 m' |& r7 k) U" |, ~# B1 f8 I------------------------------------------------------------------------------------------------------------" `, H# G" N7 W1 v8 L
*************************( k9 @* ?! b9 U( `7 L
WndField.h文件: D- k# h& m, Z3 ]
*************************, c6 W1 c1 ^ O$ d9 Q( q& e4 B' R
搜索:BOOL m_bReport;' _7 d; G0 f9 s/ q* W
其后添加:
' Y7 r. Q/ Y: D3 [0 Q" s- ]* fCWndMenu m_wndMenu;
- Z H5 I- k% i搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
2 k5 v. `& T Z# r0 L8 R其后添加:: R0 b- \) t+ J+ K0 Z9 I
virtual void OnRButtonUp(UINT nFlags, CPoint point);# E3 J- R3 J( j. u+ b
$ b( J& a4 f# c1 `3 K& t
- \7 V3 i" i+ R, C. V2 {3 C |
|