|
|
源文件中_Interface文件夹下WndField.cpp文件8 h( R$ p9 J4 ~2 d" n
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
Q- V2 Z: T+ E6 J0 M% M8 z, D$ X. G' `
struct sItem
4 C* W( J& ~# E- k8 I7 Q* i' Y% _6 x{8 R3 p: ^! Y' M
DWORD dwId;% {# J! c: J3 O7 i( q2 z
DWORD dwKind2;1 `5 R6 G) K+ H( A- e
DWORD dwItemId;
0 H' f6 I* i: k6 i4 tBYTE nIndex;
c6 L7 Q7 n: D8 S& v; O1 W7 qsItem(){- ]9 ~8 Q, ~4 N* I. e1 b8 ?8 P
dwId = dwKind2 = dwItemId = nIndex = 0;- Z& W& T' y$ X C, e
}
9 |% ^$ Y/ o$ @& o t) @- U+ w9 qbool operator < (const sItem p2)$ l, e2 s4 K" I$ t+ Y! T) Z
{1 o. J9 U* V' T# i! m1 [) ?
if (dwKind2 == p2.dwKind2) s! u" ]) y" Q8 ~# o- _
{, T# g5 t# y/ N/ R4 o
return dwItemId < p2.dwItemId;' F: x% B. e( g
}else{; `, w1 {- v1 d- }5 L: E7 p
return dwKind2 < p2.dwKind2;
d# _9 G9 L+ u }
; H: E; F2 C$ l9 e}* I* y2 {; D6 b( t
};
4 b; B3 T! z# z2 qclass CInventorySort' ?3 V; Y& _; D T% y% @
{
W/ E& z- {4 A" Tpublic:
9 e. A) c5 E+ o: bCInventorySort()
2 x; s- [. o$ Y( E{: l0 n6 C) | Q0 l7 \0 O5 X0 w
m_dwPos = 0;
# q0 {2 k; j8 f7 |}
% s2 {2 U K7 c# r! E) v~CInventorySort(){}* U7 P/ W, B$ y. o8 J: @2 f4 g, V- W
private:
/ v0 A) P9 g, P+ M$ bsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
1 \ v- M4 R6 {# K2 P3 d" z; ADWORD m_dwPos;7 V9 {2 Z2 N: P0 Q# i% o
public:
- w& T( }% l/ Svoid Add(BYTE nIndex)
0 Y3 g) s) G+ n6 S3 a{9 ]: p z; C$ I' O8 p
if (m_dwPos >= MAX_INVENTORY)
, ?, I% ]; T9 l' ]8 H6 N3 j) l1 d {0 c6 C) U8 B7 T! D7 R4 A5 m. r/ E
return;
$ V6 Z7 z" Z& j1 \. x: [ }0 P/ b# a7 U# e
m_Item[m_dwPos].nIndex = nIndex;& `& r& b5 W4 L2 I
m_Item[m_dwPos].dwId = m_dwPos;
$ O/ S0 p) n; u+ }9 Y m_dwPos++;5 T# s2 W: E: p0 A0 L6 ^# _
}6 H$ W( `# [- n1 r& L3 [. R0 B9 Y
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
7 G4 k8 W0 f) l{ y0 I+ p6 O+ ?2 x, `5 ]
for (int i=0;i<MAX_INVENTORY;i++)
7 _4 O& B! k3 {0 B {5 N2 H3 f7 L3 \! k
if (m_Item.dwId == dwId)9 p+ [* S" q2 P' h% m8 N1 j+ v
{, A$ V+ ? j5 d: ~* T# Q
return m_Item.nIndex;
4 f9 k" \- w2 o. u7 ^/ d }! X* N4 ?1 @" _( ^1 j
}( l# T! j7 n' u6 ~# @: A, O D( E K
return 255;9 J4 L U* G2 S: t
}
; R0 L# U, G6 e6 lvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置9 v' t7 t9 q* o1 _/ D8 q7 V$ O
{0 l1 p1 |' K) i% s
BYTE nTmp = 0;
4 l( U; b) o4 y bool bDest = false,bSrc = false;, u* \5 M u6 I* q+ u8 W" z
for (int i=0;i<MAX_INVENTORY;i++)
/ m& G( u! `* N, d" Z) i6 Y {
0 B: P4 N6 h/ W% `" z( P1 @ T" L9 F if (dwSrcId == m_Item.dwId)5 T$ [# S3 Z" l3 N) ~4 |: Z4 l, a- _
{9 D! t y: h& d+ m c; `+ V
//id相等 则 改变对应的dest和src
: Y- {+ L+ _( H' U nTmp = m_Item.nIndex;
1 O$ z* n, \# F! c1 ~( L m_Item.nIndex = dest;* ?9 H; W- v% w5 q# d- [
}! u+ R" Y: D" `& A2 j4 L z
}3 o% N2 R3 {9 }% {5 U7 q
//临时数据保存完毕,交换开始
; F' I' H0 D1 W% o8 b+ r! C for (int i=0;i<MAX_INVENTORY;i++)
; d0 z4 w! ~( e2 X3 o) O) ^ {
) q) @$ s" ?: X c, O1 j2 x if (dest == m_Item.nIndex)1 \# F/ K4 {. a( B9 g0 G
{
1 N0 y" c1 Y g% {- f //id相等 则 改变对应的dest和src* P0 O* W" R; A
m_Item.nIndex = nTmp;
: n6 N5 ~8 Q0 k$ ? }) P) y0 e( D, Z( G
}8 r/ C2 N$ j+ U2 ?2 t
}9 A7 i& H* T) o! _! Z# |1 D. ?4 l
};
' w! _% C6 A' i-------------------------------------------------------------------------: x5 W: a( w2 T
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )$ ~" @8 \5 L1 F) {
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);* h# k4 b" [ G- O! o* C0 [ ]
紧靠其上添加:
; U9 d2 ^7 a4 d& ^2 a$ K- Fif( pWndBase == &m_wndMenu )! u) k% G# ~, \7 C7 y
{3 `( s& I( a7 p( t2 f" O; m8 [6 o
switch( nID )+ B( b5 A! M2 R( S
{
3 L4 e2 ]" C' V- m7 b case 2:5 x, W! @1 M3 p
{* V9 @) S5 t6 K( Z2 ] x
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);* @# R) L+ w+ O: h8 ~
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
% h' p w) D. C" C {2 H0 w) { k6 [' J8 l
break;+ Q( f% j6 U$ N7 [
}
$ ?7 t! V. ?* f5 u2 X4 U for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++); U. c4 p( Z/ h3 c$ B1 U7 H' Y% N
{
9 k; Y4 z" D; |1 U# M/ O- R CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);1 u" t" h/ D+ H
if( !pItemElem )
5 v3 ?, b) I7 u s$ g continue;
. c6 q$ Q5 X$ {! t: n9 |( u if(pItemElem->GetExtra() > 0)
6 `& m: U; w; c1 u) z0 I+ t continue;
/ d' q- v/ _5 F T5 _# i; v if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 6 e& l$ _- N7 j9 ` s! w0 v
continue;% K! k7 k( {3 F) G: l, i+ k; g
if( g_pPlayer->IsUsing( pItemElem ) )
% N# l& i7 J5 K% u, d P- u continue;
( ~" `9 |. h) e if( pItemElem->IsUndestructable() == TRUE )
0 ]' f0 e2 [) g4 A: | {
5 G5 f7 n. c& }% H; a g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );9 r: i; X& [# H+ y0 ^6 M9 [
continue;
/ C: k( x" O+ Z+ B }
7 q8 y% p+ K; ~6 ^! t4 U6 H g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);- i% E' u7 ^* U) Z# p& h' _
}: r- E* T) L/ }! i P' L
break;
; a. V& Z$ k& o8 Q }
% E: D% L6 z3 G5 Y: \: ~& b case 1:+ @ c# D% i& T5 f% T9 C# q3 v; _5 S
{
$ i* b* h5 A* l* t2 ^ //整理背包, n& {6 h" z3 C: e( v r( _0 t' V/ C
//////////////////////////////////////////////////////////////////////////9 _$ ?" i$ l9 v* @5 B
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );+ ~! N; x8 F. w" ?: ?
//////////////////////////////////////////////////////////////////////////
4 q' f& _. L9 g7 z6 ]" C //////////////////////////////////////////////////////////////////////////) N2 R0 x9 D; T2 G; p+ A+ x. d
CInventorySort* pInvSort = new CInventorySort;
" a# |" {. B3 M9 H& n$ P vector <sItem> vItem;
( c9 A9 O' o9 t' C vItem.resize(MAX_INVENTORY);//初始化大小! a9 M% J- B: P0 Z0 g4 p$ r
//////////////////////////////////////////////////////////////////////////* b/ M; G* y( T8 ~$ A9 C o, [6 m2 N) \
//填充数据
; R# ~5 z, E2 V3 b for (int i=0;i<MAX_INVENTORY;i++)1 l7 s% O" c3 g4 b8 U- I9 ?
{
) C% {4 r) r2 Q- \" H3 j: t/ ` CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
& J; @# V1 i, @! D2 C if (!pItemElem)
# S3 v) _1 h/ c( @ {4 W- e. {% E/ b. `# V& @$ \
vItem.dwKind2 = 0xffffffff;0 B1 G: ^! S! x1 V& ]2 T' }
vItem.dwItemId = 0xffffffff;; s, M H$ {# V% R9 K& M4 z
vItem.nIndex = i;
6 {" d0 E7 |. u4 E2 e }else {, |- b ^, k3 o, r6 a6 h
ItemProp* pProp = pItemElem->GetProp();
4 B* y" n6 X w; O" n8 C( o, z vItem.dwKind2 = pProp->dwItemKind2;( L3 I- ], o5 {; J' c1 _( ]) y$ i: n
vItem.dwItemId = pItemElem->m_dwItemId;
8 ]2 }& B$ F. C/ W vItem.nIndex = i;
9 A/ Z0 p8 b/ {7 d Y }+ F4 L' d ]& C( @
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);- i a$ k; ]. o+ E& k
}4 J7 B* }4 s4 s3 ^. f! Y( S
//////////////////////////////////////////////////////////////////////////4 I6 W8 q6 m# T1 I, U% c
sort(vItem.begin(),vItem.end());//排序; V: _: y; f% s1 u9 f
//////////////////////////////////////////////////////////////////////////1 d& D" S8 Y4 C0 G7 l9 B5 {
//交换
8 J0 R& s! N/ p; d) D for (size_t i=0;i<vItem.size();i++)) @, b- y7 G4 M7 ?5 o d7 R
{
8 S. e! G( f8 _1 O1 f6 m2 D* s //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
0 ~; @+ x, P7 u% Z$ ^/ L A pInvSort->Add(vItem.nIndex);
, W6 ]& O- _- ]# h/ N }
8 j* j6 k; s0 l; u; g+ _7 ] BYTE nDestPos = 0;
" r& C4 M) t' t H/ } for (int i=0;i<MAX_INVENTORY;i++)
3 ~) f+ @1 o c, r/ O# M- F% R& _8 g {. ^( q/ o8 j! M. U \4 U2 L! M
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
( t! v! [3 \, ~ if (pItemElem), a1 @2 W* |) j" h
{
) S# N" r* ?& h0 p' L: C7 s* k if (IsUsingItem(pItemElem)) ?6 v2 p, W7 J
{
& p+ ]/ A9 S- M3 R) F1 P //这个位置无法放
. H3 O1 C% Y2 E5 R nDestPos++;
/ n) }( R6 C$ `+ Y7 e }
) m/ ?( F* v, Q3 L }
$ a' i3 j2 S5 Z5 }% w# O& |. } BYTE nSrc = pInvSort->GetItemSrc(i);
; [, s0 F8 w9 z- u2 B8 z" s0 ` pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);$ j: V% i& \4 s: N' S( o
if (pItemElem)
! D) g4 {7 H0 B: [) |! P4 _ {
6 C; }2 q9 `! y/ f( r b) F3 Y if (IsUsingItem(pItemElem))
. A( u# u( r6 x6 p5 ` {- e4 c' k% u7 G- u; i% j
//这个道具无法移动,跳过3 {% {; a) t% l @8 k/ x
continue;
5 F' |$ u; f! R" Q2 S. x3 t }/ e9 B5 O1 L2 y* M' b4 @
}else{; {; H( r0 q# _
//空位置 不用动3 M5 B! Q! V9 L+ S4 z9 q
continue;
y8 J+ r, ]% c, I* W }6 U, ~, \9 H9 [: ~8 d% E
//////////////////////////////////////////////////////////////////////////
; Y/ O& [# k# A9 V. m //开始移动
# x9 e% c) K5 Z. N& I& p if (nSrc == nDestPos)
! d$ N H( C: G# } {2 d S7 X) y5 E6 @* ^& K4 j
//原地不动
$ ?4 R; T/ }3 K; j# L nDestPos++;2 Q$ e* X. n6 }2 ~8 }# y- m+ [% [
continue;. _5 B$ [/ d1 ?' J: E4 Y
}
8 G/ {8 k! g( X& N: V( O pInvSort->MoveItem(i,nDestPos);- m2 P8 w, ^& w' _6 o; w- i
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
2 x* f% T& h+ F/ T6 D+ [! F, R3 @ Sleep(5);
2 N9 o" U/ n* P( J' ]" ` //Error("移动 - %d->%d",nSrc,nDestPos);
* |- c0 \8 @/ J+ \/ L5 \ nDestPos++;! F! G4 I$ a' y2 H
}
0 G2 r) v3 y0 C# U //取第一个元素的信息3 L& c$ o2 k; E$ n( z1 C1 l
/*, N, Q6 i% G1 O4 j
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
$ G; C9 u- ~8 X6 D" I$ \ {
; v5 t: s5 ]: M1 l Error("Move - From:%d,To:%d",vItem[0].nIndex,x);2 l$ F3 D2 T' |' ]" @) m: S" G
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
$ F0 b7 f* G' f: p, b* W }; i8 O+ ^* [3 v4 k( F9 {' c
*/
8 r- F+ y8 t W: O, V ////////////////////////////////////////////////////////////////////////// @3 p) p; u) {5 M7 P8 O
break;) R2 h/ ]" x) A' }' j6 P! {
}: y$ _' Q7 T; U9 y1 J: h
} - g. N& l& R0 h# F* L4 i0 S! d
}& V& [2 y; _' a1 i( E% p& j1 H1 O# R
m_wndMenu.SetVisible(FALSE); Z% m _& v' K2 Z1 w$ o" F" t
; g6 K/ p; m6 z W! x8 c--------------------------------------------------------------------------------------------------------
" B8 d% E+ r9 ~. n搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point). m' o9 R: y7 D2 T& K. d+ O
{, S" q. I, i8 u* Y1 B; r
BaseMouseCursor();
! g+ C! x& c# J}
7 N2 F6 J/ `2 C+ |在其下添加:; C- z6 m* T% w3 `8 Y) h1 ~6 z6 f3 t
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
* e) D) a, V4 q) k4 @2 V{
7 A/ z" x, Y) [: Nm_wndMenu.DeleteAllMenu();7 M9 w6 S- r5 N4 n0 I4 O
m_wndMenu.CreateMenu(this);
?' S$ q3 @7 |4 @2 L, hm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
9 x* V! ?6 s1 O
# c+ k' X; k% \" R: Z( ?( R; Vif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))* V& Z, v- N; l
{
, y; k+ f+ h1 H9 Y2 Y //P以上级别才可以删除所有道具7 f- a# @! ~+ V' I& O2 M9 p! G4 r" O
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
) m' l7 ?/ b! T0 t' b/ r}
' ?3 p/ y6 Q& ?0 o1 P9 c+ em_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
' ~2 ?, W7 G/ l' x) N% N( ~" ]m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );8 R: i) u; U8 f/ w3 Y
m_wndMenu.SetFocus();1 u0 K; h1 ~0 O B
}
" T% s; w1 \( M6 {6 p) T9 {------------------------------------------------------------------------------------------------------------
0 q2 B" j. ^( ?8 @! ]*************************$ w( C) Z, m2 N
WndField.h文件
& u& | P2 T( M9 x/ M. X& ]- e*************************
1 W0 J. i: q/ s @搜索:BOOL m_bReport;
! ?- y5 h8 K9 y0 r其后添加:* U7 f1 q3 c% I( T- G/ `. ~
CWndMenu m_wndMenu;
, x8 C: W9 p4 s8 p! I搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
) E R+ _) M4 l1 d其后添加:
1 P% o& s. I* Z3 X0 p% @: pvirtual void OnRButtonUp(UINT nFlags, CPoint point);
$ _, J$ _& |! ~+ ^9 h" G, j9 h! j7 c9 ~. Z/ F# Q
& q! m3 H2 z0 x
|
|