|
|
源文件中_Interface文件夹下WndField.cpp文件
" \: ?! Y0 ~1 H* E/ W搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
. c! P# g b q& ~# V( D" S
/ n' a! Q+ h) W) Y/ vstruct sItem
+ o3 V8 p. j. k$ t{7 y1 S/ V1 ]' x% M; u) m0 X1 d
DWORD dwId;
% e1 G7 P" y/ X- uDWORD dwKind2;9 G& \! K8 w B% m! {3 l7 N7 l
DWORD dwItemId;
2 H" }7 \* W& K( aBYTE nIndex;- L* a( U% s8 }+ r, T! C
sItem(){; f9 W3 e2 l$ q4 L; l9 Z6 r0 v
dwId = dwKind2 = dwItemId = nIndex = 0;2 r: ^! ^" m# H( [+ ]3 d4 h' a
}
, A) o) x H" L2 ?, m5 K! A5 @bool operator < (const sItem p2)4 k+ ~+ v0 Z8 t* j* w
{7 _, q# O: n. r0 C c: V
if (dwKind2 == p2.dwKind2)6 A o& M- Q( X- _$ ?
{
8 e% K: Q) a/ N4 O. O; ?- n return dwItemId < p2.dwItemId;
# c8 k2 g3 j) ]! @+ B. j- [ }else{2 S) ^( _3 j# D' i
return dwKind2 < p2.dwKind2;
6 s9 S+ v+ _6 h0 F* L }
% m0 k" ]: h( B' ?' R5 Y$ U8 u D}
/ \" {2 K! g. O" Q4 q& V& c};% m( C' O/ t" @1 b6 E
class CInventorySort
) ^. Y, O* V. Q/ w" j8 d{
7 j( ~# S0 I- b& E8 k- {- f' Ppublic:
# s, u4 z) X& K$ sCInventorySort()0 a1 E& x+ P& `+ r+ P
{
" O* ?0 l- e7 ^" A m_dwPos = 0;4 ]6 b; h9 ]( H7 z
}
0 R+ n- Q) [* o3 g$ p+ o8 w~CInventorySort(){}
3 `- j' h! C5 F8 X2 ^private:4 Q' r8 \: O q# f9 y* O5 C, F3 w
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息1 t& \% I, W2 U( y4 ]3 U ?
DWORD m_dwPos;
* I3 a, ]( G% I# U Z, ]1 apublic:
2 X, a. a3 Q8 p0 N2 bvoid Add(BYTE nIndex)
5 `. h# x/ S( Z6 E{1 t3 _3 t4 ~8 c1 @ _! `+ z& G
if (m_dwPos >= MAX_INVENTORY)) S1 M; I& V7 s! |9 R4 a
{+ M; D. @& s) ]' t. X2 A+ ^
return;
; U/ e2 E, m7 X: C; f L) S# T }4 y: \5 Q- ~) d- u+ [5 V3 G( ^- O1 y
m_Item[m_dwPos].nIndex = nIndex;" T2 t! [/ W( \6 v7 |5 p& O
m_Item[m_dwPos].dwId = m_dwPos;9 b0 f( n+ o: g8 R# \0 h. a& G* I4 _
m_dwPos++;
+ M: l, l" @* s% x: s}0 W: E4 h6 l R% M. U
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
; i; Z& e- F S8 H. A4 O{
4 g2 a+ M2 H0 ~, f# u( u0 H for (int i=0;i<MAX_INVENTORY;i++)( T* k7 `$ ~' R4 H4 Y' H
{
: C2 e% |6 ?1 U7 M4 b7 S+ m7 | if (m_Item.dwId == dwId)
$ p0 \1 V6 \: r. s U. ` {2 N, t2 Y2 k: N, h G
return m_Item.nIndex;6 J# G/ h" ^+ a+ x! H# D, ], B/ V
}
$ W; d' l! }, E: L8 n. Q! [ }
( y4 M9 x2 R5 U8 n6 o return 255;
) l" F- ^( c' n0 `; ? ]) w. G2 {}/ O8 Y! V" x1 J; Y6 o- m a
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
, D' G0 T2 o5 {: E3 m4 M{6 }5 v( k/ Y& l' ~
BYTE nTmp = 0;1 j, l" { o- Q9 F5 p1 t, E- R1 J/ p4 m
bool bDest = false,bSrc = false;' m8 d8 b( S" D7 p8 d) b0 k1 Z# p
for (int i=0;i<MAX_INVENTORY;i++)
/ d9 `( W; N9 y1 R {
( m: P7 c/ K" E6 b/ G if (dwSrcId == m_Item.dwId)$ o* j7 ? F/ b4 [
{6 g4 w$ c& p! I
//id相等 则 改变对应的dest和src
, H! C9 f5 B* U! w' g nTmp = m_Item.nIndex;
" l- k% N8 I( u2 x m_Item.nIndex = dest;
6 x( D' n( b% u( i& n4 }! C }8 x k* N6 V" N( S0 l
}
# h$ m+ R; s2 L6 c //临时数据保存完毕,交换开始
$ Z T# k- c. I5 y- |! P- k for (int i=0;i<MAX_INVENTORY;i++)
: p! t. W! j" k. E {. r& S2 x8 q* N! v
if (dest == m_Item.nIndex)
5 [. I6 _# s4 m: D+ j1 k1 C {
- q& D* L6 \8 n; r6 \" E- \ //id相等 则 改变对应的dest和src, U- M b" T; l( H& j* G
m_Item.nIndex = nTmp;$ I" ^# t7 |5 X* o- P& d8 ?4 B
}* c# M" w) l6 _; W' m
}/ V1 O) I7 \* r7 b' k, v+ f
}
3 G7 c' n4 h& m/ b0 X};( B% w/ k# O1 ?3 G: {+ ?- e/ s
-------------------------------------------------------------------------+ [: m! ?/ h6 y/ k0 Z( r
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ); k" q( x+ L- e1 A( v+ w7 B
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);5 X6 N! }& J3 E9 h9 D/ |( E( C
紧靠其上添加:
1 O y9 i! M' L2 P. ?if( pWndBase == &m_wndMenu )5 b: t- M; t$ ?/ {. c$ s
{3 m F+ C7 w; F; G$ C
switch( nID )
/ z4 p0 A+ _" m! f {. I. r) G% z7 Y3 ^1 O6 l( Q+ a
case 2:
6 j. w0 l) U/ \$ Z- ^- @; C {
( p3 i0 }3 A3 H& b! L7 { //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
! S/ ?, C, q- P2 _- y if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)). w7 Q+ @0 d; c/ O6 d
{
/ g' U2 Z# j& T. C! F, ^$ Y break;3 _; J0 Z: n# P; H% l
}3 {. O4 D/ N) p: L! }* j+ D8 y
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)! s$ _' z, U: S' R# J
{( m& b; C/ C7 S/ H9 r5 K8 ~) J
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
5 W) f: e5 L; k: S; e if( !pItemElem )
7 l1 P' G+ s0 r: }/ Y# G& \ continue;! t' g8 y3 J" P
if(pItemElem->GetExtra() > 0)
" T I0 ~1 u" i continue;
+ M5 Z5 i: L, Y: H9 j8 ?* @ if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
/ i3 P: z" j4 e continue;" _% `" P, `# ~# P% F" t
if( g_pPlayer->IsUsing( pItemElem ) )
" Z$ H1 x" F# \+ o/ O continue;3 ^( O6 L3 q; w* g, Z
if( pItemElem->IsUndestructable() == TRUE )0 |) T- E/ q5 ?$ K, k- F
{: D- S6 }$ K ^
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
" u r* |. `9 F0 f, e continue; U- W' D6 T* i. X2 N' @6 m/ e& \
}. d) [9 Z2 B n5 m
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
; k* `3 h& h# W }2 O3 e3 |/ Y5 E" M
break;
9 F- Q4 b/ G! o( l: {" U0 Y }" D/ F* i+ H4 ]% l
case 1:
# f+ m4 ^+ P- S) v {# n. F+ c: ]) K7 {0 n2 _+ ]4 V9 O
//整理背包; {& {' x- J% E
//////////////////////////////////////////////////////////////////////////
2 }, E9 G( _/ v9 m //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
. s) m" \( q ] //////////////////////////////////////////////////////////////////////////
/ y1 K$ A; w- V" \2 k //////////////////////////////////////////////////////////////////////////- C' I7 l' \' q
CInventorySort* pInvSort = new CInventorySort;, y& X: y$ b+ i- C; m
vector <sItem> vItem;
6 X( J; r6 T. n1 b y6 u3 P1 X: y vItem.resize(MAX_INVENTORY);//初始化大小
, P0 M* v/ M' f. I3 R H4 d& W //////////////////////////////////////////////////////////////////////////; d! V5 o; n& M( _: G
//填充数据1 r q- T8 S8 _# |1 Q
for (int i=0;i<MAX_INVENTORY;i++)
/ @& f/ R$ j# R4 h3 f8 A5 N { m6 m1 P# K4 a
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);! c9 k1 A1 S' J/ f' `
if (!pItemElem)
: Y1 W- i; \( P6 s9 N, x3 J {
/ c7 c- L) u% c2 |8 C- D( P( [ vItem.dwKind2 = 0xffffffff;$ e) p0 m$ h8 [2 b% A5 t
vItem.dwItemId = 0xffffffff;' [1 ~& ^& n5 F+ R
vItem.nIndex = i;
$ h8 e3 L' m- k( A# K }else {
" M0 U" l+ ?! i) @& [6 i) r8 S ItemProp* pProp = pItemElem->GetProp();% W& d0 b+ l$ `4 V" y
vItem.dwKind2 = pProp->dwItemKind2;/ Y. ^# l0 @& e q% V# c6 T: a
vItem.dwItemId = pItemElem->m_dwItemId;
# g8 Z+ \8 D: @, k# r0 V, M vItem.nIndex = i;
, r! X) ?0 F! n4 z3 Z }; I9 M) n- Y* {8 D1 A* e3 F% k( B( r
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);. G, A' w7 ~5 G9 A3 R
}8 L& l9 Q* A: A: g
//////////////////////////////////////////////////////////////////////////
; B" s9 D9 k8 O/ i( e$ B- ~ sort(vItem.begin(),vItem.end());//排序
5 m6 E! r' A+ n" D# V //////////////////////////////////////////////////////////////////////////0 W( t7 ~/ H& m+ y* w
//交换
8 V% Q% ]2 c$ ^0 Z: g5 Z7 f" i* s: z8 G8 g for (size_t i=0;i<vItem.size();i++). {1 [% L4 a* A# x
{7 t+ v! x% S7 N: @
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);1 x3 P$ W$ t5 X* @
pInvSort->Add(vItem.nIndex);3 w: j) u1 w0 Q8 b4 ]: P7 |- e
}
m1 ]: j4 [( I _* a BYTE nDestPos = 0;+ L6 H) B% Q; S
for (int i=0;i<MAX_INVENTORY;i++)* q( K! D/ I9 e2 y6 {) U! ^& Y. |" {
{# O6 C' e+ @' h2 Z
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
+ x( x7 q7 l. y if (pItemElem)
6 s& @9 Y5 v' l' m- C. Y$ ? {
. u+ w$ d$ ]2 y3 R$ V if (IsUsingItem(pItemElem)); p7 h- L$ H5 c; Z$ s) u
{3 q4 S: L# v+ R" M( v$ ?& h
//这个位置无法放
/ e9 }$ J# f" l5 h nDestPos++;
- [0 h) S! ], R3 ^/ P }
3 n; Y; R) M1 `1 Y0 _ }* V V& P0 [) n/ ?
BYTE nSrc = pInvSort->GetItemSrc(i);+ @. @2 H! [+ P% V" @
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);; W8 X/ q" F7 @% A1 g: m, N
if (pItemElem)( g( p+ @- `8 R( e
{! N" ~1 G, C" O+ G9 F; b5 t z
if (IsUsingItem(pItemElem))
9 l+ Q/ ]' [2 B* K; O: K {
0 E; |1 R; E" `9 g) _' Y; ~ //这个道具无法移动,跳过
1 t6 z# }& A5 t# m# c) G continue;, d8 [ }4 X5 r+ n- d
}8 N! k) u0 z* n2 n* z9 d
}else{( N6 ]7 K2 f, p# @( m
//空位置 不用动( Z4 |" u( a' K' |( k) A! y9 W
continue;7 Z; U, J* d1 O
}$ b$ S2 c2 |7 O- C
//////////////////////////////////////////////////////////////////////////2 S2 W( g" M+ u( f% u8 E4 }/ S# ]
//开始移动
; U) H- o- \3 i2 b/ u if (nSrc == nDestPos)7 }9 _# I4 N4 U; w2 W
{% }; A z9 q1 n6 c
//原地不动
1 s' A7 {/ a7 Q ~% Y nDestPos++;
$ P" s$ H! l7 e5 J continue;: u6 L. s) ]) a) Z1 H
}
- q5 E5 W1 N3 z" |) ^ pInvSort->MoveItem(i,nDestPos);
- [2 Q6 U% ]* z ?+ \6 P7 Q" E g_DPlay.SendMoveItem(0,nSrc,nDestPos);. Z9 A# |% u: s' \% \
Sleep(5);
" t) N8 o+ }* Y' f! ^4 g6 B //Error("移动 - %d->%d",nSrc,nDestPos);6 _& G, H9 G4 [+ A$ Q
nDestPos++;# z/ C2 i. }0 ^2 f
}
4 Y8 T S* D# V) K' ]; r! r //取第一个元素的信息
: @7 l1 ^ V' w: ^7 n, Q9 u: s /** l: R. W/ f9 O" b6 r
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)1 J7 m3 ]2 K+ E' @) y
{
/ F+ u$ S( u( u. X+ \ Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
' S2 ?8 |8 t# _, f2 t) K g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
, m- |; J& Q9 w* q* ^2 L1 c }
* _) s7 u1 d9 c3 }; i. L `' E" n */8 p5 O6 V) c& ]! l% i" U# d
//////////////////////////////////////////////////////////////////////////+ v: B1 S# G# g, G! ^+ j+ r& i7 _
break;* ?) o; t: N! J4 T
}7 Q' ?" q. v) C7 j
}
8 G4 U' n4 `' y+ F, x. O. \1 L}
/ ?6 b' K; b# V3 Z" J- am_wndMenu.SetVisible(FALSE);8 p& a: J( [0 U0 `$ {0 V3 c
+ H$ t1 Z7 Y8 J" _* J5 b- o' E--------------------------------------------------------------------------------------------------------5 z1 {/ m! k$ r: M
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
, L2 |3 J) _& ]. N- d2 s: k{. n3 C# P* E) q
BaseMouseCursor();, K# z$ m+ l; Y4 g3 n
}
1 e5 `: l2 T2 h- S$ h在其下添加:% u2 z4 n' c1 f1 k! C" o
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
3 A$ I6 Y- o7 c. O+ F{& a* S5 G* x- ?, W) {
m_wndMenu.DeleteAllMenu();
: Y& \1 \5 C% M# {, v1 Zm_wndMenu.CreateMenu(this);% m6 T2 M1 ?" K" z
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
, w& {# F6 w4 Q- J
& x# t; v" S7 t" kif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
! n: b( b, D( B{
( f" J: b/ b5 b+ p% T9 ] v //P以上级别才可以删除所有道具
9 V# ]/ b; O( G* M# b7 C% c% ~ m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");# X ?9 _$ F, S$ l* I. \+ `4 l
}
1 x: E8 S) z! ]+ s4 `8 xm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
. v l% `8 }& y& T7 [- ~: {m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );8 b5 p! y' K L- f# v6 q
m_wndMenu.SetFocus();5 D E9 H& |3 y& s/ n
}6 z* z+ I9 I" i2 M9 d7 y1 M9 U
------------------------------------------------------------------------------------------------------------
% L: B7 C9 i5 v$ |9 q# a4 ^*************************
9 C9 p5 o4 l5 { X1 }) T8 _+ U. x, FWndField.h文件7 z! {# ~/ K+ t) W! M3 V5 M% k3 `! R
*************************
6 u8 d3 V) K# l R8 E5 d+ X搜索:BOOL m_bReport;
4 ?6 G( z/ @: w$ W* u ^0 m其后添加:! J: X4 V: ?$ v ~" B+ v8 {3 J. X
CWndMenu m_wndMenu;6 W8 _# d4 W8 q+ c, P( l/ v
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);; e2 ?& H/ v5 Y2 T* K0 g! H1 p
其后添加:
& J- X* M2 P7 H) d; Xvirtual void OnRButtonUp(UINT nFlags, CPoint point);4 y/ G5 M [' D6 R( H) x' d
! D( f! t( r" O2 S4 v
- {9 ^2 W" l0 n
|
|