|
|
源文件中_Interface文件夹下WndField.cpp文件$ q& f0 D5 E5 K6 [
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )' C$ [- i$ P* ^
- w7 }! a1 r c) `7 f P h, |" | E; Ostruct sItem% R- i5 ? S4 K- }
{' F/ c: c3 d. D; Y0 p
DWORD dwId;
) [9 b: L$ R- ~6 @# rDWORD dwKind2;
' I! o% P0 M5 `# iDWORD dwItemId;5 S& F9 V; o y4 H B
BYTE nIndex;
+ d, n) _0 A& ^8 D' m8 p AsItem(){! s/ x9 m- R& }; O
dwId = dwKind2 = dwItemId = nIndex = 0;
/ c' [& W/ {: g, P4 M9 {1 P}
& Z& V+ J3 F7 E9 Z! K% Qbool operator < (const sItem p2)
/ l( Y0 k# D S5 x! |7 z! W" ]{
2 Z% b5 m2 u) N9 b9 N if (dwKind2 == p2.dwKind2)
1 {! O" A; ^6 o* S9 G* I {
1 q, Z& U2 m" n9 q" J+ b& ~9 _ return dwItemId < p2.dwItemId;
3 e t: C/ Q, a$ E1 J6 e }else{* I& _2 j; z; U* r- P. i
return dwKind2 < p2.dwKind2;5 v; ?* y8 ~. M; w- P( y
}0 D+ k/ S3 b, W" k0 X
}* u% r- z8 u4 F& f+ P1 O
};2 A8 |2 G. g I/ L8 V4 [+ { v
class CInventorySort6 Q$ K$ n: k E4 |$ \/ _
{5 Y. {. N3 O6 Z! p% W, V
public:
% C/ h0 F0 ^ o& N4 KCInventorySort()# b0 b7 f) X p- I2 c, Z
{
6 ]' d- r) b- F0 r& N m_dwPos = 0;- q4 P5 F' ^' e3 W5 h6 j0 b
}1 ?* a" F& ~: B/ r( G9 u
~CInventorySort(){}6 m8 z0 f: M+ v, y' a+ E% Y
private:
" R2 H0 R; `; D0 E1 B; W6 e/ xsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息 ]) `% h6 R( D6 Q; Q
DWORD m_dwPos;
; L4 G8 f0 x- y) z' ^public:( m; _' g, \. n; x) ^1 R& v0 c; F* r
void Add(BYTE nIndex)! T2 R# C; _9 k3 v' _2 O. E
{
H" j9 B9 O4 U: c& N4 V" L if (m_dwPos >= MAX_INVENTORY)
; s* N: u5 i- k+ d* }) S& v9 [ {
* g9 I7 l7 w) P; ~4 { return;
7 X8 R2 A+ p! [ }- g* N: m( K; M1 P( |
m_Item[m_dwPos].nIndex = nIndex;) N$ O9 l I8 E, I t. B% {7 X) j0 L
m_Item[m_dwPos].dwId = m_dwPos;
8 L. [: A. w3 r/ H9 A+ @4 W# Q m_dwPos++;
# T( V$ {$ T4 w$ X}- O4 h; b9 F8 v
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列0 u# C3 S# ^6 U. a
{
! o: X6 x4 K' h" ~2 z: P' t for (int i=0;i<MAX_INVENTORY;i++)
2 f+ f" I" z4 U' P D {/ b* g% O0 F* N) E# ]) E3 A8 S( F
if (m_Item.dwId == dwId)% a8 W( N$ E& O" _% m
{) K/ ~9 k5 N9 R1 m( z
return m_Item.nIndex;; I; o$ R5 g6 L; N
}+ o. a6 ]4 }5 k! d! P+ `+ z# F
}
* y6 q( _* A6 I q* F- F return 255;$ \: w* C2 U) Q
}5 g5 B" l' b7 D' w5 W
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
0 ^7 C! w, y3 Y3 V0 O" U8 s1 {* ]- D5 a{% ^3 l% X& V; U$ f* R' I/ `. x7 G1 o
BYTE nTmp = 0;, _2 c' ~0 Y' k r0 W3 E
bool bDest = false,bSrc = false;" [. `! E4 R$ k% g
for (int i=0;i<MAX_INVENTORY;i++)
* s% ?5 P8 X6 i# ^$ y {+ w2 I7 K W$ o3 e$ u
if (dwSrcId == m_Item.dwId)! C1 N7 L5 m3 n9 y7 `! f* J
{: w" X) [5 v4 P
//id相等 则 改变对应的dest和src8 Y3 s. H/ H+ V" v0 h. ~
nTmp = m_Item.nIndex;- x3 }+ g' m! o' u2 d% L3 i, W
m_Item.nIndex = dest;
! h2 w, `2 E2 N# E1 v }' d f; H+ e% ?( o' D5 b
}2 E( ~/ O# h; L* E0 `
//临时数据保存完毕,交换开始/ t" w: y& X$ u5 W% w
for (int i=0;i<MAX_INVENTORY;i++)
0 c& t$ Q3 `5 D# K {
2 r Q) V. K6 A- _0 X3 ^1 F if (dest == m_Item.nIndex)
! V3 e. z7 t" `3 v0 |* j5 H {, S, l+ ]! b% D0 T; y8 I; e$ |
//id相等 则 改变对应的dest和src7 n2 [% Z3 I, O/ x
m_Item.nIndex = nTmp;
8 r; h r0 o8 a: k$ I2 i }" {- _% P3 Q$ H9 E, }. R& B
}
; W# U6 Z3 d* _- p}6 Z' i( ]% i: D' n; m
};% W" \9 Q" ^5 U
-------------------------------------------------------------------------& B5 _5 y* k5 `9 Q) ~: X/ l* e1 f
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
( m. l9 O" n/ ?$ [; |/ K: C* `搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
2 K4 J7 Q# S7 v1 t6 q紧靠其上添加:' h! g2 X' ~9 i/ T! j
if( pWndBase == &m_wndMenu )
4 a* T8 M! f% K{: a# _8 ^( V- `; O" V: W
switch( nID )6 O n$ u& X9 B8 Y
{8 j1 K: K" f6 Q# i- n1 u! N8 w# [
case 2:
' T5 o: \/ Q4 s0 Y- m2 \ {
! _9 X5 a3 \5 b/ M //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
g$ t. a: }! D1 b; u. j( m if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
1 j4 E' {' M# f. o# w V% R {( J; o4 U) _- V% P
break;
' B6 r" m, M% W% N }
9 D V! }0 t# D& V. M3 f for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)( c( e! K. ~$ @) X8 T+ x
{
! s: P6 O) j. l* e# r: f- a1 B, H CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);1 x9 p, }. J9 ^1 d' g$ l6 w
if( !pItemElem )# |( Y) `5 H7 F: h
continue;* [9 U3 w: E2 ^8 e# r7 Y0 b
if(pItemElem->GetExtra() > 0)
; X! R* r( n: y3 x continue;
/ D3 C5 X9 t& ]/ w j if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) $ [( D/ r. `% C: V
continue;
1 Z+ f! W- e) O if( g_pPlayer->IsUsing( pItemElem ) )
5 D- ^8 N5 T8 T. n% L continue;! B+ F' n" ^. I; n o9 w( M
if( pItemElem->IsUndestructable() == TRUE )
. c) a: I% g: y+ o t9 G' \9 R! d {; c' ^& \) G. [* t0 I* a8 N2 W1 t+ O
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
2 \3 P, Y, W/ N+ V- Z continue;8 O7 c; A1 I: L" T" T4 ?7 E# l
}) J- V0 y* v0 l3 e9 R/ Y
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);) w2 R" P w6 _+ C l5 ^
}
1 d* o7 [& {! Q# B9 l0 K: V break;5 y8 z7 I) m) z5 P+ I5 P( j
}
! H' `7 j! ]/ J) i5 c7 y F case 1:
& k0 }3 K6 `% N8 V# d { `, v# `% S' P/ o5 u
//整理背包/ v/ D9 d. w* W: H0 D" m8 J
//////////////////////////////////////////////////////////////////////////
' }+ Y# H' j# w' g* T- v //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
5 V& u$ n9 o" N+ n6 } //////////////////////////////////////////////////////////////////////////
8 L7 x/ m& k1 B% ~5 [, ?8 g7 j //////////////////////////////////////////////////////////////////////////0 n6 b& T9 Q u7 U! O! G
CInventorySort* pInvSort = new CInventorySort;6 d; y* k: Y7 w- Q3 m x
vector <sItem> vItem;
- U: d9 m" x1 _ vItem.resize(MAX_INVENTORY);//初始化大小
. L& S$ f% t+ [ //////////////////////////////////////////////////////////////////////////, y$ _6 `) o9 e+ ~% n
//填充数据/ T6 e, d# n& m/ M0 b" f0 c* ~
for (int i=0;i<MAX_INVENTORY;i++)( M6 C/ e: ?( o; q& f
{
8 @( i2 h; y9 @ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);8 K4 f+ X; N9 @2 [# P( _
if (!pItemElem)
' H: M' z# D/ d' L9 z {3 `9 n2 w T: W
vItem.dwKind2 = 0xffffffff;2 z: j) F5 v! H2 |! b
vItem.dwItemId = 0xffffffff;3 i2 l7 A+ z+ C$ x
vItem.nIndex = i;5 F$ e& V5 m8 ?6 v# D8 b' x5 u+ l
}else {# A- d' g5 x- g2 A8 O: A
ItemProp* pProp = pItemElem->GetProp();: w5 e( {* J9 W& @9 [$ h1 C1 G
vItem.dwKind2 = pProp->dwItemKind2;/ y4 o* q9 T$ u$ s4 \' R
vItem.dwItemId = pItemElem->m_dwItemId;
' R# I( }0 @5 x7 J vItem.nIndex = i;0 r$ H. s9 H* F! }
}
- S# P: P: J' k2 ~( k //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);8 |% T9 ^% r6 Q1 n+ x# d+ \; v
}
; f- J" Y& x5 g& R5 X //////////////////////////////////////////////////////////////////////////7 p. p/ @0 w1 U1 Z; E8 a
sort(vItem.begin(),vItem.end());//排序
% \3 L x( ^! z) z+ Y2 B //////////////////////////////////////////////////////////////////////////
S0 Y5 u( R: B0 q0 _ //交换4 w. L/ T9 M n: T. Y
for (size_t i=0;i<vItem.size();i++)
' g7 b; G/ s: v2 i/ Q {
( u, M: q# I4 P2 c. v/ q$ Z* V- @ //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
* H0 F3 n& ]; c7 U pInvSort->Add(vItem.nIndex);7 d5 `7 Y; ^0 x M" W/ V! a
}8 d/ z6 ^9 ?% l
BYTE nDestPos = 0;
, k; i3 b/ V0 }+ o8 B for (int i=0;i<MAX_INVENTORY;i++)
( r5 o' k9 I+ Y6 [' d9 O5 N) f. R {3 L+ E, G* K% m! @/ J* ]
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
$ y% [ l' w+ @6 x7 p8 ` if (pItemElem)& ?. @+ C8 t' C V. ^& \
{
* J' t0 n `6 e9 l if (IsUsingItem(pItemElem))
`* B" z& B6 W" t) `/ H. a" ` {
0 t, w( b7 e% w& I& o. e //这个位置无法放/ i1 `2 ?0 d5 a! G ~; f" S& ]
nDestPos++;* z2 ~3 I+ A4 H3 y9 k
}
! m* o; `, H1 k8 B5 a }
2 l% D% V9 Y4 I& z) w' m; B+ U BYTE nSrc = pInvSort->GetItemSrc(i);) U- z# H5 E9 R
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
9 h. E. j4 u: d5 r- v* Y if (pItemElem)
$ ?# w) q/ K+ B) K* O; ?2 e. [2 F {6 E3 l: |: }+ Z: F
if (IsUsingItem(pItemElem))4 d* N9 U$ C8 b* C/ s( g3 U
{2 b8 B, r& @! M1 K
//这个道具无法移动,跳过4 i$ W- O* p! \( i- `8 A7 ~
continue;, F9 {" n& `9 f% V
}
1 [2 d* h' \& {% d }else{
% H; @* r2 I# R( @9 j //空位置 不用动
8 g6 K0 u+ E7 P5 z( N% j continue;7 F+ a# {9 Z9 x& R
}, ~6 J% a# y$ o$ ?
//////////////////////////////////////////////////////////////////////////" Q8 i& D! r9 \( ~7 z. q0 J
//开始移动
2 p0 u5 z* J( n0 C: _ if (nSrc == nDestPos)
, I- q5 D1 ?1 {7 g) g {
/ r2 m# ~8 u J' @ //原地不动
+ \! C' r2 x6 d* q$ b nDestPos++;
" t$ t) S' H. L6 @ continue;
4 ^# d- A, S2 g: k1 ~- W }7 h8 g |- |8 O7 C+ k& d; F7 z& S
pInvSort->MoveItem(i,nDestPos);" i: z4 [: h9 `/ s1 j9 J2 _7 n, R1 C
g_DPlay.SendMoveItem(0,nSrc,nDestPos);0 p# Q% R2 }( P7 q0 Q9 s# J. h* g
Sleep(5);) m9 H+ g5 V" S* v
//Error("移动 - %d->%d",nSrc,nDestPos);
% A5 u) [% e! r$ h6 I nDestPos++; W3 p3 p: \/ m; ?) k
}
/ Q1 r! ^: D- {/ ~1 G1 H) B //取第一个元素的信息
) j: i% d- u# f /*+ U% a z0 p- v+ N# l
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
5 k# x& G+ q1 m# J+ M5 s {8 X/ z5 Z; X; v
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);/ |! g1 y, h1 [8 s9 f
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);& V- h9 |3 q, Y T
}
! h- A( w% ^% p1 C */7 H/ `" U6 K# n8 p! [
//////////////////////////////////////////////////////////////////////////1 b1 Z& c' Z- Q( m7 w6 t# {0 L# h8 w) w
break;4 I; A8 E( R+ I; c. Z2 f- e
}
7 B- X2 A: t/ q. h }
o$ W8 ~9 e9 ?* w9 u+ h}
. I1 _5 g, r+ S0 ^- o: B5 Pm_wndMenu.SetVisible(FALSE);
5 c9 P" \! P! }% f( k+ i& ^" G8 R3 [/ k, J
--------------------------------------------------------------------------------------------------------/ u2 T- z+ B: f
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point): A1 X1 j# S4 m. E
{
; e- z& u5 z' w* P) oBaseMouseCursor();
& \1 _3 A1 l S- |}# y z" [/ x; H0 t/ e5 o/ G
在其下添加:
: b8 E& c# M: Z! Y, I/ Hvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
1 H2 ~) c" d6 r1 K0 c{
7 w3 e; {8 h" d3 G9 Zm_wndMenu.DeleteAllMenu();
. v3 a( @ d! ~: r" v1 lm_wndMenu.CreateMenu(this);
8 c+ a( F2 m; B& \/ I8 ]( Cm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
9 Q! A @6 H; r/ ~# s# T% m) T+ P* z; o6 G6 D0 _' ^; [
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
! T7 R& B; h h4 i8 b{; O7 F5 {5 y1 ]" E2 O4 y
//P以上级别才可以删除所有道具2 ~/ \9 z, s1 a
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
7 c4 b4 {3 R& x& \ G) |% }1 A}
2 W& _( J: X: z5 ?9 g' km_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
& g7 u2 h8 [9 E/ p, Gm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
, @7 c2 P1 N9 x, `' x/ {, \m_wndMenu.SetFocus();
6 k5 b( s& ^9 p) n/ @}1 L8 B& F3 ?6 v6 Y5 W
------------------------------------------------------------------------------------------------------------
% \0 K* d0 Q: q# x2 ?& W- u, N- o*************************
$ s0 J( {5 g$ w( K/ r) tWndField.h文件
6 q+ y$ y. x9 p# |6 u*************************
" D3 g9 A8 j. L' | t/ D搜索:BOOL m_bReport;, @, n/ k! p# f2 ?1 `
其后添加:) F5 K* H4 r) o8 b
CWndMenu m_wndMenu;
- W% t) j0 I' s, T搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
8 y5 V& N8 \( G! ~其后添加:
' ~, c/ `6 D: _% s" [virtual void OnRButtonUp(UINT nFlags, CPoint point);
- u+ Y. N, o( z; A* ~# b# D- ~+ H5 g# S- l4 f( M- }, h
* `: i: {& o# e9 h! s: B: L3 A+ A |
|