|
|
源文件中_Interface文件夹下WndField.cpp文件
# ]7 E5 p1 B2 f$ d( ~搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )9 o9 {5 j T8 Q
% g0 x! w; ?% s6 A2 }( ustruct sItem
6 i$ z% ^9 K: J8 J) h N{
6 j- H s+ Y% n$ T/ mDWORD dwId;" v9 G7 G' @; S. @$ h' Q- L
DWORD dwKind2;2 y, g: f- k- {! E$ { ?$ u# B d
DWORD dwItemId;
* _+ g$ r) V2 j+ qBYTE nIndex;+ O4 J& L2 O( ~1 _+ Z
sItem(){+ M3 A* p' @# [6 Q4 ~' A
dwId = dwKind2 = dwItemId = nIndex = 0;
! c: X5 _, k; l& d) g1 n- p1 } x. A}! Q; j5 P# J7 C" @
bool operator < (const sItem p2)1 _1 W8 `% {( j5 N9 [
{
: _3 J; A Z# L! q; W if (dwKind2 == p2.dwKind2)
/ s0 @$ B5 e8 s$ t' k7 B {
$ T3 X: s V N: F* g' P' X return dwItemId < p2.dwItemId;
0 E k4 ^" H5 P Y0 w }else{ T" o& _" }8 J3 R3 R7 e* N4 r
return dwKind2 < p2.dwKind2;7 T( r0 c6 r) Y" k ~* {, ^' ]5 O0 a
}
$ |2 t# d% e. `* r3 y}
6 D1 \3 A9 a4 T- E9 M L};
1 L+ @( l. ?2 Z: M5 m8 K$ Q3 h6 Pclass CInventorySort& |; S) v: t0 }# q a
{1 F9 v7 q+ J/ O% P0 n/ ^5 e
public:
4 ]% U+ E$ l6 d3 vCInventorySort()
1 D) y1 N* |' J P$ _{/ j/ S9 e% ^9 X" i
m_dwPos = 0;$ ^- A2 q0 R7 G0 a5 A9 C" Z4 m7 b
}
0 ~5 w$ _% w. a~CInventorySort(){}: E8 b! F0 W* O& {* L
private:
4 Z6 y& p( c0 \/ nsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息! B2 k6 M: U7 k& J8 I3 D5 {
DWORD m_dwPos;
$ A1 M6 v1 l S3 o, M( X8 qpublic:
]/ X5 D) X; w3 m; e& Vvoid Add(BYTE nIndex)! t( ?7 N+ `6 f0 C" j0 |
{; h! E+ R( x# j8 o. x0 K! [& @
if (m_dwPos >= MAX_INVENTORY)
8 W/ P4 W, J6 ~ {
7 x$ g! f- H V) n return;
4 w4 m# g/ }9 \$ v }
9 ?8 P; V/ n/ Z. F5 O% g m_Item[m_dwPos].nIndex = nIndex;
8 Q$ W: ?, T/ p9 j% H1 Y& f3 } m_Item[m_dwPos].dwId = m_dwPos;. ~6 c4 a i0 u8 e( Q- l4 u* S
m_dwPos++;
M4 q% }! v1 I8 G7 j3 B}
, c- j: T+ e) E# G- OBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
; M B: e% J4 h{+ X- e4 T, k! V
for (int i=0;i<MAX_INVENTORY;i++)8 }# I& _/ @2 ^
{
4 B7 T9 b* ?% \8 B4 F( ]- }/ l if (m_Item.dwId == dwId)
, j; C7 s: N$ D8 Z$ ] {
% ]* ?5 k: n) ]; J: o return m_Item.nIndex;4 C& k3 M/ W3 Y+ V- o' t+ R
}! T0 Y) r( t u
}& J- ?6 ]' t( M* A
return 255;' s: O9 c; T$ [/ V1 y3 q
}
- [" F! ? c* y3 Fvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
4 a. M i+ e; t5 J# Z) a! `5 D{4 W9 U: E/ H% w! }7 l5 z
BYTE nTmp = 0;
+ B* ?4 [' ?! | bool bDest = false,bSrc = false;
3 V; X* ]% R5 y7 l for (int i=0;i<MAX_INVENTORY;i++)& o: t& J5 @2 A% z: V
{
% G1 A( A" @/ R& C$ ^$ ? if (dwSrcId == m_Item.dwId)9 L0 c' B) b' B+ ]7 t2 H# w
{$ s- `' g8 \7 m
//id相等 则 改变对应的dest和src8 ?7 J t# j. J- Y6 W9 H
nTmp = m_Item.nIndex;4 |, G0 |" s; b* E7 Y. P, o
m_Item.nIndex = dest;; o, c+ N8 u6 J
}: t, l' @) k2 x2 Z. S8 i
}
0 s, r6 ]' V9 m p3 \7 E9 P //临时数据保存完毕,交换开始
$ g8 s- Q! T8 e for (int i=0;i<MAX_INVENTORY;i++) R ]9 k7 {7 Y( m/ Q1 F' v: u; A S
{& @9 K, x+ `. K, H( u. y4 }2 k
if (dest == m_Item.nIndex)
; E- P2 n- q: w {# g( D5 ]1 Q w R1 i: G
//id相等 则 改变对应的dest和src3 d ~3 w3 T0 Q
m_Item.nIndex = nTmp;* m4 [& z+ K* `/ `% D
}
) `2 H _# x, B ?& ] }
' O4 X: n6 `- F! D7 t) r9 s' Z* g}
: b( ^" b2 D5 R+ v};
0 @" w/ c1 r) Z( l7 h0 x: s& z$ p* u-------------------------------------------------------------------------
`! b( H# v& y) X5 s依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
6 L" q' c& i& G% s& u h( p; m( F搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
# X( {$ l/ x) k1 F# r8 J! R* c0 O紧靠其上添加:, o! r- l1 R1 W _ l9 p0 w: w5 ]
if( pWndBase == &m_wndMenu )
+ j. e9 z [' {. }{, S, O5 v3 i9 N" P& ~% a/ p. i/ d
switch( nID )
& o% Y7 b( x' @9 ?; h s {5 a: F9 G" x, p) N5 ~4 q
case 2:( Y8 [" T2 ~; b+ O$ ?1 T
{5 G$ k. p# `) m6 {9 u8 f: { X& z
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);$ H m3 E8 I0 k! ]4 E5 r O
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
+ V. e4 @' c8 @, j. [ {1 Y+ E1 _& F# u: A2 j
break;: P! D$ q4 z4 W0 |7 h W0 n( g2 Q
}
8 h" \/ j' k& l: G* x for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)2 S$ s( V% l6 X
{
& k# ^. F3 ^: [1 v/ m1 A+ r CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
F' v( k3 g" V1 k) \ if( !pItemElem )* |" m' V1 @ @% y% Z5 }
continue;
0 ~3 y" L. |- O1 U if(pItemElem->GetExtra() > 0)
( n/ N( s" C! Q) Z( O continue; O: t9 W. _. {) R
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
2 C; t6 h8 I: h3 m; F continue;
0 ~2 y4 ^; I& o! T3 S( F if( g_pPlayer->IsUsing( pItemElem ) )6 I- c& \' @9 y' I6 c4 ^
continue;, F* R) o( l: N9 ~
if( pItemElem->IsUndestructable() == TRUE )
5 f, x R3 J, s/ L9 j2 d$ v {
+ x4 x' T5 @3 Z( d! k+ W0 P! u9 o g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
( `5 f. u+ Q1 V, P9 |2 ]2 ^ continue;
! t& n2 T4 @( l5 n+ V0 ~* E } r, r. e3 t! V1 w r) }- m, e
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);; C r' C- |/ K# @
}
- A6 K0 W, u7 X- L0 { break;: J$ \! `/ K: ~9 y! b
}
; C' z& Z) _. y" q case 1:- e, |( V; C* K7 l& p
{8 W5 n3 k2 L8 d3 i/ U) T
//整理背包
) e6 D6 K# b; B' u //////////////////////////////////////////////////////////////////////////* r6 p2 K/ K$ [
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) ); ~0 O. b8 G( G' ^8 k0 |6 y1 Z0 {
//////////////////////////////////////////////////////////////////////////# L6 f( R; E' {, C" r' [, U
//////////////////////////////////////////////////////////////////////////
8 ]" U2 W Z9 Q' N0 x! o CInventorySort* pInvSort = new CInventorySort;
# A9 ^' s: [9 Z' [" W vector <sItem> vItem;/ M. a! T5 {0 r
vItem.resize(MAX_INVENTORY);//初始化大小
" H( L+ P Z! G9 Q& Y9 I //////////////////////////////////////////////////////////////////////////: f9 k0 ]) I# r1 k8 {2 Z" B
//填充数据
5 h( ]: q: c' v: v3 C0 b for (int i=0;i<MAX_INVENTORY;i++)
1 i0 ?3 _1 n! { {* e+ ^3 X5 Z. o( r4 F1 @
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
/ y3 h5 |- L3 K$ d3 j if (!pItemElem)- F; a7 O, w( F0 M* D+ o
{
$ r6 g5 w+ {( G5 i vItem.dwKind2 = 0xffffffff;
# l: @) n; U# U, x vItem.dwItemId = 0xffffffff;
! l6 d0 j+ I J vItem.nIndex = i;
; [/ K J9 I. I, P4 Z1 U3 Y$ w# b }else {+ r- ~% a4 O" Z
ItemProp* pProp = pItemElem->GetProp();
: v. i7 R: t$ P# q% ^1 t vItem.dwKind2 = pProp->dwItemKind2;
" I* T; d& M. w! F9 ` vItem.dwItemId = pItemElem->m_dwItemId;1 W2 j0 [# \0 Y. @1 H, V* d- g
vItem.nIndex = i;
4 N, j7 A- d1 ?6 J }( X" S6 D6 ^, ?! \# {1 l. Z
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);- F1 O( ?" t S& k
}
% V$ a7 o7 B8 H: U& B5 T- x6 D //////////////////////////////////////////////////////////////////////////" j g* K9 ]2 b3 T( ^
sort(vItem.begin(),vItem.end());//排序% `9 i. A; s g% g7 h6 ^
//////////////////////////////////////////////////////////////////////////$ p# _( F3 m4 y8 H @" ?. [! x1 G
//交换
5 v; Z d1 n$ z0 C for (size_t i=0;i<vItem.size();i++)+ j* n& Q" Z% [2 t6 W, Y/ E6 Z3 i) f9 R
{8 K' J. Z4 Y' j; q% w; y; H
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);+ p; j1 k/ V5 F6 t) t3 R- \4 ? I8 o
pInvSort->Add(vItem.nIndex);8 j$ Z( L# k" k4 {
}! Y/ x" S$ S3 Q9 A% w8 l0 t- F6 P
BYTE nDestPos = 0;
: _1 x- e/ w6 f! i0 _& }2 k for (int i=0;i<MAX_INVENTORY;i++)! @( n0 q% a' ]7 k) R0 _$ ~
{
7 }' t8 x7 Q* ], T, K CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
, \7 k. Q) x. z if (pItemElem)+ L4 k8 K/ r5 @: ?
{
/ f; o$ @3 r5 X+ j3 b$ P0 n if (IsUsingItem(pItemElem))( n$ x) u& i$ P& Z, G
{7 B' {- `7 c$ S: d8 s& O
//这个位置无法放
( V. @ c2 K: H/ p$ Z% H' m* n I nDestPos++;
0 v# ?2 E% B% l2 m' H- X$ K }
( t/ Z$ P, O& s5 K# r: ~9 s }
1 K. a4 m' c, M; }8 e BYTE nSrc = pInvSort->GetItemSrc(i);& |* c, _ |: O2 Z: J
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
# V% S. a: y* Y& Y; R) O if (pItemElem)
4 n( c( g6 N! G/ l6 W+ e {
* O9 X' p+ ^9 h% f, ?* Q# O if (IsUsingItem(pItemElem))9 K, U- R+ O3 V2 U( }( I% k/ e. Z
{
% H! S+ Z: w) k' w1 L, _0 u' Z; {7 s" F //这个道具无法移动,跳过) l0 _2 \/ j1 K/ n k/ O
continue;) w |! |/ s: J! z( w8 @+ e# U
}
9 m; f! I" e& r% G" ]1 R& x. \8 q# C* ] }else{5 ]+ [& x: X1 x/ ?/ r
//空位置 不用动
$ w2 u5 i, w' J0 _ continue;9 J/ I7 _ |7 \6 ~$ G) i
}
, m( N4 s3 U8 J9 P8 v! K //////////////////////////////////////////////////////////////////////////
+ o9 R% o! ^" f6 Q9 o7 h //开始移动2 `/ d0 t0 M2 Q3 y
if (nSrc == nDestPos)7 S( l) f& J ]. k4 L5 p- w- @
{4 M* i6 S: r# [. M* A
//原地不动
( d1 ?6 O2 @) m" S3 D" ~, C6 X nDestPos++;
& g% C1 h* M; r/ W7 y) g continue;6 K) F& g$ W2 a' s0 k* u( n \
}
0 z+ P9 ~# n' N6 T2 j, l pInvSort->MoveItem(i,nDestPos);
) P* V9 l$ n' j H$ f2 R' P: w* u g_DPlay.SendMoveItem(0,nSrc,nDestPos);! a0 u! v: p1 j4 Y
Sleep(5);, H8 y- ?' b( ?* y, A) m, d8 E$ W
//Error("移动 - %d->%d",nSrc,nDestPos);0 T# o5 v% q9 i, h' N
nDestPos++;! }! c5 D3 O" }( q' Q( | Y: z. J1 J
}2 h, a# w3 T7 |) q7 \
//取第一个元素的信息8 `% [* _7 \. d! w: P
/*& q# q. A* f& G1 ? s
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
+ |- @# E R" p" W {
/ |' @, k: t2 F$ _3 {" X, F+ x Error("Move - From:%d,To:%d",vItem[0].nIndex,x);0 J r% n7 T7 R+ }
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);$ A# e' S/ P% k& [+ v% y+ y
}5 | G8 p: `7 P* ?4 _5 k7 ^
*/
7 m: q. W5 }( V/ `1 f. t //////////////////////////////////////////////////////////////////////////& y- C% s" {* H" s2 k
break;
6 L8 N G | z( J }
1 h2 D6 i3 o" k/ x7 I1 G: m } ) x$ y. `$ ^) S! V- x1 O
}, j% R' q, V/ f+ w7 b4 x" d
m_wndMenu.SetVisible(FALSE);
& a C5 z8 n% S2 \2 L0 ?( o% b8 J$ @3 y( Y
--------------------------------------------------------------------------------------------------------+ i% F' e0 V- }2 r6 G
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)8 W4 t* k5 P& \$ J0 T! `
{% n" N% G- B) c) F; e
BaseMouseCursor();2 [ f" O- @7 m/ Y; }" I! m
}% g: C% p6 }" }* t |4 s
在其下添加:5 N3 ~# s7 u' T; S' g7 Z* N% p
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
! W: I+ u: R" U6 _2 E/ z{! e6 Q! R+ z9 ]! X9 s
m_wndMenu.DeleteAllMenu();
! F( j" A6 h% C7 t( l* v4 F* h- pm_wndMenu.CreateMenu(this);0 `0 Q6 ~% ^2 g: A& X
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");+ ], |/ \, X* b6 d' K' e
# D) a; Z3 z/ Sif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
, w& F* T+ |; g. H{
$ |3 V' G: |9 A7 O6 B# c0 I1 f0 M //P以上级别才可以删除所有道具; Y" ?: F/ ?3 s* p
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
' i# p% O/ {( B j. g}& D! l6 p( _* R9 z- S
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );# I; E f: w' A/ o
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
8 r5 k. Y7 [! C9 wm_wndMenu.SetFocus();
0 U/ e- J8 o+ s5 l) B2 K}
! r. W/ _0 \) I! I1 }" h) p------------------------------------------------------------------------------------------------------------9 B6 J0 g0 |# s3 D& B& U
*************************
" q% a: Y9 @8 `3 C. s, K# t+ {+ G \WndField.h文件
3 u+ Q s9 }3 Z3 E+ s- u*************************
$ `7 F+ ?. u! `5 |8 Z# S% F搜索:BOOL m_bReport;* j) P2 e( f j3 V& e
其后添加:% I6 R6 a: m4 p7 P/ f2 W8 h% J2 q- T
CWndMenu m_wndMenu;! [8 W% L/ J8 [; C }1 I9 a
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);9 i" y* w1 l! G/ \$ Z) Z0 T
其后添加:
0 m* W( f; E9 k/ o9 ?: l- Fvirtual void OnRButtonUp(UINT nFlags, CPoint point);5 q; x! r6 M/ R3 C$ @/ K& X
8 n0 `1 B- j2 P: N
! V5 [3 \! t4 }. X) r% |3 q
|
|