|
|
源文件中_Interface文件夹下WndField.cpp文件9 w. y0 e, r" M" Z5 Y
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )$ h& F9 G/ y3 s$ R
+ T3 r: F# r$ v8 h; j
struct sItem+ z, ~1 a+ B. \" l) D
{& j- L `+ U. H8 [
DWORD dwId;, ~8 H( n# u$ ]; s7 b# ^. k* Y. {
DWORD dwKind2;
5 W( e, {7 Y4 b7 |DWORD dwItemId;
1 z5 w& S3 @$ m- Z uBYTE nIndex;6 a" \/ B( I+ v
sItem(){
8 s& g! ~9 {# z$ e' {- X) c$ j dwId = dwKind2 = dwItemId = nIndex = 0;: ?' {9 Z# ?. }; O. q2 o, U' s
}/ r9 `6 m9 o1 n/ ^
bool operator < (const sItem p2)
4 P0 T8 u" ~4 d3 M' g1 _8 P{
# a4 x0 R4 U3 V0 P! i if (dwKind2 == p2.dwKind2)
8 R0 O, m* J) F' }; S7 m$ Y/ A$ j9 Y' i ^ {# S- u( ] x7 |, T% V
return dwItemId < p2.dwItemId;
3 t3 d! S/ ~: l }else{
1 B0 k4 Z }4 {" q: S) e& z M; Y return dwKind2 < p2.dwKind2; r& O2 v, m: J
}
0 A2 y5 }4 O. C6 ]# w% i}
% E1 q' H4 C2 }% [) h) m& b};
( a) w3 `1 |$ _class CInventorySort6 A, K2 m) R8 M9 [# e# E7 X7 d
{4 T5 ^! e6 K$ _, d2 t* I
public:
; u7 B: d- g7 ?* SCInventorySort()% g9 P0 k1 w) A$ c7 O. Z# ]8 `: ?
{3 ?8 c+ T6 \* p/ `+ z
m_dwPos = 0;
1 `: K" d. }$ _( z2 B, B}
7 G/ E X4 _$ C n+ G. U* p4 v~CInventorySort(){}; _! v! i" F, J5 w1 l
private:
9 S2 p. I& J$ X8 gsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息4 q3 ?/ l9 y) g" v9 E( h6 _! Q- |
DWORD m_dwPos;3 n. @( r' H7 \4 }" x6 p9 q
public:& q1 v+ [5 ^% V+ V
void Add(BYTE nIndex)
& ~1 g, S6 E0 g$ N+ M4 T{
7 p3 E7 Y4 o, b6 l0 o5 _ if (m_dwPos >= MAX_INVENTORY)# H8 @9 H, M$ j- l k O* t
{5 N6 P* `! \; d: Z* I3 M
return;# C) Z7 P$ U1 j$ z$ k9 r0 u
}; {6 F$ s# q j* }& q
m_Item[m_dwPos].nIndex = nIndex;; i- M9 K; @: Z$ L" f
m_Item[m_dwPos].dwId = m_dwPos;: `& R( ~( b" O# z; l- t
m_dwPos++;0 d8 |, Z" o) A9 T7 P: @
}5 `! r4 r' X) `
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列% f3 L9 l/ u: [7 O
{
R# L0 e" D% ?# m' Z1 C for (int i=0;i<MAX_INVENTORY;i++)" k- l4 s! D# N, f( j" D
{% y1 H& ?4 X. u Y6 V+ E/ ?8 g
if (m_Item.dwId == dwId)4 Q m ~+ @* v5 t
{7 {0 G4 I5 \0 I# O( E
return m_Item.nIndex;
6 O1 o- j% o6 k$ S# B }
; M3 D b- E' z. w2 J7 J A }
; J! x H# D0 S' [( ? Q; p- F return 255;
: ^- w' F5 V! s7 ?}
+ l5 Y. T$ V% q8 Zvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
2 t) m& g: U1 g{
, h# q0 f7 E( F+ z) V0 s" o BYTE nTmp = 0;
* k& p$ [6 e) z* o' @/ \8 d bool bDest = false,bSrc = false;
& {3 t! w% u1 @: T8 Y9 A4 P for (int i=0;i<MAX_INVENTORY;i++)) _. n- \0 W0 J9 U/ I
{
2 N3 U7 L1 W# t5 I/ d: Z if (dwSrcId == m_Item.dwId)* r7 Y4 k, ]$ d( @( W, a# Y) j
{
s: `$ |$ G( h+ B //id相等 则 改变对应的dest和src
5 b0 i! G" S3 k" s nTmp = m_Item.nIndex;: Y3 M% @) q, ^0 ?) n% r
m_Item.nIndex = dest;
3 i4 y1 W2 V. X0 V }$ w9 x1 n _8 Z. V. h
}9 S: m" L7 W! ?) \: t* l" m& Z! E
//临时数据保存完毕,交换开始
% y/ R! A9 z+ ^2 e& y- e for (int i=0;i<MAX_INVENTORY;i++)
+ g a8 |' s: d* j D7 }7 W {9 J, l1 I: B' T3 y4 f" m
if (dest == m_Item.nIndex)3 T7 C. m! H" S4 g
{
4 {2 z. n6 d) I- V2 l8 [& R //id相等 则 改变对应的dest和src6 e" @" e! v3 q# f# R- g" y
m_Item.nIndex = nTmp;
: L8 s0 ^ L( I+ U2 R }
( m, J/ F7 N9 a" l }
' {- I) U1 i- h}6 |$ X0 H2 ]5 t9 e# O
};* w% k8 C; E: z9 Z( |
-------------------------------------------------------------------------' g* {$ ?( R1 H, ]- P2 |
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
Z: ]1 x4 \0 N0 k* M: [( Z: o搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
4 W. r) p- R, L" B J2 E紧靠其上添加:
; a( a3 l% a$ I/ n; xif( pWndBase == &m_wndMenu )
8 S3 j: s) h; H7 R. ^/ a$ h{, X+ F9 N X8 j+ r
switch( nID )
1 t- [/ O' u. Q( j+ G0 F. s; o& D {9 F9 j8 @* R, V- `% x7 n" f6 F- `* Q
case 2:
( l8 j/ G* s" Z/ V {
( A; T0 t! N) N$ z! ~# H //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
! v: r* c$ ?0 B R4 O a. Q, a if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))1 d( ]3 c: H5 E9 g2 H
{4 k+ j+ N+ l( z8 r2 Q! ~0 u
break;& b0 C9 f ]& p, S0 z' f
}
0 W% S' `) E& c for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)/ \4 S- V) J8 b. Z: y3 X# C1 W0 y
{
( p# r6 P# j4 {% s# z) x. p CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
/ m5 R. f- N, j N7 C5 q if( !pItemElem )
@9 X% y/ P8 b# o6 _4 [. t" S# |5 A continue;9 q5 {- ?9 E% \
if(pItemElem->GetExtra() > 0)5 R* d n5 ]- P/ E$ U
continue;
0 w0 r$ [* N. J8 @! {6 k8 d9 { if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
* k5 V1 k( t4 G" }& F continue;
5 Y/ |5 }1 A3 m* ?6 H8 }2 c if( g_pPlayer->IsUsing( pItemElem ) )
3 I; I$ J0 B8 ^0 ^# R6 M continue;" N% S! c' G9 f" }' T0 M
if( pItemElem->IsUndestructable() == TRUE )5 P- @) R/ i, l- S: @
{- f# S1 P* K; I3 p
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );8 b6 p7 e+ {1 _& Y- {# `
continue;4 h' M0 n3 K+ B
}/ c! x" A4 l- Y9 O0 T
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);/ Q# a. P3 h4 P3 l
}* u9 d2 F. \ ]
break;' _" N3 E9 Y2 v! Z5 |
}# K. D& k$ Q; K, P' b9 ?8 @5 e5 x4 t
case 1:# ]) H5 h+ Z) V d3 u
{$ g# P/ J; d0 D ^# ^
//整理背包
* b+ o* o5 z5 d7 S /////////////////////////////////////////////////////////////////////////// j. a: m' f$ @9 E$ j7 a$ Z
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
1 i6 e6 Q }8 S1 k, ]& d //////////////////////////////////////////////////////////////////////////
" o% |" H2 N& ^# r& H6 t //////////////////////////////////////////////////////////////////////////; L, L8 R! W7 i: k6 `' _
CInventorySort* pInvSort = new CInventorySort;
' v7 H/ H6 T- q! e vector <sItem> vItem;- t: s# T! T% e* w+ v1 V1 G
vItem.resize(MAX_INVENTORY);//初始化大小7 d) l& Y3 V( B7 N- O
//////////////////////////////////////////////////////////////////////////
c& o$ h% ^% _4 h6 P' L //填充数据( B7 `! R' I$ i8 I% s
for (int i=0;i<MAX_INVENTORY;i++)/ X& @' o: s+ W9 j2 D2 [1 e4 S
{
- }6 E* G& U* u0 O# M6 @ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
' ]" k0 E: l. T- \4 f if (!pItemElem)9 B6 G1 s d* w1 L. g: H
{
4 W) b3 g! Y1 p. F7 D1 L vItem.dwKind2 = 0xffffffff;) d% p5 e2 m- C. V
vItem.dwItemId = 0xffffffff;
) }; T6 D6 I0 j! d$ i8 G vItem.nIndex = i;
, O; {) A; j& b! z# S2 n) w }else {
" w- }3 g. n* e, `6 x0 \ ItemProp* pProp = pItemElem->GetProp();8 w, q+ l l6 @4 Y! s0 D
vItem.dwKind2 = pProp->dwItemKind2;/ e! G6 j1 [8 G4 U) `' G& N" \# |
vItem.dwItemId = pItemElem->m_dwItemId;
4 P; ?2 x2 O. Y9 [ |* y( Q( W vItem.nIndex = i;( L; _, x# T" A
}9 o8 P: B/ \5 i0 Y5 o' F
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);/ H, K# P2 q+ Y% u: d
}
6 }5 `/ n% y: p2 z5 X //////////////////////////////////////////////////////////////////////////+ ~: O! x7 ?: Q2 H
sort(vItem.begin(),vItem.end());//排序
0 k7 O1 G. D$ l$ u/ g N3 q //////////////////////////////////////////////////////////////////////////* K! K% h2 g/ W# h& a
//交换
. t% R7 B! r$ S7 s for (size_t i=0;i<vItem.size();i++): s' \' `1 m( W& @/ f2 \+ h3 U
{7 {9 C7 I; L1 m2 V A* ]
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
7 u& J& q4 X# S) u+ R5 I7 ?5 `6 k pInvSort->Add(vItem.nIndex);
1 n3 w# z% q! a) j7 q! V }
. ~ X- i' Y7 h J% ] BYTE nDestPos = 0;6 I* Y: m+ S$ |
for (int i=0;i<MAX_INVENTORY;i++)
# z+ L3 ~$ E4 @: m) j" \! [7 b {4 j" W& H9 C5 Z$ d' ?9 n: X" q5 j
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
: u2 g( Q4 S9 F- z) Z2 [1 [: g if (pItemElem)
( a; a* K6 Q0 |( T) U" w- I {" h V0 C. i: P# Q/ p- |6 L( f/ P
if (IsUsingItem(pItemElem))" v, w3 D4 n8 x P3 t# G% D
{
( b* E6 g9 I% m' S //这个位置无法放- v& Q. P! @7 f" G/ C
nDestPos++;% F U4 @9 |4 W7 Q5 Q9 L J4 d
}0 q5 n1 b- }/ F
}3 d t" ^+ l& ~. f! ~2 K1 @
BYTE nSrc = pInvSort->GetItemSrc(i);
! w/ H0 ~& m& x3 l pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc); a: a3 U$ ]5 \0 x2 J8 I
if (pItemElem)& V* `! K% w. X) b' O
{
+ l3 E) n7 ^, o/ Y# |& [, X+ s( J8 ~ if (IsUsingItem(pItemElem))3 ^6 \4 U; O s m
{8 L+ L) V: t0 W1 r( L1 F, o$ V9 M
//这个道具无法移动,跳过3 h- R4 y, F( A& V( O; j
continue;. t9 @- J# ^% R1 A
}8 V9 @( W) U9 o7 P3 p# d
}else{" p" |8 k- t" N, g
//空位置 不用动
* X4 t9 D9 {- `6 [ continue;
+ p- W- {6 j% z) v$ w; s% H1 J }
/ a# K9 p! Q) e L- n6 U5 s //////////////////////////////////////////////////////////////////////////
- V7 L- `. E) M% M //开始移动; z% D# Y" ~; j
if (nSrc == nDestPos)4 |4 K0 f# J: X* ]$ n
{
0 M L9 q. c6 j( ] //原地不动+ x. }: z g8 \# H! r+ U1 S, X3 ^) M( a
nDestPos++;
/ F% v* Q0 S5 b0 _ x/ B( P/ @ continue;% _! {$ Q" |$ m B+ j o/ u
}
0 }5 G2 U; s& G6 m7 t( a8 O* V pInvSort->MoveItem(i,nDestPos);. P' {! t/ v& x0 b; x; l
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
# Z% Q# {) r3 L' W* o Sleep(5);$ v- o) t, ^' U. i7 K+ M: g
//Error("移动 - %d->%d",nSrc,nDestPos);; C0 t. I( D; u" I
nDestPos++;* o3 a, K0 v9 y5 ~, |- {# \( i
}
" P6 T9 ?* j" t3 b //取第一个元素的信息
$ M) i* H3 u+ E# X/ f /*
3 p3 Z4 N0 u6 `$ ?' Q. z$ G0 J if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
7 ~0 R8 V# R: J! D {
& g5 V6 K) N Q( c1 u; L Error("Move - From:%d,To:%d",vItem[0].nIndex,x);+ @8 A$ L9 h9 ~5 w9 {$ `
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);. a# k3 ^8 V/ P
}! ~: A3 j8 C. H. {( f- V I) z/ u
*/
3 ?, I: \5 F3 p1 e //////////////////////////////////////////////////////////////////////////
0 U/ j; B( Y5 l. N. ~4 t break;
* c/ }9 p5 q6 s! @" i }; R9 W9 ^) Y) M6 u/ x/ Y
}
3 p5 w; D* z4 ]7 J; |9 U}9 @' y' ^6 p4 m( a) |
m_wndMenu.SetVisible(FALSE);
# I, ?* n6 S( {5 ]8 T+ h9 Q1 I9 c5 c$ k. @/ a
--------------------------------------------------------------------------------------------------------: G* t* D& R6 b" Q
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
2 o, w: X/ l$ l+ C{
- e1 F3 u" o/ qBaseMouseCursor();
# B9 `/ W8 k, X}
7 }5 o3 j% C! A在其下添加:* V/ Z5 g& ] N. A
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)7 S- O, y; I& |4 c3 B& `
{
- |8 l# `# d0 w) M% A# jm_wndMenu.DeleteAllMenu();
7 \! m% c. u( b+ om_wndMenu.CreateMenu(this);
$ k6 Z, j R1 P _m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");0 t5 y+ `! ?1 Y. u
: e- S6 n2 O3 e8 Q5 p
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))* H5 W1 T; V, \0 `5 L1 ?
{
1 e, l8 U1 w/ A# z8 K3 ~2 _! x //P以上级别才可以删除所有道具3 Z# I7 l; w4 O& s4 C5 b, E
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
) ] c/ U. w. e8 _& C7 H5 m}1 C& B( ?2 |/ c2 e6 R8 ^2 |+ W
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );# K( \! l+ }& p
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() ); p+ U+ O3 {# a8 i2 Q
m_wndMenu.SetFocus();9 U" J7 Z# ?; m& o
}3 C3 g# s$ d- H* t1 M m8 t3 H
------------------------------------------------------------------------------------------------------------
6 t' f1 {0 T' B* |9 u A$ V*************************
1 w: F4 Y; Y' `2 o' jWndField.h文件2 |9 f8 A z1 N4 {5 n4 W5 V4 U5 U. d8 X
*************************
8 x/ D$ }; n+ z搜索:BOOL m_bReport;
: c" p7 a# W0 }8 E其后添加:: E& t, u# a9 W: i! g
CWndMenu m_wndMenu;) ]- E5 g9 ?) j- D
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
3 o' p, [+ z# |8 e! y其后添加:
9 Q# | |3 x" d8 G4 W# Q) t6 Gvirtual void OnRButtonUp(UINT nFlags, CPoint point);
0 \5 h/ J; q, P$ U' c3 N; D$ \ {* @# x7 v
! S7 {; O9 i$ j9 M
|
|