|
|
源文件中_Interface文件夹下WndField.cpp文件; x: P* V R( ^+ Y4 _" p4 v! k
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )+ a" s2 m+ F r0 A
, [* G, Y, Q, c d! k' bstruct sItem
& l. g+ Z% w% t! f4 I: w4 r{
0 H0 }, I3 T0 R' z& U; t. V7 h' hDWORD dwId;$ k5 R& i& U0 B3 ^6 z3 R" c
DWORD dwKind2;' I! [5 d: S5 Y4 ^' y" y w8 L
DWORD dwItemId;
/ w- W8 R1 t7 Q2 \BYTE nIndex;
1 S1 s* D) {% T# q( R; Y" OsItem(){
1 N- E; } ]$ c* j/ i dwId = dwKind2 = dwItemId = nIndex = 0;
: L5 j2 u/ [. h8 i+ z$ O}1 ]' R! m3 e- W9 R3 f0 X
bool operator < (const sItem p2)
6 e+ ?- ]- a# v1 p' S{* }9 P' F4 A9 ~2 ~2 q) W
if (dwKind2 == p2.dwKind2). T0 ]) f$ F6 ?& V* H( T
{
. N- C3 `4 K/ T* G2 {6 H3 k @2 J- } return dwItemId < p2.dwItemId;
/ p+ R D/ [8 J1 u" \ }else{: Q0 J; F6 Q# m; P. A Z
return dwKind2 < p2.dwKind2;
/ i3 y, I* ^5 v }, J2 C% G" U0 h9 y
}
- l& X, v/ a# F% m& t/ P8 E5 f2 u};
" P: {: f, \1 X9 M& {class CInventorySort
7 d. _- N/ b W8 }& ?% P{
9 x# Q/ Y( @7 D. Z! D# Upublic:
. C4 D3 z& l8 b3 s1 J+ _CInventorySort()
; h! e7 z1 k b- _$ i2 k( P2 D% Q. K0 Y) a{
1 }' n% t. H3 d$ s4 G7 f2 w) G m_dwPos = 0;3 }# R5 `9 h+ E0 u! I
}
7 Z: H7 I/ p0 i& `5 c. c; V~CInventorySort(){}
. w, U: X3 m. g' |- Uprivate:! b: }+ X1 e8 |& q+ W, I
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
3 T3 F& p# @" D: n6 X6 \DWORD m_dwPos;
9 E) s* K* Q0 ~public:
; r7 \9 R( n! V, Nvoid Add(BYTE nIndex), }1 z5 g8 M2 f& K% y
{( @8 q) a5 v p- {% o
if (m_dwPos >= MAX_INVENTORY)% a* Q! A$ U% [3 J \+ u. R
{& y: C7 n4 r( L) {6 ?
return;# K0 v) d5 O1 j+ m
}& T3 D4 H! X- v7 s0 j
m_Item[m_dwPos].nIndex = nIndex;# D6 \2 A: S$ ]" V. m" W: j
m_Item[m_dwPos].dwId = m_dwPos;
: H# x- m$ ?7 o! q. N: _3 D m_dwPos++;, ] S; E6 F. u5 E
}* h7 o8 m4 N8 o$ r# T
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
5 b* N- I6 a4 O& U{+ [, U/ i; Q$ B( Z5 l$ H9 {
for (int i=0;i<MAX_INVENTORY;i++)
" a. ~) f% [1 ^1 g0 J {
, |. P$ R: r! O, \( ]6 @ if (m_Item.dwId == dwId)
) x3 C. H6 f) K6 H {
! q" T* W0 S+ ^3 c1 ~ return m_Item.nIndex;9 x) ]: Z# p6 D' d/ ?( T; H% \
}: D9 l* R. V! }& `
}
5 i! J( i% O ]$ I, q, x) m return 255;
9 e8 f8 h4 S/ ^! A% Y: q; y}2 S% c o% r& K! l+ h" {; T
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
1 b( z2 G! D/ h{; d4 w! Q5 ]) S4 p% x P6 y! |
BYTE nTmp = 0;" u# n2 g( K* x6 c9 s, q
bool bDest = false,bSrc = false;1 a: t% |8 I9 h* P) g* j
for (int i=0;i<MAX_INVENTORY;i++)+ I8 b; q0 M4 b
{, `: z9 H1 g+ O; e$ A# z. b
if (dwSrcId == m_Item.dwId)
+ N2 h; M' {5 q9 V0 ~' \7 A2 K {
7 B; g! W: m( ] //id相等 则 改变对应的dest和src
; M7 k5 f5 G4 O0 {0 D nTmp = m_Item.nIndex;# ^3 h! y Z" M5 J
m_Item.nIndex = dest;3 C0 E! q, V2 B6 t# D4 F6 Y
}
2 U. g2 q6 F* q3 o& p# b }
3 `7 Z# ?; j# w; y: f //临时数据保存完毕,交换开始- }6 J6 o/ A% S2 }0 V# ]
for (int i=0;i<MAX_INVENTORY;i++)
) f7 G% b8 p% p) }" d {0 i" P! u2 V# Z+ _1 b9 v* N
if (dest == m_Item.nIndex), N6 I. x7 h, O3 L' H) G: t
{3 P2 V+ B) G/ P$ k2 S- K ?
//id相等 则 改变对应的dest和src D+ c' Y) Q2 _$ \) V- C3 S
m_Item.nIndex = nTmp;
9 U0 S4 ~4 J( R }
# }8 `- w: K- F) r! m }+ F" B- R' c7 _3 A7 u4 o4 r
}2 f1 ^7 t+ I! [. X d/ y, a- p
};2 q# ~" `- Z6 H8 z; E; J6 X, K* E( a% s
-------------------------------------------------------------------------
( [! h! f! k) c. A依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
5 [ u: D1 T. X- u搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
: K6 z+ K& ^- ~6 U1 G9 j; H紧靠其上添加:
8 i7 [( o" Y; }$ j( {- ^$ p' dif( pWndBase == &m_wndMenu )( f1 ?! D/ Z2 g3 e9 q$ E
{
. t4 S) L+ t( T& L switch( nID )9 N2 p' b) D# F6 S" n
{
4 V8 Q+ G6 t; {! y8 C2 u case 2:" x; r/ t0 g X" d7 E. I& d! l
{
& D; }: n9 ]7 e( r; c" n //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
~! U- N6 M p4 \ if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))1 z5 d- o# }* n8 r8 o
{0 L/ D1 V+ m e# j3 M
break;
6 K4 s+ H x" T }% I- e4 y; t4 x! _
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)( s. Q9 Q; k0 T: z5 a% A& k& }* ~
{
- w. `; p+ p& m( v8 n9 A+ s CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
1 w2 i) f7 ^7 I9 }% m3 N if( !pItemElem )
+ |( F8 C6 I3 K* S0 H; | continue;. p5 N# l7 v6 ~9 j
if(pItemElem->GetExtra() > 0)
' J6 `! w% ?% _ continue;1 }, D3 ^1 P8 P- C
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
! F' S1 P) N5 ^+ r# i continue;$ [% I6 X; ]2 D8 ?1 f0 }6 U7 A
if( g_pPlayer->IsUsing( pItemElem ) )0 M/ k; c5 {. l& v# d
continue;0 F' E" T! `8 F. Q( b
if( pItemElem->IsUndestructable() == TRUE )
2 n; A* z$ n" P2 Q3 l4 M R5 H {- ^: @5 C( ^# j0 B# h
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );' h, D" v- v$ Y% _ q; u V
continue;! ?! L8 W# }. q& V2 q
}! S- X' W! I% n( u; U/ f
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);9 }2 { ]- d5 G( j$ \0 I! D9 _ H. L
}
/ P2 s f6 U7 f9 o- M$ w break;
r8 l+ `- O7 \! S }/ A& z$ j: ^+ j4 g! [
case 1:7 v0 ], i$ B! i$ R; `. ~8 a
{
) D# k G/ X, ]# s' h3 \# i //整理背包8 m: l: c @* y7 j
//////////////////////////////////////////////////////////////////////////: g0 _# h* y2 i- _% q9 e8 ^: @# P
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
3 E3 V8 _. F) p& \4 ~ //////////////////////////////////////////////////////////////////////////9 ~3 r. g$ r) K* |( M
//////////////////////////////////////////////////////////////////////////
& s2 `% C1 V# W6 A CInventorySort* pInvSort = new CInventorySort;
/ w+ z! \0 {" T) u3 v0 m vector <sItem> vItem;
1 D% x3 n% o/ j& p$ T vItem.resize(MAX_INVENTORY);//初始化大小$ {* Q% |/ b$ q7 `
//////////////////////////////////////////////////////////////////////////2 D4 @3 F$ X# b% u' k- G3 C
//填充数据
2 _# m# r. C6 h% e) n3 z% a for (int i=0;i<MAX_INVENTORY;i++)! r. T" u2 U- F5 R- C8 j
{
$ N& z' c2 b/ F' q" d2 E! ?* ^ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);- M6 r2 e; E* d
if (!pItemElem)
2 F$ y* T; O8 |2 O1 ^$ [0 I/ ? {3 |8 G" I. V; p2 L% E% G
vItem.dwKind2 = 0xffffffff;
' `" h: s9 [# K% |& y% i. l( s vItem.dwItemId = 0xffffffff;
% D+ [5 |5 A3 t vItem.nIndex = i;9 ]$ `% M5 g& D5 e% ~
}else {
9 F1 O0 P6 z, N0 v2 k7 f% |$ u3 e ItemProp* pProp = pItemElem->GetProp();
( g$ O' A/ I6 N) o& { vItem.dwKind2 = pProp->dwItemKind2; G9 S7 Z/ c4 h8 l5 r
vItem.dwItemId = pItemElem->m_dwItemId;
0 f2 r1 h3 k# [1 d5 P vItem.nIndex = i;
3 d8 C0 f& F& T6 o }
8 u/ d" f9 ]+ o* D //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
" e* Q: Z. |( y* e }
; D* r. h% d5 c4 F0 a- O //////////////////////////////////////////////////////////////////////////
. k( q: Q, _( K( _ sort(vItem.begin(),vItem.end());//排序# z& ^% r. k% [0 |
//////////////////////////////////////////////////////////////////////////3 z2 h5 r( Z# D' G
//交换- I; @! A5 X, C3 j4 ^4 K. ~9 q
for (size_t i=0;i<vItem.size();i++)
1 x( ^* Z% \, ~$ @/ Q( G, O1 m {2 F' n, ]. v& o4 {
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
. a$ R# {" w- \) l7 V8 s" Z pInvSort->Add(vItem.nIndex);& ~. l {# t. h1 i; R4 [
}
6 T, d( S9 Q9 Q, A+ G BYTE nDestPos = 0;# w+ }5 M; W& t4 x! ^0 K8 | C0 D0 \
for (int i=0;i<MAX_INVENTORY;i++)
7 Y+ _/ V1 r( K+ } {5 A+ f' \5 ^5 Z# Z* ]) r
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
. C& O5 V9 ~7 c. Q! E, y2 Q if (pItemElem)
* u" R; w! N& t: o) V- e% j3 } {4 g/ ]1 u) H! b; b5 `2 s
if (IsUsingItem(pItemElem))) u% j" m: }$ I: b6 C. |# J
{: v, A0 [9 v/ M4 R# ]( f: h
//这个位置无法放
( K5 O8 Q6 h1 I& \, K2 |4 G: N nDestPos++;
! h3 z( U# t f! F& ^- \/ P } j. n0 v( t9 `2 q- H) J$ s; g& W
}$ F6 u8 m! U' ]- o* e x
BYTE nSrc = pInvSort->GetItemSrc(i);+ ^5 h# n; e6 X& F
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);/ }3 K9 X2 w$ S" u) Z- f
if (pItemElem)$ O+ u j" M* r' Y4 M
{
2 Y% g3 }6 d: g: Y* x# h if (IsUsingItem(pItemElem))* w- q: O, y/ O: L# E q
{
. Q. k/ D) R# X9 H( D3 a //这个道具无法移动,跳过& t' V* k1 F% w3 z, l. s A
continue;
. R4 F2 u' n2 I9 t& l }8 M+ P2 \9 O& a, A
}else{3 w% K4 _1 h& L+ m, v1 G8 o( Q
//空位置 不用动
3 H5 i$ S" U: H; D continue;- Q: }2 R3 @2 [+ ^8 D/ t/ f8 j( X/ |9 E
}
6 i1 [4 x8 _/ X* _/ V9 |/ [ //////////////////////////////////////////////////////////////////////////
4 v/ j, |, {: y //开始移动! z9 Q9 D5 N% q# q
if (nSrc == nDestPos)# V/ E! B# k. R5 s% g$ B
{( P5 P, `2 o9 B0 a' V
//原地不动
! A9 G2 o U: x nDestPos++;. W3 S9 Q, W+ B* K9 w! r! Z& h1 c
continue;" G' {2 L7 I/ g; h g& r. J
}- {0 _# z* O7 G" x9 t
pInvSort->MoveItem(i,nDestPos);
7 L5 y6 n( P/ N8 v6 R) Z g_DPlay.SendMoveItem(0,nSrc,nDestPos);7 o# ~7 n" L" x9 W, A& s7 `
Sleep(5);
- X6 N2 S( m6 X+ l" H) g //Error("移动 - %d->%d",nSrc,nDestPos);0 Q& ^# Q+ F2 x# p
nDestPos++;8 J' Y1 I, B+ T
}
; U3 k$ M7 e8 N3 Y% I //取第一个元素的信息
! P5 `! W4 v4 s: G3 I: Z* X /*
+ U9 }" g7 H% q$ W' M3 F/ m if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
7 G% T& V3 P1 Z' d3 D2 a9 J$ q {0 T0 s: P% L$ C ~8 O! O
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);5 x2 R1 K5 P8 B" ^' Z# e/ f. h; h
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);2 \% u& }+ u# { \0 `' s* W, m7 ]
}
2 `/ P& q" ] e9 W. Y/ d */
, Y( ~* x" A# G; p1 J, v5 s //////////////////////////////////////////////////////////////////////////
; q' D: X6 E2 M9 w& z break;; t- r+ c! ?; p! _3 D0 g
}1 a" n/ s ?; e
}
( k5 v; m# Y1 C! O& B, d! X}; @ k& {6 w ]( V6 k$ [) ]
m_wndMenu.SetVisible(FALSE);
* r ]) E9 ]3 x7 C3 F0 H3 | x* Y) x7 |
--------------------------------------------------------------------------------------------------------
& O& |! a' M2 t搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)4 P \) z8 ~+ H) h. c* g k* M% E
{
5 S5 h6 p! ]. ?2 aBaseMouseCursor();9 S- M s! K/ h" p( U
}
& ]) s) v- x0 i5 q在其下添加:" C- N! Y3 r/ C% X, {# H
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
+ }9 m. v) Z4 Q/ F2 Z{
* N! P% D& i6 E0 J, i0 ?: f- Fm_wndMenu.DeleteAllMenu();
& c# D- |- y" H0 o1 Y- N3 D+ `m_wndMenu.CreateMenu(this);
4 {2 n9 |. u/ T- K% E$ }m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");, Z$ R; o. S# x, [- P; ]
) E N- z2 D! q4 }/ |. {if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))* z, |. h/ q: O- E
{8 ?0 U7 V( _; f1 j p- S7 Z; p0 y
//P以上级别才可以删除所有道具2 W& n5 k' z$ B: F/ d, {
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
& _9 K4 s. a6 |; m$ c}
5 E2 K* B; V% E7 Um_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
0 v9 M: s* V, S$ ?8 @$ u! w, Gm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
& s* l5 k* J2 Zm_wndMenu.SetFocus();; j* K- b+ e0 V U, W
}+ }1 P6 F) y/ O3 A8 \3 W
------------------------------------------------------------------------------------------------------------4 l) A/ L$ r* a' B7 k6 n
*************************
9 O6 U' y4 t+ `WndField.h文件) d& A6 D' `5 C9 V
*************************
G& Q8 N* c# B. ~% c8 X; `搜索:BOOL m_bReport;& \4 t; W! u* l" m
其后添加:6 F8 j5 c; n: p3 _4 D: O. t
CWndMenu m_wndMenu;
& t# S* f$ b. K$ {: A8 ]搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
5 P+ t' x& \4 ~5 Q& E其后添加:( I; q/ q9 U/ ]3 S( b' a4 D0 W
virtual void OnRButtonUp(UINT nFlags, CPoint point);
7 m9 A4 {6 {' L: e
I* c& K/ C& p0 E
5 G; s8 G3 ^/ t |
|