|
|
源文件中_Interface文件夹下WndField.cpp文件% a7 J# K. O- _, t; K: b
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )8 O- u6 F( ~, l1 x; z3 T
" c' W/ I& Z8 I; i' T& x: h3 J
struct sItem9 X. V) }; H9 q8 D$ T6 i
{+ M6 p% j$ t' i, g" z1 M. W
DWORD dwId;
# D; d4 @7 Y& i4 p4 W- q3 d' lDWORD dwKind2;
* K7 ?* w" p( ODWORD dwItemId;
' u$ E0 @; @& K+ M( |BYTE nIndex;0 Z) `4 Q1 L' d9 [4 X
sItem(){9 E% J. A- O) p% g5 P8 M
dwId = dwKind2 = dwItemId = nIndex = 0;4 n) e7 p5 y z5 i6 g& U2 `4 ?. |
}
" o& d# ^9 s+ C5 g) H3 S' M3 Ibool operator < (const sItem p2)# A7 P3 I, n8 u, n6 i
{$ m3 W$ H. q9 I1 C6 i. `/ z$ v
if (dwKind2 == p2.dwKind2)
. L2 k) X L% u- Q) k( z1 e {( r1 q1 R" P; e0 u$ ~* f
return dwItemId < p2.dwItemId;
; h7 [ w/ g5 }+ w; t; h& B }else{
) B: R8 v" E" i$ y5 T5 k return dwKind2 < p2.dwKind2;
# g) U6 t J5 T }
) a/ d. B4 y4 O7 q% X _1 P}
9 a& V0 H9 ~/ c0 U8 t+ d9 _};
" a D; h( U$ V0 G8 Tclass CInventorySort
( }& m% H% o- k* P{' N3 D& P) i/ A4 n
public:
# p; K$ e/ Y- C) Y/ h7 OCInventorySort()
7 U, u4 E$ I2 H" g1 ]{+ F' t: H4 V4 d/ b1 [4 f
m_dwPos = 0;
6 f, D+ s* m g}7 {- b& D- G" O. G, S2 y$ M
~CInventorySort(){}5 i; i- M/ j- t6 C7 `1 a
private:
( d; E5 C# r% N& ]sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
# {" u ^! G2 C6 W/ q, }# uDWORD m_dwPos;
' W0 D$ J# j5 i- b8 hpublic:
0 s' b* R3 a6 \9 a9 p- ], g3 O& \5 kvoid Add(BYTE nIndex)' [, K/ I' q& G7 H- y
{
9 D/ |2 `. t# Q; n: Z, U m8 r if (m_dwPos >= MAX_INVENTORY)6 f; u! `( v* U# j! P
{5 g! g9 d" H% Z# k
return;
* Z7 x a. }# |2 N' N' V* }* F }) L" l: K/ e; g* Z3 [( d
m_Item[m_dwPos].nIndex = nIndex;2 W b2 ?% w3 `) d# W% m$ u
m_Item[m_dwPos].dwId = m_dwPos;# w) k4 x/ m' G2 J- S3 G9 i
m_dwPos++;- ]& I; a( h y
}
( F m, @! r$ a. e+ V- b/ |BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
7 B9 R" J4 X. `$ o& G6 q) l# V$ l1 Z{- `! h" O- R3 P) l: N
for (int i=0;i<MAX_INVENTORY;i++); B% H- A1 K% n2 V ^4 w7 [4 D
{
P/ e$ Q0 b! o. d1 C) m" d3 V if (m_Item.dwId == dwId)
; o5 D4 T: [2 m* l! x {
4 J+ M+ \4 ]1 ^9 o( ^1 b return m_Item.nIndex;3 d+ Q! Y& ~5 L) d+ s+ T5 H
}
1 K3 @( v7 ]- h* c# B }
0 @* ?9 n ^, A2 C R7 N return 255;
- b7 n6 B; F* O}
5 W1 m9 `( [! h5 }8 [void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置! h* t, Q: s& P3 s
{
3 N; ~5 ~% p* S: y8 ]$ e BYTE nTmp = 0;
9 e j" T5 W; G3 j bool bDest = false,bSrc = false;1 D# Y8 T. G C$ `
for (int i=0;i<MAX_INVENTORY;i++)
5 x1 J' I* z! m: f {
; M& \, {! k s5 z# M if (dwSrcId == m_Item.dwId)
' {% l$ E6 W% f @7 l7 C! }& x& ] {
. k* u) z9 |4 P+ Q //id相等 则 改变对应的dest和src1 m6 O# ]% X) \+ {
nTmp = m_Item.nIndex;+ f( w. e, c) z* ?3 A
m_Item.nIndex = dest;
0 n0 a/ u4 w4 X8 h1 p+ M }
! B, [* [3 U( h }6 a& y8 S B, ~' P
//临时数据保存完毕,交换开始- a" d3 @& ^- j9 a1 O7 t8 ~
for (int i=0;i<MAX_INVENTORY;i++), l& x( {; [; D/ x% O
{
$ K7 w! P4 ^2 z if (dest == m_Item.nIndex)- ^; Y; J( |" J7 R2 @: q
{+ R& f; P6 S# b& L3 _- \
//id相等 则 改变对应的dest和src' |6 Y* }$ d* h- A5 R( {
m_Item.nIndex = nTmp;* d% _8 P d# E! {# j( m5 p
}! x( V1 u( Q8 ` t H8 r
}. U3 J) G% f* p. R
} H+ E' d( l8 k; E
};9 H6 A3 @% z) y3 d% _0 J+ L
-------------------------------------------------------------------------7 F, `' j- D# T, C# v" x+ f' i
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )) p8 C/ \+ C6 @" V
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
/ g. {/ [* E; m6 _- p# O紧靠其上添加:. F; v7 [ A5 _+ j% @
if( pWndBase == &m_wndMenu )
1 [0 ?7 M# \7 x4 h/ F{) P& a6 P* W) k5 x
switch( nID )( U3 Q- Y* _& a) R1 c) y
{8 X( Z/ E Z: u6 C, g/ {, v% L! s
case 2:: m3 p# o n( s0 e" @& p0 M. i
{
$ j( t6 p. g8 U6 \: l //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
?( ?4 q. l' c- o7 D" ^ if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
" I5 K+ }6 d- G {
9 O% E" G) l' W% h& S7 d break;2 V. j0 x1 N( |9 k# }. Q
}( B6 H# m( ?1 C' s6 G8 R5 r- _
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
; G+ O( b$ T3 B& I0 K, j8 [1 S8 K {
- r3 h7 j; K4 }2 [( j& ?* R CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
8 b# l$ P1 p& | if( !pItemElem )
8 U0 l% q5 A1 U) W* H. m# c% v3 D continue;8 y2 y0 ?, [& ^/ M) k: ]
if(pItemElem->GetExtra() > 0)
8 Q+ _% `# G4 z% Y: t" G% i7 l6 U continue;
1 p4 U- Q( M; u3 ] if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ; V; @+ w5 d4 U7 ] n; @! |
continue;4 ^+ n$ b/ I' U5 X, J
if( g_pPlayer->IsUsing( pItemElem ) )5 \. v5 `& r$ E% J
continue;
0 g; Y( m) ]+ }* p9 i0 [ if( pItemElem->IsUndestructable() == TRUE )
& ~4 C) W( F4 z( e {
0 x7 S* C" Q: y& ?; q7 X g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );0 Z7 Z# g' {# c: S4 o) ]
continue;0 o& j8 ~# y& X, [) q
}
! o9 W: c' G+ H6 S$ P! w) R g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
6 x8 {! T) `- x. W5 r1 u }4 [3 K; M+ e R+ m4 _9 ~/ a# V6 n. f3 [
break;+ u- Q4 u, Y7 B1 _/ V. o/ a& }9 R
}
$ X: y/ T! [2 g) \0 ?- j case 1:
3 k) `; W8 [( w0 M {+ u# g/ k- D/ J; Q
//整理背包! H6 q5 m( s) z) b& b3 E0 j
//////////////////////////////////////////////////////////////////////////
. r3 M% H- _& f //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );5 h2 Q+ k5 `( K. k' i: B! `
//////////////////////////////////////////////////////////////////////////
8 \' M7 Z7 g5 [; K, w6 M //////////////////////////////////////////////////////////////////////////
1 t0 y) e! B" [1 g CInventorySort* pInvSort = new CInventorySort;% E, ~7 i! h( z- W+ ]" E
vector <sItem> vItem;
+ E1 K& R( f% f5 g vItem.resize(MAX_INVENTORY);//初始化大小* e3 E4 ^% ?4 H6 M
//////////////////////////////////////////////////////////////////////////% i5 ~# ?2 M- ], w& ?
//填充数据
$ r0 L; o' m& \/ ]: D for (int i=0;i<MAX_INVENTORY;i++)
: }" x3 t$ O: T9 @ {
2 u0 K% X _ A! a- z CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
( @% @- D' P4 x; h8 c# c if (!pItemElem), ]" s9 v" s1 J+ Y& c7 M
{+ G/ n: Z: Y/ w9 K1 N8 g4 J3 Y
vItem.dwKind2 = 0xffffffff;: T4 y3 J; r% ^) K/ I" ~" m
vItem.dwItemId = 0xffffffff;. Z9 }2 x4 |( h! U# A8 J
vItem.nIndex = i;5 \+ f9 e1 |" f: M$ p/ T
}else {
1 K+ L7 ^4 i6 e ItemProp* pProp = pItemElem->GetProp();
1 _) S1 r N( w0 J) o vItem.dwKind2 = pProp->dwItemKind2;2 `: g" _4 C. E; [5 i- t
vItem.dwItemId = pItemElem->m_dwItemId;
c6 Q; x# {* c9 q vItem.nIndex = i;
+ s4 `( C8 F- I9 ^6 d0 s. b }% z; y" {7 F9 B" H$ K
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);( u) G( H6 U$ b! @: |' j1 u% J
}* [$ i1 x! L5 z
//////////////////////////////////////////////////////////////////////////9 @( h+ n1 [( j
sort(vItem.begin(),vItem.end());//排序
- r! @9 K: ~4 w/ ~# X/ F //////////////////////////////////////////////////////////////////////////& S$ y6 c: v A+ P6 d) K
//交换
4 S9 F. |5 I5 n0 e for (size_t i=0;i<vItem.size();i++). A$ y0 X, X' x8 @& q& u8 {
{
8 Q4 i9 ^$ l( H- n5 C; } //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
" q8 k& f* r: N4 _2 r D% N# d/ h pInvSort->Add(vItem.nIndex);
7 \6 x+ n0 O/ k: X2 y3 i }
# w P5 I6 u# n O: s BYTE nDestPos = 0;& v1 e2 s8 a6 ~) `( t
for (int i=0;i<MAX_INVENTORY;i++)' w8 j. F+ ]# Q7 i. ^ A$ r
{
3 t& u; T# w, F8 W4 n1 W0 U CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
8 L5 H$ q4 d0 w2 @" g1 ]1 ^ if (pItemElem)
3 r) N, F0 B# k. s* p {
/ F' i( N: J6 M if (IsUsingItem(pItemElem))
}7 A/ m0 h) R {# y) }5 H0 ? k* s6 s7 `, @
//这个位置无法放- Z5 Z" v- \5 q8 T* c% t
nDestPos++;
# \4 F- t Q: e9 s8 K+ b* @ }
; H0 t6 } q/ w% N2 O }
) j8 w* q3 T# \& A/ Q BYTE nSrc = pInvSort->GetItemSrc(i);' m7 R! h5 o5 e6 f: ?. i& g3 Z- b$ U
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);: g9 f* O$ \2 Q
if (pItemElem). A. r8 R) s1 Y7 c7 ^- r% A/ W# r |
{3 t. }! Y8 Y+ l- \% s. k
if (IsUsingItem(pItemElem)); n. g- [. X9 I ^
{
. M* v% a* Q2 Y( k" e+ R //这个道具无法移动,跳过
, f% Q; N- y6 g: m0 [ continue;
; C2 ^# Z/ Z# V: y' e; h5 V }7 u( @1 @- L! x2 C. ]
}else{
% h! W) C* X q( }% j7 j //空位置 不用动
6 n- _8 z# D4 ^) P! S continue;+ _$ s; H+ F3 Z# D7 T) i
}
; I8 `9 ~! H* A4 |; p( c /////////////////////////////////////////////////////////////////////////// j% ^$ A" A: p; |- {2 B0 C
//开始移动! l4 l& _8 |. }: N8 m9 p
if (nSrc == nDestPos)
/ D& {( o, Z- c2 K) x! h2 s {
) r& |- F% N" a. X //原地不动
+ d) N6 N( r0 v U9 J" C2 x3 o nDestPos++;
! Y" ^9 ^8 {) x8 S8 ~' F) l6 w continue;
4 ~ Z% O2 u9 o' {1 t: S" O }* P7 E* ^$ A0 t2 O
pInvSort->MoveItem(i,nDestPos);1 L2 d: q" d$ ]
g_DPlay.SendMoveItem(0,nSrc,nDestPos);3 Y" b7 M0 P5 p3 r- I9 Q, J, W
Sleep(5);
- y2 b/ _8 F9 Q% j0 P //Error("移动 - %d->%d",nSrc,nDestPos);+ g! P# U2 q& C
nDestPos++;$ L# {5 l* h: p& ^* _, x
}4 K+ y9 F$ U5 U7 u
//取第一个元素的信息
' g4 _$ O: h( U0 d3 ^ /** t- R% U& Q/ E' f( U/ X% N! _. g9 A
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)' G# n+ V! G: e7 J! D
{
5 m) g& D' R" X' c6 V4 D. q Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
) k% R$ {; o/ o. e g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
" y3 ^8 W+ |; }' c( p }
! x0 W. B( H0 J; E% h; C */
+ E9 G( d& v* c9 o x4 O //////////////////////////////////////////////////////////////////////////
. I& p" A. c2 E6 N+ R( J9 N break;% I1 E' w; R' }. N* ?; h/ \; W
}8 o4 F1 I5 M( J; M+ H
} : n3 [$ ]4 F+ j( e4 m5 ]3 v
}
! {- ~ ?- y. r3 ^! s; J! G6 q* `m_wndMenu.SetVisible(FALSE);5 s. x6 e0 h, |
: d0 L o# U5 U7 f! d# ]- Y) T
--------------------------------------------------------------------------------------------------------
, s( j# E" b$ F# `" L$ u, {+ ^- M$ O* f4 m搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)5 P7 w& s; o/ M
{
/ u5 z6 \( K+ v" d0 k( jBaseMouseCursor();9 ?. ~! o; @! ?/ B: f1 F
}
6 t5 C% C, I% y1 j$ i$ F) u在其下添加:- R8 r5 k+ N) |8 Q5 ~9 _
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
: _/ u9 T6 E& m4 i0 H( Z{
' _# F; ^* V$ b5 U/ g0 b, Dm_wndMenu.DeleteAllMenu();
7 W7 o* }- n, j" n5 Wm_wndMenu.CreateMenu(this);2 e- k& s& M4 G+ E, {' `5 j9 t8 d( [! [1 I
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");- \% T8 c% y7 W8 s, U5 M
# ?' g# L9 L v) B. G
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))1 M: N& P- A5 L5 D r, r. P$ ~5 M
{
5 z, O5 p" `8 t+ r1 w- \ E! p, I6 t //P以上级别才可以删除所有道具, W7 ]+ | M- {' i/ r+ [* w
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
4 d# i$ ~' x- `9 V0 X U}* {9 k2 |: \+ N' v9 K7 q, E: A
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );* E4 [% n0 C. K2 s+ @# h! ~
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );3 ]7 t5 E8 \0 n5 U* x
m_wndMenu.SetFocus();
( A8 H8 m, e P: B/ F}1 Y- [0 ?7 c" k1 u Q, p
------------------------------------------------------------------------------------------------------------
1 \% J# l0 u& H S*************************
7 c' ^' S! I' E. b0 W3 kWndField.h文件7 }2 T2 J4 J& f' Q, G( J; `
*************************
' V: s$ [. k5 Y- B/ F. L/ D搜索:BOOL m_bReport;
2 Q X+ S; p7 i6 f4 ~2 |8 l其后添加:
% [3 N2 Z4 l7 v8 ~! N1 t4 VCWndMenu m_wndMenu;2 ~- Q7 s& ]6 @4 G# p, _ e
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);$ L' D( ?0 ~& J) K. _, f/ R
其后添加:0 x$ L6 j5 M0 p( D# p/ U0 [7 R( u
virtual void OnRButtonUp(UINT nFlags, CPoint point);: S8 d& S6 U/ z1 B
. `. ~0 K1 I" e) t) s# D$ y8 M* I6 m, R& a: E E' y& @
|
|