|
|
源文件中_Interface文件夹下WndField.cpp文件
2 a6 l- ?/ h- v! U1 @# Z; i% \搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ). ^+ {0 A) Q% j1 @8 j/ G1 `: a; w
# \' B6 E" K: }- \
struct sItem
! [7 p6 O& c- ?8 W2 v5 `{
+ \0 h5 g3 j, N# `; l6 M, Z) wDWORD dwId;
0 F$ w! h# M( g; ]! e; t8 w8 hDWORD dwKind2;
1 G; r- g- E1 [7 W8 fDWORD dwItemId;6 ?- I B0 x% S" P
BYTE nIndex;# V6 T p. b6 P' e/ n
sItem(){
2 T: n6 c+ n" T0 g) ? dwId = dwKind2 = dwItemId = nIndex = 0;
! m8 q6 T n, p* R0 g1 H}# q$ g: M0 x0 u! \; o0 R0 t
bool operator < (const sItem p2)
1 V2 I& E+ `9 D5 C2 d* I{' s8 }! D* n4 [- O* w. O
if (dwKind2 == p2.dwKind2)
- M6 A( [, \1 h! e5 m {7 B& k" n9 O9 _# q
return dwItemId < p2.dwItemId;+ |& s2 n. j# @# Q+ M/ J1 Q7 Y
}else{ N* S* `# M% ]2 Q3 y
return dwKind2 < p2.dwKind2;1 S8 ~1 z' e5 t# T+ G
}$ n7 I. b, u# D( Q
}6 j& c; R% e G% d2 N* [
};
# I' Q; @, r' |' d, f3 K+ |, ~class CInventorySort0 w L* U1 G( H, {1 J- K
{% v5 w! F0 z& ~2 |& Y) `
public:
. w: T1 k; i& K6 ACInventorySort()
5 o z8 a+ Y& I4 B6 `6 E{" t0 R3 d) n0 B9 G' h8 [
m_dwPos = 0;
* b3 {9 [' w: w3 x, l0 I}
: S8 r; h3 @6 y" L# R~CInventorySort(){}
$ P7 U# j# I6 Y" U) I' i, qprivate:6 M! h! p5 E; d4 t) d2 u
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息' N4 e6 q7 w4 q5 U- r
DWORD m_dwPos;: @* ]* h/ q4 `
public:7 h" ?1 N- \# M$ s4 t5 K: u5 ?
void Add(BYTE nIndex)) I8 s2 C7 o. } x- P
{
% N5 t# _( }, l5 Z1 W if (m_dwPos >= MAX_INVENTORY)
8 u' h. ~: {, y- f; I" P5 Z {
( c% @3 _+ j: x7 A return;
8 k1 @; r4 u; f, f/ ]& ^ }
# f% ]( c2 u; @6 |& n6 u m_Item[m_dwPos].nIndex = nIndex;
% j+ w& ?8 h x5 p m_Item[m_dwPos].dwId = m_dwPos;
; p. @& A; z# x' n m_dwPos++;
: s* w" W+ X+ l( q. }: N}
' [& c, m( a n$ S& GBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
9 ^1 g: B4 V; q( J' O{
) V0 B8 { v s/ D for (int i=0;i<MAX_INVENTORY;i++) m; X. @# n2 D, }
{) }; W/ H' \, G. f" ]
if (m_Item.dwId == dwId)
: h7 _8 V$ X; K5 W: w {
5 i7 D* R s) Q7 X return m_Item.nIndex;
7 @8 Z% w: Y: q6 i ~6 t }6 C: Q7 n2 V9 |9 z4 R, O
}- k( F2 Z. N( a8 a
return 255;
o$ n9 R5 J" n4 z8 g/ a}
8 }2 ?% i5 x/ j4 }3 M# p+ Cvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
" X. e( I( ?+ F' r; v, w{
0 U x9 H' k; k& K. p BYTE nTmp = 0;
. a# I% m. H* C bool bDest = false,bSrc = false;; ]" F" j/ B# r, i! V
for (int i=0;i<MAX_INVENTORY;i++)
# n# ?" `% r4 G2 D( _ {
" \' y. [* ^% {1 J2 r4 y if (dwSrcId == m_Item.dwId)5 n8 f* J( G+ L) w) g. w
{7 e- C, F3 ^( b3 g
//id相等 则 改变对应的dest和src
3 B2 {8 f% V3 D+ _5 D0 G nTmp = m_Item.nIndex;
4 L6 D9 @( s3 n5 d: g% E6 b+ r m_Item.nIndex = dest;6 ^ Y4 c2 G& U4 Y
}* Y7 \# w* `- M( {* i* u; C
}1 \9 m2 h2 @# ?$ R
//临时数据保存完毕,交换开始
& x4 P U6 ?( D for (int i=0;i<MAX_INVENTORY;i++)
7 P% n( X8 ?0 Z) }+ o! q {
& U' @9 F6 R: L& \" Z, P8 u( W4 Z if (dest == m_Item.nIndex); W# t: I/ `* |8 X# V1 D1 V+ n
{
0 `: L$ n) L. T" |3 ? //id相等 则 改变对应的dest和src7 z K% `+ u4 w: f0 H
m_Item.nIndex = nTmp;
& ~& r& {9 [5 |% I }
& H; a& Y8 a1 K, u% B! j/ x# _( f# x }
V/ O* R4 `, _7 y* I2 f& z}& `; n L$ \# Y: q: |/ N
};
O* R) L0 ?( _; ], h1 S0 O" e-------------------------------------------------------------------------1 q$ q1 i9 R% x, F
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )0 k3 ]5 g$ a4 c- i5 Z0 q# g2 W
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);" z! [6 f+ i, q0 N1 B
紧靠其上添加:
& M/ d/ g& ?4 b* g9 i$ wif( pWndBase == &m_wndMenu )* b9 H+ v# K& P2 j2 J
{2 N% q1 k! ]( K5 G: P N
switch( nID )% C" O( I- c$ W/ y( ]" x
{' c" [# R3 @, c7 Q m
case 2:
4 }* T% V m: a/ {: U* r! q {, ?0 i& S8 x% x- e4 ]& s! y& N
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);* j+ Q d7 t# e. r, }% U
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))' @/ s: V' K% {
{
' J8 a' O- x) ^ m O! v break;
* O- _9 k2 `) r' A. x }
& y3 }3 Q+ _7 h" |# a% V+ n) m for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++): j q2 I7 z# u7 k2 ?8 U! }
{
) o2 [* P. O6 e" q- p! S CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
! _: M7 ~' j: h if( !pItemElem )
+ q, ^3 \ ~, O0 F* Y continue;) g( \4 q$ Z: u: K2 r7 S" ? ]
if(pItemElem->GetExtra() > 0)2 M( r* M% L3 d( c3 A' E
continue;
: S0 a6 C9 |0 k, b- [$ ?" R8 W4 P if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
& C# N K! n% F- S/ I2 ~& e: R3 M continue;
- D* m+ o0 {3 S* O( u3 ` if( g_pPlayer->IsUsing( pItemElem ) )
2 E- a- a" I! Z& D/ f$ }7 a continue;
! ~! k- W; Z+ h1 X- {0 O if( pItemElem->IsUndestructable() == TRUE )
9 F! M3 }# _# [9 c/ m/ E# u( M+ W4 K+ i {) x7 L ^ t% D: H( u% G& h
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );# X0 N! E) C* E! u- \
continue;0 ]8 A( R" F9 Q1 ~. n* n
}* \4 C6 c/ s8 s$ _9 F; ~
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
4 U5 n# H/ f3 z6 Z }
' l; D8 n A' V) u; L: z* c* o break;
. K* F0 z, e6 b }
' K5 s* i2 r5 J5 V case 1:' ?8 p% z4 a& d' m4 g% m4 u
{9 E$ V* j3 m/ U3 l6 o5 v
//整理背包( D+ {: J& b) j/ q; p0 \1 R
//////////////////////////////////////////////////////////////////////////
* U* k# @- D; @) m1 n9 D //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) ); R+ c5 v. s$ p6 R6 N
//////////////////////////////////////////////////////////////////////////
! f) |) h. h/ D- ?: T //////////////////////////////////////////////////////////////////////////7 f" I- @0 F4 \* |: Q& w
CInventorySort* pInvSort = new CInventorySort;$ O4 Q. k6 `5 E9 {# ?
vector <sItem> vItem;
1 w: b$ [ o+ P$ |! q vItem.resize(MAX_INVENTORY);//初始化大小* j7 g/ E+ z+ G9 F2 u) ^ g J
//////////////////////////////////////////////////////////////////////////4 k- \ \0 x( S# o! j
//填充数据
5 _* [7 z& E5 \9 t4 L' Y for (int i=0;i<MAX_INVENTORY;i++)2 T( S8 H3 Q5 J. N1 b
{6 ^: ?) X; C5 W! i5 j
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
) J+ K5 E9 H! Q; p if (!pItemElem)$ J3 L; o2 V, V% N. r' {
{
& F8 @" n% @8 L4 L$ n vItem.dwKind2 = 0xffffffff;; [- n- o# w! v$ T
vItem.dwItemId = 0xffffffff;
$ Y* S( ^2 `) T, J! T; l vItem.nIndex = i;
. m* h/ N: Q# J2 z }else {
5 f& l3 u; K" Q; \; h ItemProp* pProp = pItemElem->GetProp();
* ~. G( ~1 P4 P5 l" f2 r& I vItem.dwKind2 = pProp->dwItemKind2;, P3 s% y x% Z
vItem.dwItemId = pItemElem->m_dwItemId;$ x3 P, b+ o5 X( t
vItem.nIndex = i;
/ T6 u8 y ^2 j" r }7 P" F5 T3 ]7 H" @$ U! {
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);: p" R* s8 @% a
}. n9 Y! K! v6 @
//////////////////////////////////////////////////////////////////////////
1 u t. i4 ]4 k: Q4 e" i& a sort(vItem.begin(),vItem.end());//排序
1 ^2 L6 G. Y4 v' g% T5 `/ I //////////////////////////////////////////////////////////////////////////
4 j( _' M/ J/ b/ A6 w! y+ l: h( X //交换
% r7 k: b- T7 Z5 {4 H for (size_t i=0;i<vItem.size();i++)
7 W: k P6 _2 O$ Q {) o: k0 a9 W( b$ F; \. G2 x
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
/ _* t* l8 s; U3 I pInvSort->Add(vItem.nIndex);9 \4 \; v4 p8 r' f1 O8 F( y
}
* m, O; y, a6 J2 a$ N; k BYTE nDestPos = 0;8 @, R) q; ?5 f$ k1 Z4 A
for (int i=0;i<MAX_INVENTORY;i++)
5 J5 ^; m C/ ~0 j {
* `* R2 q+ D( R% I7 S3 C CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);; N/ `0 ~" I( S
if (pItemElem)
) w: Z; h" M8 U, U A+ @# E0 g {# Y0 ]' }7 o/ d# L
if (IsUsingItem(pItemElem))- r4 H/ L9 b1 C+ E
{. F" e, K( }% j! `# V, O( W8 X
//这个位置无法放
; z7 {' [% M7 y; d) R# X% l u9 _ nDestPos++;
3 M) w; O! @. O }# F$ r- i; z4 ~5 v; x, w/ N
}
5 L5 q0 u! o0 r$ s BYTE nSrc = pInvSort->GetItemSrc(i);
2 y) r7 B! C2 |$ S8 g. t& o' K pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
7 h! q. D8 f* K' E if (pItemElem); p6 Q, i% @$ G0 O& c3 a
{
; R, k* x# F5 b4 D( J; _8 R if (IsUsingItem(pItemElem))# o+ d; v) R7 j& I
{# O- T! @9 W( i; q8 _# ?( c
//这个道具无法移动,跳过: v3 \# b/ f$ W( T) M+ D) q
continue;
0 c2 h0 n& B0 G7 J5 [# f }
6 x+ m# Q, s' o! S% u" {; j }else{
5 e( D* @+ j7 k/ Y3 T //空位置 不用动0 Q4 p$ C, k) j- R
continue;4 {: M" F4 J. }% W# ^
}0 \! p' c7 e4 e& ~
//////////////////////////////////////////////////////////////////////////2 E+ Q( {1 z; e5 G5 w2 o
//开始移动+ t( P9 J" V5 _, Z& c* @, p- q$ d3 \
if (nSrc == nDestPos)! l7 |4 x; x0 @8 }1 e
{3 u+ P; w. c& p) L, J- A( S' {
//原地不动
9 [" _8 Y8 ]: ]# [- | nDestPos++;
- g+ x, D- |2 }: I+ P0 q continue; ]: M/ U+ S% {4 V: d
}
: _7 k" y/ G. t3 P# { pInvSort->MoveItem(i,nDestPos);
2 ^3 K) L z/ H+ Y; K) e g_DPlay.SendMoveItem(0,nSrc,nDestPos);
7 e! g6 C3 k& \" u# ? Sleep(5);" `9 |$ a% a @# |3 D
//Error("移动 - %d->%d",nSrc,nDestPos);8 l( b; c; o2 B
nDestPos++;$ p0 [4 I& e* N+ A6 M# P
} P3 L3 W8 B" l( q: I R$ E
//取第一个元素的信息& [) d% K! H6 |) A6 p
/*
9 M+ M/ V" h' |2 g) d8 g- ^ if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
5 B9 h2 b4 |7 l" t5 n {4 w$ y+ N: k. N4 [8 m
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
( D9 t: c! E0 h! f! N( y g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);" Z3 u8 q0 X$ O+ m5 E# m2 _9 b
}6 b# l' Y) n1 l+ D: N' l( s
*/
3 M; o2 h! N) ] {% ?( |& _, @$ ^ //////////////////////////////////////////////////////////////////////////: ?4 i0 s% M% v( v: P" P
break;
g# I$ W" w( G- y" f( N }7 Q+ ]7 p/ K# G+ ?, f: |- B0 z! Y+ z
} - P0 U# F+ G% S g9 u8 I) G
}3 a, M+ F; j/ M. K' p9 b1 Y5 V
m_wndMenu.SetVisible(FALSE);
/ k% P# r& x' l1 P% ]9 s0 C E
* b- Y7 J! u7 C/ T$ a7 U--------------------------------------------------------------------------------------------------------
3 d0 r: O( M: z- Y2 ~/ f搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
, b( A6 k, m* c( U( g{
8 R! Y* ?/ Y0 bBaseMouseCursor();* r }7 H8 _1 Y* O" w5 a' i" D# \
}$ P9 d8 B, A* p
在其下添加:
% e8 }( {5 ]3 w9 e t% U) l& v6 G5 Tvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)) H3 D6 {& u" p- X
{0 m# V6 I6 ~* W+ N& @
m_wndMenu.DeleteAllMenu();7 w7 ~( }) x8 q9 w1 f9 z a$ W
m_wndMenu.CreateMenu(this);$ Y8 o* M! M+ s) j; r% t$ C
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");' e2 u( N! q. [+ P- T9 l
$ {% o3 X- {7 ]9 P2 y L3 Jif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))6 T* v, y8 S# H
{# f% z6 z& ?* n8 @7 p0 q
//P以上级别才可以删除所有道具- s+ X0 Q. G2 U. g, l0 Q
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");$ C5 t3 U( T$ r1 E! a9 O, J
}
( C! ^" D3 P; g. X/ {9 \- bm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );. `$ V* Z+ i" j
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );+ N" L" C# t* P+ l5 C) k( b- ^* O
m_wndMenu.SetFocus();( Q) Y! Y O) m9 F4 @6 T& J, g
}2 O ]; h/ ?6 S: y- Y
------------------------------------------------------------------------------------------------------------
! U2 ^9 \* x2 X' q V' P& [*************************4 N U2 T/ J/ [9 c3 a
WndField.h文件
, K- x1 J* L1 v6 C*************************
0 n5 ?! }; G, R! v6 I! {搜索:BOOL m_bReport;
1 F3 a5 K+ C4 }& X其后添加:
2 v7 T+ H2 G+ v0 ~& I% P5 V5 Q" @0 ECWndMenu m_wndMenu;
5 w$ G) W7 `% ]- ]% Z Z搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
2 g0 j2 q! S4 L( Z- H; O- M其后添加:5 w: i5 g6 s" Y
virtual void OnRButtonUp(UINT nFlags, CPoint point);7 y X3 h8 D7 I, p! j8 m0 K' B
' w( E7 y6 J% w) e
9 v" ^1 z O9 a0 @
|
|