|
|
源文件中_Interface文件夹下WndField.cpp文件
7 c! v6 X4 h) b m5 h% C3 Q搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
: W( J' ?7 x& T5 W0 k) g& J5 P; R6 |, C- X0 x3 G
struct sItem
' k7 A$ d6 J/ P0 _1 Q{
: w8 ^ ~4 S* J- o) H/ mDWORD dwId;: g2 l1 i; P1 A6 l2 f. O
DWORD dwKind2;
$ o( X% j8 W `" qDWORD dwItemId;
b/ m) c" {' ^& [. g1 ^ r- lBYTE nIndex;7 @" Q5 \' @. @' G
sItem(){
! x% ^; f( J: ^9 u2 j& x+ U dwId = dwKind2 = dwItemId = nIndex = 0;
8 l' J3 H6 ]/ A) ]6 u}
8 X+ z. i6 q3 l% v( k- o: j! k- gbool operator < (const sItem p2)
( \+ Y" H9 D' J J/ Q" b; j{' {: R/ D; j1 B+ t/ F
if (dwKind2 == p2.dwKind2)* X7 t A6 _$ k; @+ `. S8 r' ?
{
& Y' \5 ?% U+ X8 _ return dwItemId < p2.dwItemId;6 ?1 K7 Q2 r7 \2 ]9 h: k% ?
}else{
' b1 n$ J% g! g& m$ h, {, r) Q return dwKind2 < p2.dwKind2;! i( J5 t) q C: @0 E; H
}& w1 h7 T; n& E1 ^! X$ V$ v- @
}& f) `9 ~9 r; A$ o
};$ j6 L( Q, U$ q* r
class CInventorySort; h0 |/ M# x5 ^* ~9 f8 N2 _
{3 [5 R/ V( Y2 n
public:
. H0 w$ Y/ f* Z7 dCInventorySort()
" ^0 ~/ g/ o1 C+ V6 _ z7 g{4 M/ ^. h' w8 K+ B" _, i
m_dwPos = 0;9 J* U+ r1 R7 P' \1 S) w4 H
}8 {7 v& |$ a- z/ w3 N, _7 c
~CInventorySort(){}" P' C; o, }$ i3 ~4 o3 i
private:; C( `: G. M* ~4 Z* e2 _
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息, o; r6 N$ |! K
DWORD m_dwPos;
! ]7 {( _' y+ t7 Dpublic:) O$ E; i( k Q+ M, E9 a3 X
void Add(BYTE nIndex)
1 u8 k% u0 z6 ~4 A3 h{$ A9 I& H) Q' c7 \: y
if (m_dwPos >= MAX_INVENTORY)
0 h" I# S% l' Z5 ~ {
2 c* u6 ^" \2 m1 p return;
9 [3 [7 S' n a2 B3 y }
3 y% G( }. b% | m_Item[m_dwPos].nIndex = nIndex;1 p, v, Z& w5 A9 P+ X2 ?
m_Item[m_dwPos].dwId = m_dwPos;9 L; M/ ?6 X: [
m_dwPos++;
$ T% X$ ^ q, o}
/ F% T5 v. [% E. ]BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列. N, v z A$ s. `# E/ Y) O
{
) v0 N2 ^7 m: K! q& h for (int i=0;i<MAX_INVENTORY;i++)# F% M& `2 g" w) V, `
{
& g# q+ B6 r3 D v( I if (m_Item.dwId == dwId)9 p2 G9 B& A8 ?& g, ]9 G3 F
{) s' ~9 s( h( b" r- Y: \' c5 ~7 M
return m_Item.nIndex;
' I# S2 g! S4 s: T }; d+ c+ ^( G! ]0 `; S
}, M7 P9 d) C m5 D
return 255;7 N+ s8 d8 d; S" m4 z! r' W7 ^
}: R3 }" ^0 @2 v2 |1 _
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
, K' U8 s5 U5 h- A D{
% N; ~3 g- y* g3 s8 _& q BYTE nTmp = 0;
8 j# _1 n$ l- q, k bool bDest = false,bSrc = false;
0 V! i( H/ c" k& F9 r5 M for (int i=0;i<MAX_INVENTORY;i++)& c! t" w( r& y6 U+ K' d2 T
{
0 A$ G0 R: q& H4 U0 t if (dwSrcId == m_Item.dwId)
% F+ m& t: s' n2 c9 A \8 o {
& t: l6 a9 [7 j* J# ^6 U' G! [ //id相等 则 改变对应的dest和src
/ q) h0 C+ o/ x( P- ^1 j nTmp = m_Item.nIndex;
3 r; t8 S. N; e2 D- |# m m_Item.nIndex = dest;; L. X7 N. T J. a/ r
}& g i1 c5 W% J. g g* M' u
} Y1 c H: }0 E/ d
//临时数据保存完毕,交换开始$ n: T2 l f5 [# B# F# E- u1 {" ?
for (int i=0;i<MAX_INVENTORY;i++) _. N d" r, H# I# f
{
! e, @: K& g/ A9 r4 h7 }; e if (dest == m_Item.nIndex)
! i0 s' R5 j, P* F {
; T: T3 G0 V, r6 o( W5 `+ c8 T //id相等 则 改变对应的dest和src
; ]% Y% Q r8 }) G' T3 M6 W, k& @$ n m_Item.nIndex = nTmp;; H& `$ A9 }3 L* O! D" Q
}* s6 x* h4 M; a+ @
}
! [. \. M8 e i, j3 a, T}. }! C. |' T/ ] ?) c: u
};2 b) ^; s( M, f# R" n* c
-------------------------------------------------------------------------
3 c/ `* c" R, z0 U$ b依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ) P* c! i3 t$ ]* M0 z8 N" b1 e# r
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
0 Q: h) H6 |: K- M4 M( h: E8 y% N紧靠其上添加:; q; S3 V3 h# Z& V5 ?* K
if( pWndBase == &m_wndMenu )
$ _8 B" K0 X: S. O9 w3 G" Y* W{
7 H5 V& W" C& k0 h2 } switch( nID )
0 t. K9 M4 W: I; ` {
1 q1 B/ G0 r4 O% [; @% x! t3 p case 2:
( f8 g/ M; u' w0 {* T6 A2 ?* v {5 ~4 g3 ]% z+ [0 f+ B; [5 L
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
/ V' G# t# ~0 ~, I; f4 y$ a if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
" G9 m0 \6 U2 k2 \% Q8 \ {' f( u1 L' t q) c3 |8 v5 v$ c6 h
break;
2 I- s0 h9 D4 E9 {* ?7 g }
2 i9 E5 A5 Z9 } for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
' Y3 [* n5 p2 J+ d7 L0 q& r {
6 \% y1 O% x# p" ^0 i CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
8 ?. b4 `2 Z+ ?, p' |9 D& I4 h if( !pItemElem )) d( u, z5 Z& h0 A5 v8 d9 Y
continue;9 F7 T2 `4 [' S8 J( ?
if(pItemElem->GetExtra() > 0)
" o; t1 p. J! z0 [# v, ^+ G continue;8 P' t h; N2 P3 T5 O* Y) A
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
5 c: Q7 j( j7 S0 a& N$ V2 u continue;" E. h3 z/ K' Q |
if( g_pPlayer->IsUsing( pItemElem ) ): K! a, n9 \2 m% @- u* R
continue;
9 Q1 ?/ W4 s9 y- j$ M! _6 V if( pItemElem->IsUndestructable() == TRUE )
) x3 ^0 w$ w S' c: ? @# Z2 {' C {
7 U. ]& u+ U2 ]+ E6 _/ _; t g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );& f0 D2 L+ L, u) W+ x
continue;3 J$ p' T; i: R6 U6 ?) a8 U
}. t( | S) o& i
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
/ h3 |" {- n$ r }
' s4 A9 M! ~% t6 q! u$ U5 k- @) p break;" T5 u$ ^2 D5 @2 f D& t E+ U9 }+ L
}2 m7 @+ G; }, h2 x
case 1:
3 O- f" {2 e+ S$ `* \6 f {' N0 P3 {% U# j
//整理背包- a8 r/ `" n0 L3 C' ~
//////////////////////////////////////////////////////////////////////////
; ^7 j- b' D% J; d7 k1 Z$ ~/ } //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
. f( s8 J5 t1 g* i+ v' L //////////////////////////////////////////////////////////////////////////
/ ]* ~* ~) I! C: d" _- K. Q ////////////////////////////////////////////////////////////////////////// G, r. W) [8 l0 P: |% O, Y
CInventorySort* pInvSort = new CInventorySort;! b: U; E" ?% f* b/ K% l3 V
vector <sItem> vItem;
6 ?- t# _( X9 w vItem.resize(MAX_INVENTORY);//初始化大小% N4 N: l2 o# |" d- r$ B
//////////////////////////////////////////////////////////////////////////
. y9 q# M7 y' _8 g2 c //填充数据4 Y9 m; n1 m4 U' s
for (int i=0;i<MAX_INVENTORY;i++)2 f4 v8 s& g5 R5 G
{
6 _- B6 q, Z9 Z; T* u6 j CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);7 h' v" ~$ d- M# E9 W5 b& V
if (!pItemElem)
Q5 \) k* Q) I0 ~3 E8 p, |0 [ a( J {
; I% h% M- T! ?# ?1 C; @ vItem.dwKind2 = 0xffffffff;* @ s$ a' {0 b" o8 o. e
vItem.dwItemId = 0xffffffff;1 S& U* l3 q: s3 g! o2 F. n
vItem.nIndex = i;$ V6 U v5 z% w
}else {/ R3 O: E( k8 j4 K* @
ItemProp* pProp = pItemElem->GetProp();
5 [; t: L3 [2 t9 ` vItem.dwKind2 = pProp->dwItemKind2;3 n8 `- Z; } h: p% b
vItem.dwItemId = pItemElem->m_dwItemId;; {2 ^0 ~# m5 D+ d' ~
vItem.nIndex = i;
. R/ l* K7 a; D" C8 v1 f9 z9 p }
1 y" I" x2 f/ L t, n //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);$ }( R# `. `/ N& M/ p T
}( Y# Z; z$ I% u; } O1 j
//////////////////////////////////////////////////////////////////////////
1 O- \! r0 `7 Z9 V W sort(vItem.begin(),vItem.end());//排序
! j# X1 H! S* a2 [ //////////////////////////////////////////////////////////////////////////4 }* |; ~) B. y7 w" ]
//交换
/ a$ D {$ `4 G for (size_t i=0;i<vItem.size();i++)
: \) _. R) i- t7 J; g) }0 ^ {
' p5 x" |7 Y1 }) z. |; H. F: K //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);' D) Y/ X& j% W
pInvSort->Add(vItem.nIndex);
[5 p% |0 i- Z- M( n }
2 m1 E9 Q+ Q/ s7 B. J- n U BYTE nDestPos = 0;. C; }; o# G _9 u. T1 p
for (int i=0;i<MAX_INVENTORY;i++): _( f# M% w5 W5 W0 n4 I0 ~
{+ H6 Q3 E8 q2 V
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
7 [5 P. x, T" b, s: U if (pItemElem). v; K7 Y7 d1 r. n6 [# l) r3 k6 x
{9 w0 {# u6 n6 Z, [7 W- k$ K1 d$ b; ^
if (IsUsingItem(pItemElem))& [9 y, |( Q3 h2 n4 K- s5 m
{9 |3 T; F; S4 Y( S
//这个位置无法放
5 {, X8 `# N# o0 ^* m6 o nDestPos++;3 ?8 ^0 W9 L3 s g9 U6 k6 J
}
$ v& U/ f, ^2 x6 ~: G" A" x% ?* E }" `8 ^8 n- k% R
BYTE nSrc = pInvSort->GetItemSrc(i);
% y6 @# ~. h4 D% ^ pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);+ b; Z# |* Q9 y3 w' G' h& F( _ d4 \* {
if (pItemElem)
8 M& w8 ^4 M& A+ }/ N! i {) B G, J' q& P- E* E
if (IsUsingItem(pItemElem))) |' D; G2 ?9 u' [) X* P, u4 q
{
8 K0 O4 ?3 L/ b {) l7 b" {8 E //这个道具无法移动,跳过5 |% @7 c1 y8 ]; a: O& B" v
continue;
" p" s) R- m) c }
/ Z- _, S! O S2 i }else{* d/ _# m5 h7 p- f( T
//空位置 不用动
: V$ W( |2 q! a( m- f; @3 T continue;
1 @2 V/ }5 e; M }
( @+ C" `& F7 f T, f( S9 U //////////////////////////////////////////////////////////////////////////
8 \0 Y; ]$ T% B7 ^7 V //开始移动
4 {. }5 T. E5 b8 ?/ U+ h# S if (nSrc == nDestPos)7 {9 X- @1 S1 t! j% G. e
{
: ~, K5 E" z% M6 B6 U0 [) K+ f //原地不动
8 R5 I" P# B: S, d nDestPos++;8 A2 Y Q! J* r" g! F
continue;
+ g" S- g8 m6 U# b/ T }5 x5 H0 M+ o% ~' U" J6 U/ R
pInvSort->MoveItem(i,nDestPos);
6 \/ T& I4 A/ y g_DPlay.SendMoveItem(0,nSrc,nDestPos);
; @/ R5 g7 S+ E. m( x Sleep(5);
" C: ^2 _& ?2 b$ `" [; i //Error("移动 - %d->%d",nSrc,nDestPos);- a' `1 z* q0 B3 \# m5 m' F
nDestPos++;" f7 Y" `1 ^3 W
}5 c' q. Z* J6 A5 p' h
//取第一个元素的信息$ m# B1 k/ w1 R# `# H( B; Z
/*
1 f6 n, \7 @. P, J5 W, Y6 u if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
# i( ?+ ]8 I7 i, i {: F& c( I" ]2 d) }
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
4 x; S( A" c7 P( P, y# A0 A g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);6 M! Z- p) L/ N
}/ x2 W& o" F& V5 O; y6 G* ]+ e/ ^
*/
* I; b" O) M9 Z I- a! Z+ ~# d //////////////////////////////////////////////////////////////////////////
1 F& H) C5 w: c2 _& H break;' V* M" [, A& F; }" E5 D- |$ x' n
}8 ~3 N) w, P& Z- O, H5 S: ]
}
1 B& K' W1 |& |}9 k _. {; T/ u7 `
m_wndMenu.SetVisible(FALSE);
) m. D; D* Z. G& @! ]
Y8 p# D; Q7 H/ I% |6 T4 [2 u--------------------------------------------------------------------------------------------------------) a/ k u1 x. g- S' u+ H) k
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
; a( x% f F+ c) g- h( N9 m0 [{: F8 u) A/ f1 Q- Z7 \7 U8 G
BaseMouseCursor();
: X3 D3 H+ \! C3 r}/ a: l, ^/ L% @1 g0 m
在其下添加:
* g& w+ `7 O9 {3 D w7 gvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
4 V/ @0 h- W1 {, ~. `! ~, D8 F& ~{
* R( |- h& t# }$ q9 m9 ` W8 E, X7 am_wndMenu.DeleteAllMenu();
% G8 i r7 B* N: n6 Z+ qm_wndMenu.CreateMenu(this);
0 i. a' l7 ]* {, Q% lm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
+ Y) l: S% q4 |; Y Y& j5 f+ Z# _7 y, ]5 G0 s
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
8 J0 z2 |/ Y/ P{
. l6 x* u# }+ m8 R4 F/ N //P以上级别才可以删除所有道具+ I5 c0 s& p, k' g. Z
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");" u$ ~7 q* O; B
}
2 N4 y% v4 ]; i7 x, ]m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
4 G# f' K9 }8 _" I& B! T* Vm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
4 ? z) Z5 u. g$ r+ L2 i' b# \+ Cm_wndMenu.SetFocus();
% M7 s$ M" ]8 n# y) m1 u1 Q}
" x7 A" Q5 t# r3 S4 q------------------------------------------------------------------------------------------------------------$ p% N9 }7 Q: n0 K
*************************% o1 j" o, L& }6 S) C, P3 D3 Q
WndField.h文件! N: w" x, O. l* E& n/ ~& o: _
*************************
; ?/ i0 E4 l7 w) u搜索:BOOL m_bReport;
1 C# Z8 o" f5 N$ b. ]5 c其后添加:) T2 ~2 g/ m& Q% Z" |7 c1 u% m
CWndMenu m_wndMenu;- B) ~: H9 y: G% b1 N& y1 n
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
3 p" |/ {: N" k其后添加:5 X* T2 b, \, Q
virtual void OnRButtonUp(UINT nFlags, CPoint point);
% T" Q0 q: d( @& s, A ~: c
/ ?/ s; S7 M% ?4 ]) a7 Q( n' K, o$ e6 k( o
|
|