|
|
源文件中_Interface文件夹下WndField.cpp文件& R% {( _/ W, d9 J& h
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )9 {6 v$ {1 `2 d* o5 M% P
' _3 P6 x! G9 Q/ X: k$ t
struct sItem
" g7 @5 F- r# N0 F9 u{0 n; K9 f* d8 H! [6 o- F, w9 ?6 ^
DWORD dwId;
7 M- `7 @# D3 k) g5 D( TDWORD dwKind2;! j5 p7 J I2 s
DWORD dwItemId;
! v* C) ]( A& \9 H6 d MBYTE nIndex;
! L5 U, ]- Y" C. d# M1 TsItem(){
1 t; G5 a) D! j9 q: s dwId = dwKind2 = dwItemId = nIndex = 0;2 N& D' V4 I9 X- a# {
}
' x5 }8 v+ J6 r' ~bool operator < (const sItem p2)
( u5 J' v6 U; Q$ W$ C& `& Q{
* D6 ?9 P7 Q' J8 V- ~9 z if (dwKind2 == p2.dwKind2)/ v2 H7 J) @9 y3 d% J
{
, C& W. |0 D" P return dwItemId < p2.dwItemId;
7 b; S( e' B& R, [) `( X. \( F }else{% l* A/ A2 |- z5 u; ~1 Y7 d
return dwKind2 < p2.dwKind2;
8 N' g/ [3 T0 V4 z" \( e, F }2 c6 U. L! Q" ?7 K2 S
}; C9 P( g1 r3 k' t, M/ k
};6 B) T7 r) G. R
class CInventorySort, T! U+ I* g: ]5 j0 o
{# O* n n C3 Q$ }; a, r. x5 i
public:% i% W( H5 l0 T f
CInventorySort()
. l0 Z1 T: S( ]# l2 M{- I: n+ r' y1 Z/ O( {0 y
m_dwPos = 0;
3 f* ^8 L" `* i& H( ]. c6 G}
" \( A0 r P! x) d' ]1 \~CInventorySort(){}
9 `9 ~+ d: `$ gprivate:
6 j8 ?# J) f# x" I( j NsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息+ w; D7 `" O8 T$ X+ Q0 y
DWORD m_dwPos;" {1 M% `( T! q( V. r' n7 V+ X* F
public:4 L' f/ ^* |0 [$ n
void Add(BYTE nIndex)
' \" e2 h) _) Z{
3 O7 }8 b" h5 V$ P/ C1 X; T3 I if (m_dwPos >= MAX_INVENTORY), K2 |- h6 P: l8 L4 Y
{
2 T* Q: v0 w: O; Q2 F8 H; D return;
1 L6 L; T/ ?& D( k6 I1 ^3 D }8 D$ J. H# F% h* c o5 k7 Y8 ]9 }+ z
m_Item[m_dwPos].nIndex = nIndex;6 u! t* c3 Y t# u7 {6 u
m_Item[m_dwPos].dwId = m_dwPos;6 w1 e& J* b) _; o- u- L% e$ f
m_dwPos++;
# `7 }' p: w# d. t: @0 {% j6 y6 z9 D+ d}
9 c/ Y; V. t( g! fBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
0 L7 k" B, ?7 f h4 j, o7 V2 }8 L{: t0 x' z2 B5 g) N
for (int i=0;i<MAX_INVENTORY;i++)7 B0 v; ?) U8 v4 v, n$ Z
{0 N' J2 V8 F' k' k& n
if (m_Item.dwId == dwId)
8 z5 A0 ~+ T1 Y% ]( j+ X' {" p {
* P$ F# c% u2 w; s* u/ e return m_Item.nIndex;
6 n. [% |+ C) C2 G* z" t }
% g& ?0 V! {7 w+ q/ a$ L }9 N; B$ l- E; X$ I, J
return 255;4 J! }% l! A. l" u8 ~! y
}
* r: G- X( @( q/ E- c9 N" Xvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置+ j. g) W% A! ]
{3 q4 E7 ?# q8 i4 \* J) A, e
BYTE nTmp = 0;' f$ { b# y2 D# P& m, b2 I
bool bDest = false,bSrc = false;7 j. e5 S4 U" C* e. Z! z7 k
for (int i=0;i<MAX_INVENTORY;i++)
/ c2 j8 V0 X* h: V7 t {1 F+ Q0 n3 ~ W2 ?
if (dwSrcId == m_Item.dwId). q; e& I4 u7 i1 O! x
{
; e. F+ k) s4 O //id相等 则 改变对应的dest和src
& e4 ~6 j; x3 a nTmp = m_Item.nIndex;$ |2 m6 X& v1 H6 x L
m_Item.nIndex = dest;
! W1 h4 n1 a( T6 v( `9 K }
2 n8 O0 Q1 T V0 q/ o0 _( g) P }6 ~7 J3 U) }" U$ _$ l/ v( u- t0 P
//临时数据保存完毕,交换开始
; K1 q3 _; o( v7 m for (int i=0;i<MAX_INVENTORY;i++)
6 s% Y' e! j, ] {
9 a+ C4 V r3 Q' c0 z* z if (dest == m_Item.nIndex)
- r: [! Z) W6 n, k {
+ F6 R$ Q3 x+ u% Z% p, ^ | //id相等 则 改变对应的dest和src* D4 w* u3 r, u/ H6 k
m_Item.nIndex = nTmp;
9 t" Y1 p9 u, T/ ^9 O8 X }! ]5 w' e9 w5 ?
}
8 j, |! p4 B% X" ^( m q' @+ W}
- }! w& N2 s: U" |4 R$ H: r& b};
, L6 i- s. i% }, d8 v-------------------------------------------------------------------------( Z( H8 T4 t# g0 A
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
. t8 f8 H; ]& O. {( T+ o搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
. T8 p, A& u" n6 v' X' w紧靠其上添加:
) k( N+ S& M" Qif( pWndBase == &m_wndMenu )
" D8 H" n) z9 K9 L/ [{% W0 H6 K }1 `6 o
switch( nID ). z3 o4 S7 b+ }, ^2 R! H6 e* u
{
& k& `, F9 x0 O% B3 ^ case 2:
1 j, {4 o- t# F3 E/ [ {
+ N, W! h; g: O3 u7 P% v //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);# \# z* [; }& d/ Y
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
: e2 {$ @) ~( g& N) S9 q {) D; r- Z# h* b. g* J
break;
8 h/ T; K, J3 W: Z4 w+ ?1 V }
! X" R7 C5 e5 O for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)& \% Y: ]- `- A/ F
{" V" `* J) m9 Z
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
2 }3 m* A; ~2 r! U' r M) z if( !pItemElem )5 h5 ~: z0 G( t$ h7 F; ~- f. v
continue;, r8 z, X2 d' D+ {( t4 n
if(pItemElem->GetExtra() > 0)
: K6 X5 h6 V' L1 j1 G5 {) ^ continue;
3 p2 A7 r5 [. C4 g& v if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ; x7 j) }6 M3 v1 V5 h1 t% D- J
continue;5 X3 E* S9 i7 `
if( g_pPlayer->IsUsing( pItemElem ) )8 K+ F' p/ A! ?0 b7 z p
continue;
; {0 o+ z$ l7 q if( pItemElem->IsUndestructable() == TRUE )* i- c6 H. Q. A- t% Z
{5 x( g0 Y( \; B: {$ O# U
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );+ X* [5 j: U3 E i8 Q6 P
continue;
) _, m5 c& z6 A" V/ Q. I9 k }+ x. L6 p: @+ B' f
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
2 ?7 K d& G) J) V }
# A+ X6 x5 p' D3 `( F+ ^2 K. Z break;
! ?( t! h% a& b# v' E* w2 N' R }
1 v( P0 G5 W3 ~9 h% e case 1:
: z/ p0 a! s; ~) e3 W. Y' } {
, r; X4 u, _+ \; i //整理背包5 _/ h# g7 e8 z6 w* x5 \
/////////////////////////////////////////////////////////////////////////// ]0 `' V$ V' C+ {( ~: }/ w" j: x
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );" z, Y, h1 {* d7 e; D8 D# Z
//////////////////////////////////////////////////////////////////////////: B7 U# `, [ y$ \9 D9 q! p
//////////////////////////////////////////////////////////////////////////6 v* z( f% z& ]" U/ Q
CInventorySort* pInvSort = new CInventorySort; z" e7 A6 ?8 C* p
vector <sItem> vItem;
; ~7 S0 H1 t1 j M- Q* L vItem.resize(MAX_INVENTORY);//初始化大小
* Y5 A! m8 g! r6 S! q //////////////////////////////////////////////////////////////////////////
" P' _5 @3 {) I! A% U //填充数据4 `* O+ h T0 L, q) C; P: f
for (int i=0;i<MAX_INVENTORY;i++)
3 g8 v* ]/ ]9 p i8 t8 q7 ], r {
; ~7 r9 s6 ~# o q* N1 S) P* S CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);+ M! H0 v2 T4 Z5 f3 p
if (!pItemElem)" Z8 h) o; k( z/ i# j
{" }. m5 y8 Q! ]
vItem.dwKind2 = 0xffffffff;
5 L1 B: U* j+ e; ~6 R( N vItem.dwItemId = 0xffffffff;6 p: k( N! v, M+ X
vItem.nIndex = i;
# c1 l6 l$ [1 y8 X7 P }else {
) e" N+ c& S, v6 Q8 x* R! @. e: s ItemProp* pProp = pItemElem->GetProp();
- z) E3 }/ D! G- ~ vItem.dwKind2 = pProp->dwItemKind2;4 A6 s$ O8 a X$ v
vItem.dwItemId = pItemElem->m_dwItemId;% S4 m& b' j0 T9 g
vItem.nIndex = i;2 d0 x! _2 \/ [1 w4 ~
}
/ `: I0 W' B) x //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);4 m2 n1 a/ D) g: _
}
% j/ g- M2 L, I& \$ p$ b* J //////////////////////////////////////////////////////////////////////////
' X/ D/ J" H% x" h2 D sort(vItem.begin(),vItem.end());//排序- B& D6 s0 |0 E% P }
//////////////////////////////////////////////////////////////////////////
, U0 [6 h- e3 _. ~3 |9 X4 W1 b0 H- b& h //交换
% S9 X/ Q* C- ^7 q% A+ L8 t for (size_t i=0;i<vItem.size();i++): b1 m% O0 S# B- {4 x
{
9 n& _% W$ N+ c; Z; [# v! _. T //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
/ ?2 z9 r q4 V' b) o pInvSort->Add(vItem.nIndex);
# k- U: T' W1 C4 X2 Y9 V: L2 B' e' _ }3 ?0 a3 p" v* D; E* b2 T/ g$ `
BYTE nDestPos = 0;
$ k. ^- H8 B, s, |" M/ [ for (int i=0;i<MAX_INVENTORY;i++)
+ T, x q0 g/ S; z {
, d* X& p8 j& t- e W: ^- i CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);. G3 Z3 p. t* h# ~6 |
if (pItemElem)6 {- }8 n1 m$ S
{. J- R% w% ~ e R: N U
if (IsUsingItem(pItemElem)); Z5 t& v( N- ~0 `! z# `* [
{
) H* r8 F( g. a* ^ //这个位置无法放
6 I% d- h9 U4 H& q# g nDestPos++;; ]( \9 b7 ~/ s& I7 Q6 r. Z. f
}
9 {/ a4 s1 R6 H }
W4 w( [2 ]* b+ ]2 v* q9 I BYTE nSrc = pInvSort->GetItemSrc(i);
" @. I: x' l, o- [ pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
) p) F2 Z0 Y2 | if (pItemElem)- v( n7 u4 B/ |9 M
{* p* N' `- ]6 f7 a. w* D
if (IsUsingItem(pItemElem))
s3 H. ^3 N8 b4 @ {# U2 s5 A2 @: o0 k2 G; ]
//这个道具无法移动,跳过# Q5 a' [0 L! o8 ]- B
continue;
m( n! D" K, h9 o' G7 ~0 J Y/ c0 p T }, E" {) E: _8 t
}else{& b6 M; o6 k, O8 P+ M
//空位置 不用动
7 N4 r {. u7 Z0 s6 H% ` continue;9 N$ S1 K% @8 C6 r
}
1 A; g, V4 t( h' B //////////////////////////////////////////////////////////////////////////
* Q* z1 @3 |$ Z* U6 G; v ?1 G" ~ //开始移动, y- T4 c1 s1 v- q T3 ]* J
if (nSrc == nDestPos)
% Y. {. F' H5 C# t& ` {( Q' @5 t5 B# i& a' o
//原地不动
h# N( M9 K) L. U$ c nDestPos++;9 g/ x8 E8 x: q5 V! a7 L+ K/ `
continue;
- W' [8 X2 k1 b9 l6 z. ] }
$ m2 i$ C* S7 T; S( |5 a! Z3 s0 } pInvSort->MoveItem(i,nDestPos);+ s" R* ]3 {1 ]+ I- S0 O+ p
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
# I# k+ e6 v) s' X+ T+ q Sleep(5);
* |% @7 z: I0 ?$ k2 S7 _. @ //Error("移动 - %d->%d",nSrc,nDestPos);
+ @7 @, S6 P d2 P' ] nDestPos++;& @, j+ k* m* O# M. B6 y8 V
} V( m* m5 p/ R% p2 \
//取第一个元素的信息. {8 ?% m P r( `, J
/*7 t; w* ~+ J) p4 i* R
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
4 r. A" k$ o( h& ~ {
2 M' o9 A: u+ ?1 ^4 k4 j Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
5 y6 J# w# G0 a2 x5 g g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);0 i3 ~' ]) r* H- R; {3 M$ ?0 J. s# H7 [
}
. `6 n. q, C! e. m9 e */
4 n4 a- o1 F- B; @ //////////////////////////////////////////////////////////////////////////" `. V, g% G7 G# T1 @+ P
break;& l* `, \6 c7 d! N5 u
}% w0 D7 i7 \8 m, `# c$ T
} # C8 q T& u9 T) G9 A; J2 r" C
}
. t% U8 ?6 U7 @1 R& I `$ o- Am_wndMenu.SetVisible(FALSE); y( N3 i) p) f& `! j
) P+ j! I l& u# I: h S! m: b/ L$ q--------------------------------------------------------------------------------------------------------
% G W+ U. e: G$ l0 ~搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point). b# Q( I# T8 R7 z2 {/ F7 b
{+ }2 Q; P* f, ~3 x4 C% d0 a3 u
BaseMouseCursor();2 d* o* `6 W* G; Y0 K
}
: `* w) Q3 g# T7 h2 X7 H# O1 o在其下添加:
) C# s2 o! k: Lvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)$ W* w! \& X- v9 A W" L0 z
{
. g4 f. O, F( G5 b, ?m_wndMenu.DeleteAllMenu();
3 z R v' i) N$ w# Y+ u3 km_wndMenu.CreateMenu(this);4 k" ^5 X+ j) f
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
. Z5 @) C r+ B. p, P; ^& K0 ?: f- }& ~1 K9 F
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
# Q. W( R; ]" q2 U3 d; Q; \{9 h: L* [- Q; v7 H3 I; m4 m
//P以上级别才可以删除所有道具: Z7 O9 u( c6 K6 x# w8 S' ]$ W
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");0 t6 }1 P& O4 D+ c% B( ~- n# m1 `
}/ v' {7 W6 L' [8 }% a: |- o8 h
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );( q% t9 u4 Y5 \
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() ); Q+ j, a( o; T: `5 h1 v( g% @
m_wndMenu.SetFocus();
6 Z5 K1 O! V# v}
, l( K! Z' ^- o1 D% p& ?------------------------------------------------------------------------------------------------------------
9 P4 b) u$ k0 i, E% C0 d- w; j*************************8 X6 ~6 v9 b/ P$ n! h! e# H
WndField.h文件
8 V, D' s8 o. o9 K& `) @- i- Z1 D*************************2 F7 K9 u( H8 k5 l& @: C
搜索:BOOL m_bReport;
p" o/ J8 \7 I% h2 u! {, I其后添加:3 h1 f6 t% q& L5 b: l
CWndMenu m_wndMenu;
5 T2 R2 }4 ~6 D5 D搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);7 k1 l: j, l T' Q" J
其后添加:
; n+ ?( O4 m8 \( Ovirtual void OnRButtonUp(UINT nFlags, CPoint point);
) u/ t N, o* {
& I$ [ ?# q$ i# _! ]* `2 r5 [5 O. K; }# i& `
|
|