|
|
源文件中_Interface文件夹下WndField.cpp文件! ~( \, O7 d* K ]' p3 d. @9 k
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
/ U6 f2 f q5 B5 ^0 e5 F% }3 C0 [1 v0 M/ Z+ B9 k5 N1 e+ u: t
struct sItem
# G! s* O$ ]4 n' _+ R{
J- G/ N- S* k" O$ U! g: t8 e6 _DWORD dwId;
9 l" K$ x9 @( s* @DWORD dwKind2;
R B3 v4 E- E- PDWORD dwItemId;
! J$ Q: Q) N7 _3 b0 FBYTE nIndex;
+ f$ Y d; |$ k+ B/ ^, v# ~1 r( rsItem(){
4 g4 ^; J1 C' K# r0 b, L dwId = dwKind2 = dwItemId = nIndex = 0;
- m$ t* w! f3 D}
: Z* y* j Q T' s. U K3 Cbool operator < (const sItem p2)" o" y6 ]. ~. B8 Z, Y
{/ O+ B: j: Y! n* @7 B1 c
if (dwKind2 == p2.dwKind2)5 H1 R- k/ p: e% V: [ T" C
{3 _- I) C6 ]' {9 {$ f0 n$ f
return dwItemId < p2.dwItemId;1 D( M6 f2 b, r0 d
}else{
9 A1 x* v& b# k% g- g7 d ?8 ] return dwKind2 < p2.dwKind2;% Q+ W4 g- K# p; R' j* {
}9 {. b' L6 a( r5 h+ O9 m; C1 O5 m
}% |# q! h3 Y" y/ e6 f$ Z1 N8 Y- v3 ]
};% ^0 w- X ~' z! |# p$ H
class CInventorySort7 x1 Y% N# B8 d3 h% h& i V0 E
{& R8 Q7 j* [' @
public:
1 \8 j+ g2 `" v- ICInventorySort()5 W! i+ ?0 j2 G5 d: Z
{( Y0 K, h) j- a1 v0 o+ b
m_dwPos = 0; k" ^2 J! P) y- N! T5 ]! [
}4 P n! _& L& c& e& @$ s
~CInventorySort(){}; U7 O/ Z; ~& k: S+ `9 B- \
private:
' L- I1 n) n+ j) P- I1 s- Y$ xsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
: Q8 Y+ ]5 ~) w! f# WDWORD m_dwPos;
, A; B. C2 O7 `! ipublic:
, C, _; d* k& g" `) h( Zvoid Add(BYTE nIndex): [+ p q9 G% U; Q6 V0 q
{9 w3 q" E U4 X+ r
if (m_dwPos >= MAX_INVENTORY)3 s1 C' K2 R+ P5 S7 y) z
{
8 w; o% u5 J: r+ P return;
! O" B6 X9 ~' h' s4 B: X }
: N/ C, M( m$ d! N4 @3 R0 p7 p6 m m_Item[m_dwPos].nIndex = nIndex;9 k! t3 ~% K; O$ m0 @; c# r
m_Item[m_dwPos].dwId = m_dwPos;; R l: Q2 c/ A* l+ W
m_dwPos++;
8 e4 i$ d. O2 K9 a}
; M5 |3 ^2 F/ }, w6 p& G |) cBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
! j2 w5 Z# ` ^9 \( Q& |0 C. p{6 p$ F+ l, U2 d# I% i0 i0 G
for (int i=0;i<MAX_INVENTORY;i++)
) v) j4 C& f, Z {
' L: l2 P6 \; ~( w if (m_Item.dwId == dwId)
% T& O, h7 J2 u {5 i$ Q5 n1 s5 G0 P
return m_Item.nIndex;
& i9 n* J& V/ p. q* t4 x8 m! x }6 k2 |) O/ S7 B+ V3 Q
}
- S. k; F* W, N& [- c7 [ return 255;1 p# ?0 Q- Y4 [ f- o0 S% |1 Y9 s
}
& w. M$ U9 D# N# C5 J Q9 p! A4 Ivoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置. S. ^2 l: I: s- Y7 x: U
{6 }+ w' l7 C6 c
BYTE nTmp = 0;
c0 x" q# q3 H$ C bool bDest = false,bSrc = false;3 _3 q5 a. t+ |# v5 A7 |
for (int i=0;i<MAX_INVENTORY;i++)7 l6 | v0 S! r$ Z; d
{
; g$ _0 ]4 |# J8 \. _! k! S' \ if (dwSrcId == m_Item.dwId)+ l" \5 A& j) a) ]. i) t
{
) S2 ~. Z6 ^: w& u% I. a6 B //id相等 则 改变对应的dest和src. e" X8 E( p/ P7 S
nTmp = m_Item.nIndex;
4 e/ U( u( L& o3 H7 E" P7 D m_Item.nIndex = dest;
: W; W' P, _! {* j( m3 r }& P! n+ l* f# L) T. R
}* R3 G+ a5 X5 Q* C& C( S( e y/ C, n/ ]
//临时数据保存完毕,交换开始
* H( `* v' s! u* k: E for (int i=0;i<MAX_INVENTORY;i++)
5 @0 u( B( E2 [1 K/ @ {
4 I# H4 j$ B. o. e if (dest == m_Item.nIndex)
5 @" O& z0 u* U* U% R) A {- [. Y" L; V4 P8 U; C
//id相等 则 改变对应的dest和src
3 C4 b0 h" E- f& u. r* k5 c# Y. Q m_Item.nIndex = nTmp;8 z: z% K9 t' L" T2 u
}& m+ `0 e/ h- v% @6 t. z( G
}
8 j, r3 M; K* ^% P3 s& }}
6 u# V0 C' i6 f( E y0 c8 g};
; o/ |* K, d e$ _ e3 ]: B-------------------------------------------------------------------------, {0 {0 [9 u( _' y6 J, @
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )- i! p( R* C' r+ M+ U
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
( W/ G: n* L/ P4 J. ]$ w1 \紧靠其上添加:* w/ d& m. D; Y" P9 S/ J
if( pWndBase == &m_wndMenu )5 Y& ~: Q0 P' o" G3 K* [
{! @5 S; t4 \9 k% G, |$ u
switch( nID )
. B2 B6 O5 L% H4 H {
3 c2 Q O, x2 _7 ~3 @5 x, K case 2:" O& }" V7 Y- c: K" ` c
{
0 d2 v" V+ T+ K9 H //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
, F6 E7 O$ s' s- q! F. ]. ~ if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
+ g" M& \1 Q7 B5 D' w {
# b5 k- ~% @, F* _ break;9 s& q5 ^" g0 a# t8 l
}, `/ g- @2 E" m) Y- K( \
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)+ s9 g! R& [- t9 \
{: Y: P( Q4 Q; t. ^3 ?* z7 K) J5 L
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
3 N u" x2 _) L if( !pItemElem )' ]3 _1 U$ }" X1 a4 N0 x. P
continue;9 L4 [. b' q4 M, |! Y* A- W' r
if(pItemElem->GetExtra() > 0)
9 R& [+ h0 A( c4 x# p9 ]- I2 M continue;
' @3 Y W1 d. I* ^/ S4 \ if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
0 Z) Q) d" m* a: ` continue;8 E- ]1 G' c* y- |1 O4 Z1 [
if( g_pPlayer->IsUsing( pItemElem ) )) ?1 }/ W, c# n3 n8 e( Z. M8 M; O& b
continue;+ o; P m% q% M
if( pItemElem->IsUndestructable() == TRUE )
' x; |4 j; `& w6 ^& I) F+ V {! L p8 D( ^2 b7 |. t4 z/ O9 v
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
: u* D& ^2 o$ ?0 E continue;
# L4 J- ^7 d* k1 ] }
$ c6 ?5 I* G3 @4 {; J6 } g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
( {8 X. o) Q) O; ?- ^ }
! a8 ~" v, z7 e2 H6 z break;" r6 f5 F8 L8 X3 B
}5 ~" R/ l+ T' f) }% u- P
case 1:8 C$ c$ g: L/ Y# @( S3 i: ^
{
1 X8 q3 Y- G4 e: r. z //整理背包
$ W ~- G4 t" ?; k" l+ ]+ M //////////////////////////////////////////////////////////////////////////
" }, r3 ?- ?9 L% A2 W( ^& d+ C7 U( ` //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );" S& G: X) L4 G3 }- }* @. u v
//////////////////////////////////////////////////////////////////////////
6 T, u9 v0 z5 M d //////////////////////////////////////////////////////////////////////////( H% S' h5 T: \9 K8 C, o+ s1 Q+ n
CInventorySort* pInvSort = new CInventorySort;
$ ]3 N$ C v; [9 X. D' \ vector <sItem> vItem;
$ D3 L1 t. H( f% M vItem.resize(MAX_INVENTORY);//初始化大小. [) K9 O4 m8 ]8 E
//////////////////////////////////////////////////////////////////////////
4 c2 b/ i8 K- \, ], `; x' h! | //填充数据
0 u* r8 \4 R0 z6 Q4 e+ q" H) D$ a for (int i=0;i<MAX_INVENTORY;i++)# R) `' @9 W/ C: |1 R- L# z
{7 T' ]2 l: z' n8 v& V
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
& M, s: ~% r9 y2 Z/ F1 F if (!pItemElem)
7 L- t( F1 q$ U/ j {
. L7 A* E, a. R, y( x" V vItem.dwKind2 = 0xffffffff;. P* p# y V ?& g( m
vItem.dwItemId = 0xffffffff;
+ G- Q9 f- r! J A. k) e% k vItem.nIndex = i;
9 a2 k6 [# V: i# O }else {6 Z# o2 d0 t2 e f5 p
ItemProp* pProp = pItemElem->GetProp();
0 x2 N; d3 c9 [ vItem.dwKind2 = pProp->dwItemKind2;/ X4 N! ~. V2 M/ |' H
vItem.dwItemId = pItemElem->m_dwItemId;5 F& R: ?& }* ` w3 ~4 q
vItem.nIndex = i;
0 X8 x) m1 E) m0 x: c) M }
" W* w4 J. x: N //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);" p! z9 l+ H; d* @7 e$ c1 D
}
3 E7 _" b4 ^7 j2 x/ v- g //////////////////////////////////////////////////////////////////////////
. f" K0 e, F! u0 T% u sort(vItem.begin(),vItem.end());//排序
% Z& v4 C$ q3 G+ r4 R; s8 O //////////////////////////////////////////////////////////////////////////
2 ^/ Z7 N' q) f6 p3 e! V; N //交换
; S/ k+ ~$ Q. U$ W* K1 J2 |) a for (size_t i=0;i<vItem.size();i++)
" Y& K0 m( J) |) W' G: T* y& U, K- c {; E3 Q7 m+ P! J2 n: M
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
3 D9 P. t- M+ r& v7 a& h) e: F pInvSort->Add(vItem.nIndex);
# q+ ?9 g/ p7 f4 C; ~ }7 k! o) J. g0 e" _; A
BYTE nDestPos = 0;& ]8 {/ A3 ^ F+ s; H
for (int i=0;i<MAX_INVENTORY;i++), ]! r5 r. T4 k& S8 @" L+ p
{
0 \4 j7 j3 N) Q6 _8 d1 x7 ` CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos); {& X( y# V9 K4 C% ~7 { U0 Y
if (pItemElem)6 o9 g6 b' W, i
{
( Z7 m4 J* ^- P. O" Y1 | if (IsUsingItem(pItemElem))
# t3 [7 U" m* b: F) h$ x {
9 J+ `! s5 m b //这个位置无法放2 I$ _% m( w3 r3 W. v
nDestPos++;8 h- j. Q# R2 e% w" a
}7 V% W+ N; Q9 }
}3 o6 h0 }5 E/ l3 g; x$ B
BYTE nSrc = pInvSort->GetItemSrc(i);
: V/ j" N& T) F/ Y1 ?0 T' x: ? pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);8 W$ m, |4 a6 ~, J1 z
if (pItemElem)
( `; p3 e$ b: d7 [" J {
. _/ A* N2 k, r* D, j if (IsUsingItem(pItemElem))
& |# u, E4 y" R/ j% Q, E6 G {
# q l9 d* ]' I- S3 P/ a0 M! F //这个道具无法移动,跳过0 v( K. `3 A- o9 F: ^$ ?; Q# ^4 h+ q
continue;
' D7 m U- T3 L9 N0 \ }" y4 l% d$ y# r/ ^+ k7 Q6 r; I
}else{
% ]/ z) C2 g4 Z: Q1 d( |0 D8 ~ //空位置 不用动2 k4 a+ m2 G7 Y5 z' j9 F
continue;" a2 ?6 S* `, Q3 `( O
}% J9 i- {, S9 O Y0 b9 H# X; ? f& U
//////////////////////////////////////////////////////////////////////////
. [% t' X; T- z9 ]7 ] //开始移动, h1 b( A+ E( T& U) A# W' d
if (nSrc == nDestPos)( f, o. T" B: _2 P( Y! Q# L( [0 ^
{
7 w' N/ h m* U4 Z, O9 G$ _7 C2 }$ m$ | //原地不动
6 u. s, S& ]8 y8 S nDestPos++;) G/ g3 A' U. p5 y( n Z. ?
continue;4 z" z6 z4 g0 e" R
}
, [/ V1 \6 c5 R1 y# D J pInvSort->MoveItem(i,nDestPos);
0 O) Y, Z) e8 ^8 ^$ k2 p7 L g_DPlay.SendMoveItem(0,nSrc,nDestPos);" B1 M: f6 r" A# U% `. {
Sleep(5);0 j$ }: k; ?3 [1 J- v( }
//Error("移动 - %d->%d",nSrc,nDestPos);9 y( ~' j0 j( m# f: o! @0 ]- ]6 l% j
nDestPos++;$ l) U$ D5 r( k* V( [ `0 b7 n8 O
}1 a- }; h7 y+ r6 c& \, c
//取第一个元素的信息& ~, h# V/ n; C6 d9 K) `
/*
5 h3 Y7 V- x) _( r8 [& k9 R if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff), n/ `( A; D( A# P/ H
{! b4 I6 b% s: q
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
- v+ a+ o5 S6 m2 t' t3 q. n' [3 b g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
5 E7 ?9 a2 S$ q. B3 Y) ]3 R6 l$ _ }
" C# c$ ^5 M& J4 o s */
# d8 m; G1 W; j) {& {: s8 R- s //////////////////////////////////////////////////////////////////////////- `7 F0 d5 G7 g1 |+ {- Z% U
break;7 G- z0 L) r2 c/ f& f! s
}
4 P. p3 t9 F) E) R: n } 2 ~$ Z; G# r# ?
}( H3 \* n( _+ O. P7 m1 y% h! b
m_wndMenu.SetVisible(FALSE);- `( b) T# J \ O# q& |" b Y0 k
+ Y- D: |2 G o( c--------------------------------------------------------------------------------------------------------" I' j8 x/ S( L+ m
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
# l. P6 o; N( F$ l7 A7 a M1 i4 K{
- G0 y% D* ]: l: aBaseMouseCursor();
2 \1 x! ^0 z4 @" Y/ f}. c4 u% b+ u) t+ ^$ {) C
在其下添加:
& l0 d- L1 {" Fvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)3 E H, H. e3 ?3 ]6 E( s' c4 a
{8 E5 e* |+ f7 I7 e0 B: s
m_wndMenu.DeleteAllMenu();, J" a+ a/ [- p7 p: _
m_wndMenu.CreateMenu(this);
* U) u" @, o: i' Y4 |m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");+ [ `0 [/ A' Z/ R6 A
: f5 d3 l" L& j8 Sif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
* S( G$ n! b8 ?, S$ F{
* C7 `+ e: Y' c //P以上级别才可以删除所有道具5 A6 I( K* W: g7 R/ o7 `4 g5 H3 w) _
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");8 e5 k5 [) @* r9 i
}
/ g1 Q" g a0 w& a! b/ D. Bm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
$ Y/ c" m% A3 \( K3 J! nm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );- T2 r: k( b( z D" J% _
m_wndMenu.SetFocus();
4 ~5 Z& t+ U" a! b}7 n4 M4 E8 |7 b# b5 Y7 y
------------------------------------------------------------------------------------------------------------$ h. J: K0 \ ?8 l D- V
*************************# o, p( }0 `2 s
WndField.h文件
+ D9 n% E" |# B5 u4 d2 U# J9 h4 q*************************
! J X) O0 j N/ \6 `搜索:BOOL m_bReport;
) O; l+ i& ?. C其后添加:
7 c) w7 i8 B+ y. u1 DCWndMenu m_wndMenu;
4 S: _; A9 S: M5 o+ q; o- [! d9 H2 y搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
! R) d) F# F7 h/ B; J& F其后添加:" ^, ]6 U! t4 L
virtual void OnRButtonUp(UINT nFlags, CPoint point);
, {. L! h% a) D' B& k7 q) G: X7 _+ @: A( c/ U" _9 K2 s
b/ v9 v H. `( x6 Q# a |
|