|
|
源文件中_Interface文件夹下WndField.cpp文件8 h4 u6 I" W( A9 G1 z* w
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )+ l+ S0 J0 ^" D$ E' z# t7 u4 l
( o3 h& ~4 a+ n& i1 Dstruct sItem2 \/ j. h# |' M; B
{
: b7 H F6 Z2 QDWORD dwId;, @2 D* Z" B* Q: z
DWORD dwKind2; y- s: a, N4 ?- ?9 x) a
DWORD dwItemId;
2 S# H: O n. O1 v# D, ^BYTE nIndex;
% ]2 h$ m. f7 R" ]- ^9 `+ XsItem(){
9 R! M) \8 ~ _, M1 m) R. O5 T; | dwId = dwKind2 = dwItemId = nIndex = 0;( b' Q9 P1 Q: ]# O9 J
}
, j8 D4 m1 r5 rbool operator < (const sItem p2)& V2 e. w5 N# M6 t
{
, R% G- N/ C( G if (dwKind2 == p2.dwKind2): i6 E% r7 o& `$ Q* @* b
{( x3 F7 R) P# q8 f9 Z
return dwItemId < p2.dwItemId;
: `1 h7 e6 f7 _ }else{ @* U7 d" I4 ?, V, D
return dwKind2 < p2.dwKind2;7 g! s9 B( W8 d; Q3 a4 a8 V' D
}
) n S8 U( W" @( |. Y}
) h2 M* h" s7 b# Q- n}; t! } F! M( [6 T
class CInventorySort: u8 j' S# D2 P5 ~) \8 w" m/ Y8 ~& e7 K
{
. i( ^& C; _5 J' W* fpublic:
' R0 U# u, g2 n7 KCInventorySort(). f' t$ A1 {( l% l6 d
{
1 Y6 O( K2 N) T6 s m_dwPos = 0;
5 O( A/ K2 I2 Y& u8 ~. y/ t7 y}
5 s1 ^' b1 X: [- X+ K9 f' P~CInventorySort(){}2 r) W* [! B7 Q: S
private:1 z' ]9 ^2 V6 i7 [
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
! J+ L ?3 b }* i% y2 {DWORD m_dwPos;
' J; w$ U, L5 T S+ f L0 _ Hpublic:
7 _9 u/ ^+ ^ L! mvoid Add(BYTE nIndex)
9 i% u% q6 T0 }{' r% M. r4 [. s U0 b$ e0 i! P
if (m_dwPos >= MAX_INVENTORY)5 t" n2 F" R; h! L9 Q6 U/ n
{: V) @2 @: Q# H3 R3 g$ f
return;
6 @: G& e& |/ U9 L% { B/ q5 I+ D- ?; x }) M* Q& J G X3 I8 v# [
m_Item[m_dwPos].nIndex = nIndex;
1 s; ^3 X6 T, _+ B) |, \, C m_Item[m_dwPos].dwId = m_dwPos;- U/ l8 [& _- T
m_dwPos++;1 I4 a, l5 S5 B J! J
}
$ {" b( @& p( }' S \) IBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列1 w% o2 G. S6 T) W6 {) v
{0 t6 q+ D4 B0 i% S, t* h3 x
for (int i=0;i<MAX_INVENTORY;i++)
; \$ o9 Q2 f9 s0 L {; [. v% d/ V2 F- T% Z0 r* I/ V1 ]
if (m_Item.dwId == dwId)' k0 b, S( r! W# E; e5 V
{& f5 v% M! ^: [. n2 L
return m_Item.nIndex;
, q& y3 o/ L0 n# Z }
?, j: t/ Y% h( E* I }/ Z# V% \. g) b; \5 @) |+ l# u
return 255;
$ B- [+ T- ]! p5 ?& Z}
, j, S% t ~ c& ?1 ?: Qvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置, q- \4 ^3 Y" G8 M5 `1 b. f+ Z- O+ f6 k
{$ B5 r l$ S4 }( ?0 @ s, Z' [" V' {' X
BYTE nTmp = 0;! [0 z" v# J: k9 p& |& {
bool bDest = false,bSrc = false;
0 o$ f0 D7 F$ b1 J for (int i=0;i<MAX_INVENTORY;i++)8 b' z. h1 E/ C9 O9 I+ j' D/ f
{
, k+ `- B; I8 H! g if (dwSrcId == m_Item.dwId)- \4 ? j6 j3 r- @/ i
{
" M0 E" K+ T" L/ ]) A //id相等 则 改变对应的dest和src7 W2 t# }/ d- S; c# Y( U
nTmp = m_Item.nIndex;9 T1 z) f8 h1 W6 Q2 h
m_Item.nIndex = dest;
# i7 w3 D1 i- p+ u& s8 R A }
- r; ]9 |# @8 C }" c* x+ P8 ]; H) v
//临时数据保存完毕,交换开始- d* U" ^+ `6 W$ Q( G' m7 l& f/ m; O
for (int i=0;i<MAX_INVENTORY;i++)$ V2 |( z0 v' U& t/ d U' m5 g
{: K* I* P# T2 T% {) C
if (dest == m_Item.nIndex)
$ j& G3 h" [3 x" R9 U( X$ G {
0 e7 a9 e9 E8 f7 U //id相等 则 改变对应的dest和src
: G. { K: B2 {1 h m_Item.nIndex = nTmp;* M- p' C# [; T/ i3 z
}- W# Z/ c( ^5 Y# } i8 s
}
; x0 K! Z5 _ r3 q- r}. q/ R1 E; P/ v" {" q9 }
};
1 }/ T8 g' @" z- ]6 L' Y-------------------------------------------------------------------------
1 J/ [+ |1 d/ i3 t, l* w& k9 k依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )! V- Z+ d5 a- W7 P8 M( j9 Y
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
0 ]5 j6 @; B5 Q: A8 P紧靠其上添加:9 i8 m, m! M5 n/ D' `1 Y
if( pWndBase == &m_wndMenu )- O: ?: x% P, {# X. m, ?& {" K
{" x: G# e) H4 Z, F8 n# ^$ e+ H! d
switch( nID )
6 D6 Z: L9 [9 Y% K+ K5 M) t! v5 i {
* p. O9 `+ g$ r) N case 2:0 N8 b! p( W% z, ~/ E
{
# c( d+ b8 |" i- q7 |5 O' J //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
8 ^% H8 K3 ^" B! a6 h4 @ if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))9 z' ?1 r% X3 n- | c
{. a/ K: _1 x+ x1 `, g+ E0 \$ p
break;! l) U* e0 l' |. p
}4 K! K/ u, @& h$ I2 I
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)' k1 j2 s3 ?( Q% D4 T
{" e- V3 s" [3 K8 z4 N( |
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
3 _5 F* Q0 Y! S+ v' v/ [ if( !pItemElem )
8 |6 C8 n9 U, z3 W' E continue;, e% A' y/ b* g% d
if(pItemElem->GetExtra() > 0)8 h& m4 X% J7 j
continue;" u' q; \) ?2 u9 U; U& e. s
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
- R1 K; n$ D& M continue;# d% C0 D, F$ u* h( p* w6 B/ @
if( g_pPlayer->IsUsing( pItemElem ) )7 g9 @' O& {. ^+ |* A
continue;
( w8 Z- e; t, ]; _ G, v% t' i; X* Y if( pItemElem->IsUndestructable() == TRUE )6 v K+ r7 `# i/ T4 F4 p
{
: l, j' s2 `9 E) L5 x# Y g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
; r* \8 T; S" Q/ b/ r* u b# X continue;
{# T' Z0 C c | }
5 ?) t/ i& S' e g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
6 @ Z" U7 X- s }
# }( M( x0 r: W, R# D! M5 o break;2 o5 g" b$ P2 Y
}
% U* w1 a' N: l& ?' Q& ^ case 1:& O% s/ C9 `6 ^0 H! V4 x' x
{
% o! W, P* R$ M' o //整理背包0 p Q# ]2 v+ Y
//////////////////////////////////////////////////////////////////////////" p. Y1 Q/ `4 c/ B# J
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );0 m) c% s7 t! h3 }
//////////////////////////////////////////////////////////////////////////, K7 t/ U( |, N8 y
//////////////////////////////////////////////////////////////////////////
/ l: Y( r# |, W5 T CInventorySort* pInvSort = new CInventorySort;& H4 b. `' v* S( b" Z# r' V1 l) i( H" n
vector <sItem> vItem;
6 m/ q7 S2 u+ n7 V: }6 n' j B vItem.resize(MAX_INVENTORY);//初始化大小5 @6 U$ c" s% u! l2 y
//////////////////////////////////////////////////////////////////////////
. ]$ t. o( I0 ~, W) y //填充数据! _2 B" z1 I) U
for (int i=0;i<MAX_INVENTORY;i++)
j3 e3 t. s; E/ ~; a {
, J8 l) a) F2 E( J/ a CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);% q8 q" d) |( E& |
if (!pItemElem)
/ D( @) j( q; l% N0 c: |+ y" K& d0 P {
. ^* v' j( r, s. J- y' G vItem.dwKind2 = 0xffffffff;: p1 X8 V$ `# G. w) r- r- V9 \. \
vItem.dwItemId = 0xffffffff;' N( ?$ I, X. S. Z
vItem.nIndex = i;* j( x: i$ U/ a' W7 u
}else {! l ~! ?" s- r' z
ItemProp* pProp = pItemElem->GetProp();
; P& h8 S. |' k# v4 ?9 T. Y9 o; ^6 f vItem.dwKind2 = pProp->dwItemKind2;
W1 l3 C3 P0 F0 W- Q; d, ^7 c+ T: K vItem.dwItemId = pItemElem->m_dwItemId;7 V ^) ]7 l! g8 L
vItem.nIndex = i;
6 f3 _% h8 b! s# u8 T }
4 r5 A/ G# O& m //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);6 a$ R' ~! u" n5 D8 c8 T# h* u, {
}
6 U* c7 G+ B6 g8 M) P% q' \ //////////////////////////////////////////////////////////////////////////
2 v; G- {( E: D& k. U' Y sort(vItem.begin(),vItem.end());//排序
. O4 N" D% Z$ {" B% r% u //////////////////////////////////////////////////////////////////////////0 d8 ^- V+ I' E9 J* h P
//交换
% H n3 x( c. ^) W7 n7 S: O6 @2 [ for (size_t i=0;i<vItem.size();i++)
# K. y" f0 O* A' A. j4 D4 I {
0 l' R5 @, O. Q+ ^% w //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
- F% a9 ?2 L; X- M! ?% p pInvSort->Add(vItem.nIndex);( S" \/ L% z2 Y+ J1 O6 |
}
! c! C' _" |/ F& a( g BYTE nDestPos = 0;
+ }$ H* w6 H1 Y( z; ~! R+ \) ^$ _+ e for (int i=0;i<MAX_INVENTORY;i++)
2 ~& \$ M7 S4 S) Y) { {% {* ~# [2 b' k B! F' a
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);$ ^# N5 g/ w. t7 d: u
if (pItemElem)
- R# p" ]: c6 ` {
! t. {8 k* ^1 E: Y if (IsUsingItem(pItemElem))
' z- ` x9 j! R/ L2 L* s {7 v% f3 [) S, {/ J* B
//这个位置无法放, ?3 B; I# F0 b8 O, j3 E2 ~1 u* k' X
nDestPos++;
2 B; c: P' U) H0 Y3 a6 a: ?' ~ }
" T7 q5 `2 c: f& k% c0 D4 J }
* V( S4 k2 ^' g5 p4 c BYTE nSrc = pInvSort->GetItemSrc(i);8 c) U, ~# S i
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);" l: d/ {! O6 E; J6 x
if (pItemElem)1 ^; ^9 ?" c4 ^3 S& {. j9 ^
{
* A$ P! n1 t$ ^: n3 z/ L6 f) F if (IsUsingItem(pItemElem))' @, L6 i l0 w
{
. S+ K/ a1 y, I% Y9 x2 |% Y //这个道具无法移动,跳过
( ^ G& S( o6 q3 _% w1 ]0 M continue;& d8 G) U! [# W8 A% A! @
}
$ V5 P; D2 B0 c0 u }else{4 a+ n! ^0 Y. \/ i
//空位置 不用动$ [ j0 g; @2 C1 E' S
continue;" j* y/ [ [) z8 I
}( S+ G- ~* `9 J+ @
//////////////////////////////////////////////////////////////////////////
" [, x E/ R) m( F) X* O( C //开始移动' k1 h% J# }3 D; J2 n
if (nSrc == nDestPos); n; n7 Y8 H, ?* J) @$ n
{
6 x4 ~% m0 O0 y, R; |$ q* J //原地不动
# i* _1 X. ? C* {+ X nDestPos++;
% M7 v# Z3 u" r) P* V; z continue;
2 l" X. E' o/ |# S, t }. U! e# _ H( N1 x
pInvSort->MoveItem(i,nDestPos); t+ o0 v; y# a& q, `! F' E
g_DPlay.SendMoveItem(0,nSrc,nDestPos);+ q2 t8 x0 z! h
Sleep(5);
/ y: G; ]; O4 P9 u1 ? //Error("移动 - %d->%d",nSrc,nDestPos);
0 ~( C2 L/ B- b( s% i6 ?! v6 w nDestPos++;
+ z0 h# P) G5 ^ }6 q9 n* P P+ u/ ]9 F2 A3 R5 A" E" p
//取第一个元素的信息9 n. {2 u# T. V+ K
/*
0 E7 ?: b) G! g7 p if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
+ {' s( G; s1 _( l. S {
+ q- g6 o/ B9 b! \ Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
c& [$ v0 U6 w; W, Q! l7 F g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);2 J0 a' `( q/ [- f0 v# \
}
+ U6 F$ w% K: l& p */
0 ^. r: @ O9 @! p0 S2 r7 A$ A. E //////////////////////////////////////////////////////////////////////////
. ~ `6 N' m* P7 i; j break;$ H+ l# W7 D+ s: H
}
' z) P$ I# x5 V' l }
+ P0 x3 U% G6 d}# k+ l. a j9 k* l; V- r% e' z
m_wndMenu.SetVisible(FALSE);, o! w1 o9 U) B% B6 @& q1 k5 @* Z5 q
+ u$ V% V4 ^8 O--------------------------------------------------------------------------------------------------------0 f1 }" e ^! t, N1 c; _
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
% F( r. [( V+ k% K. [ |0 p{
4 b3 v" t5 [3 r& rBaseMouseCursor();
4 t9 {( i$ @3 Y9 j6 D% [}( C8 B: |; c1 ?- I( x
在其下添加:
0 r& o/ H+ h# s: c, p! o$ |void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)5 ^" N( I. |# [( m6 M
{
z; k4 f9 S8 d5 Q i0 R0 f1 Gm_wndMenu.DeleteAllMenu();
6 [- [$ H2 n# E) c! vm_wndMenu.CreateMenu(this);
; ]1 M2 d5 S- H/ Nm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");6 I" v& N9 q8 R; S/ o0 n9 x6 ?
) L* j/ X3 ]# v8 f3 Tif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))0 Z6 j5 Q% K6 @6 t& t
{
! t; S& G: Z# p5 m2 g# E7 v' ]9 h //P以上级别才可以删除所有道具
$ L! h$ h, ]1 @, ~: R: D4 }, b" v m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
' H8 F0 E& q. V0 [* b}) w( z) s+ Q* K3 B; ^, C" Y
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );3 c9 p& K7 t4 }9 Y/ M: P8 Q
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
% [- H4 Z' I1 R b# ]m_wndMenu.SetFocus();
s, A* I; u( L' R' \1 L! U}# M5 i$ V- f' U9 Q3 N6 g
------------------------------------------------------------------------------------------------------------* R8 U3 R0 N5 m+ j. N" R( [% E* w
*************************! b& z" ?2 V; l2 `
WndField.h文件1 K- U0 h: {* M( i/ I; E
*************************
; s4 n: e) n7 _0 b# p. S# Q7 }: P搜索:BOOL m_bReport;6 I2 W1 I4 j r6 m3 _; j
其后添加:
0 e; g/ a# ?" V% QCWndMenu m_wndMenu;+ I) H1 ^) {- `+ B
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
2 V( I) T0 W% q5 ^& `: R5 E其后添加:& ?: Z# k4 P. B! w) e a
virtual void OnRButtonUp(UINT nFlags, CPoint point);2 c, b7 h$ F8 l& j% }% ]# ~9 D" c
. P" `0 L2 S9 r8 h% p+ k& c# Q+ g
6 p* O4 ?( S3 a7 W, i } |
|