|
|
源文件中_Interface文件夹下WndField.cpp文件
7 v4 R0 e1 k6 N+ |. u搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )3 Q& i1 c: u5 W7 I
) w2 d: S$ @: w$ I7 E" ustruct sItem
2 w; K- J% }8 E; l8 p8 ?{
) n" c6 z( t8 S0 d2 `9 z$ X; BDWORD dwId;
: D6 c6 o, J( A6 gDWORD dwKind2;3 i o$ P& U5 L/ S" {% O% W& ~
DWORD dwItemId;0 b3 ]/ Z2 w* i
BYTE nIndex;
8 d" A- l) @9 E1 t+ `/ G' SsItem(){/ G! u0 E1 s4 z1 N n$ C2 A
dwId = dwKind2 = dwItemId = nIndex = 0;
% i; p% }6 F1 q5 ] a}
8 e/ M. a8 f1 l2 ~+ Qbool operator < (const sItem p2)
* ]+ p+ L- q$ x' M' a8 `2 R{5 Q3 [$ r1 x) y: _$ Q
if (dwKind2 == p2.dwKind2)0 [* \* z p( n/ y7 \( J% f5 a
{' o4 ?% ^ O \8 k- n: j7 I$ V/ m
return dwItemId < p2.dwItemId;
% x( Z" p) C, c3 x% w }else{6 u/ ^$ r' Y: J0 z, {
return dwKind2 < p2.dwKind2;
" d3 U1 A. T1 _ j1 S }
9 E* o6 V v7 b9 y' p; _}
# r. W1 ?+ O% i7 r# E};
. `* ^* e2 N: T4 {6 k, \- {class CInventorySort
7 P' d+ I* ?; ~' e$ U: T{
' `$ ~1 l; {. ~1 R+ H5 ]/ Jpublic:: s, w. `$ y$ g: J
CInventorySort()$ l1 u9 r7 Y! K6 w1 x
{+ v5 H3 d/ J. q0 \, W4 v: d* B
m_dwPos = 0;
3 `& y% h, \5 {" c) x}
( m" h6 j0 J3 ]& I% E~CInventorySort(){}8 A- Y/ K& L6 m2 N/ h0 H1 X9 X. P
private:; \4 ]1 o& F% s& k( S( i+ r* k
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息* Y* H$ \# N% D" h) R3 O7 S$ q: z
DWORD m_dwPos;: H5 E, X' W5 U
public:7 [ c* h) p/ J a; K5 ]
void Add(BYTE nIndex)" A! j d. \5 w4 K3 f8 \
{
4 q& z. c& |5 O0 L/ L if (m_dwPos >= MAX_INVENTORY)
; y4 w( d: U6 F" G {+ O1 c$ R# P* L
return;
0 T1 H% ~+ j: B }$ }$ E% u* K3 n, {! M! Y
m_Item[m_dwPos].nIndex = nIndex;
7 r+ M: ^: f* W m_Item[m_dwPos].dwId = m_dwPos;
1 D7 ~3 h& {- d# N m_dwPos++;
9 ]* ^. |+ @6 e) w0 b- @# P/ D}; x" ?$ R6 G& r- C1 J: }
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
3 C9 I4 }7 V. @. G{' \. u9 x8 S* n9 U% L" e X N( j
for (int i=0;i<MAX_INVENTORY;i++)2 W. r V I9 e r
{
8 x( J* S! z0 B9 o3 \5 ~ if (m_Item.dwId == dwId)0 ~ q. Y: E& e4 c
{2 P( k" N# w K- ?' L) N$ s" t+ d
return m_Item.nIndex;- e9 s G- b$ f2 t& a8 O, j! y
}
2 z/ |2 P: k. q1 U }
% g P7 x8 L4 b4 y: B* e$ b9 @ return 255;
4 P: s p0 _, Q4 ]1 m4 X# s}
; O |! e% n+ O" d8 [% Xvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置4 n. V) v3 [! {( @
{
8 h: C5 T3 u. |$ s BYTE nTmp = 0;: \4 i. z" }' M# O
bool bDest = false,bSrc = false;
+ c! r8 ?, V4 n/ U9 c for (int i=0;i<MAX_INVENTORY;i++)
5 N; o5 h7 {) I: G! F' ^) I {: J* G" |5 e Q3 O% ?# r
if (dwSrcId == m_Item.dwId)
% ?6 N2 D3 A# ?) \, _ {
; w, V3 C7 M- k" @( E) f, {1 }6 _0 w //id相等 则 改变对应的dest和src, I( `+ F3 i" v% G. P7 c) A! ^3 x
nTmp = m_Item.nIndex;3 m. q& A/ V& }: B3 o6 C+ I7 q! p
m_Item.nIndex = dest;, v- N" z9 L8 }: `' D* z1 J
}
* \3 s% Z: c$ a }/ A+ W0 M5 F+ Y& z1 e7 O2 c+ m
//临时数据保存完毕,交换开始
/ t+ P' h1 e7 o/ I* q for (int i=0;i<MAX_INVENTORY;i++)
7 z9 u5 c7 z, H: Q. @" `3 K* h {; t7 e* ]9 I$ ~2 u, y
if (dest == m_Item.nIndex), ]% ^. a( C+ V& I# n t% x# D* s
{
# R W8 f6 a$ j" N9 d2 S //id相等 则 改变对应的dest和src
2 D2 B$ n6 Z/ @2 k m_Item.nIndex = nTmp;
4 Y" p; k3 Z/ O' |9 w } `9 w: U, H9 n2 P
}
, E# j' Y' y z5 |- F}( o, o; e9 O s* i) K9 F; K
};; |: W4 W% ^) p, D4 R: Z' W8 M
-------------------------------------------------------------------------
% e$ J: `, H+ f C9 T. C依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
2 Q- H" C: Z9 x2 }, w5 s+ K搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);5 I) i2 D0 G1 `; O1 I& ^
紧靠其上添加:
/ a" N; @# X: @' s, Y7 ^if( pWndBase == &m_wndMenu )
; [( `( o# b& z; b/ Y/ Y( M{/ ~ }! M0 O* V1 e; ]
switch( nID )! _5 j8 L' V) J
{
! D6 @$ C @; b9 J3 ~0 o- d case 2:5 e) o' S4 i: ], {8 z( A
{# C! q0 D0 e" x) Q' U& B/ @: Z7 c
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);. B* U( s/ i" q! X8 z. Y
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 Q! g2 ~4 [; W: O8 F2 u {
3 {; F" D7 W' [8 K2 w, D3 ~ B, D6 d break;
2 d2 L; I4 B; X$ q0 [* x }
+ K Z* r) D: n+ T6 \8 T for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)& m0 G6 h' L ~! [& E; h2 _- D
{
. L: b. w/ [0 ?4 r' K o( @( _5 W, L CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);, H9 K6 C1 N; i0 T; h, S( t8 ?
if( !pItemElem )
& B$ u2 q; r9 x, W continue;7 u/ V# z. }6 Y8 C' o! F$ l+ \. [4 z6 q
if(pItemElem->GetExtra() > 0)
0 c+ ~$ I2 w& M i6 ]5 n continue;8 a$ o9 M1 J- Z- Y+ s9 |
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 6 v! Z' O6 o5 b8 Y" z
continue;
# ?. P/ c. z8 U7 E8 ^ if( g_pPlayer->IsUsing( pItemElem ) )
: W* f) O- E5 q# c0 i& o continue;8 m- e1 L/ J6 P
if( pItemElem->IsUndestructable() == TRUE )# E* X( d9 \) _- S, Y2 g7 U
{% a/ r* K8 O+ `% i
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
[+ g- R( J# y' d5 K continue;5 x5 ]6 z- o. q' _
}
- ^& S* n1 d' `+ o g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
s* w* d; [6 S }/ h- b/ C- v" z/ ]5 X; g& j
break;
7 E- {& Y; \/ G5 C }
5 P1 Y* D" H5 P# V! T2 G case 1:/ [) z! |. X* S3 _$ y
{
0 W6 Y! t1 b3 I5 L% j //整理背包, X1 b8 ?! Z. m/ y8 H5 O+ p. Y B
//////////////////////////////////////////////////////////////////////////
7 u- T2 ~' N; M+ G //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
9 `4 o$ V2 I& V2 h/ r //////////////////////////////////////////////////////////////////////////, O+ K- I- C( F& x) M& j5 |8 Q
//////////////////////////////////////////////////////////////////////////
5 n0 A! e5 ~, ?. d& n: ? CInventorySort* pInvSort = new CInventorySort;$ L2 w! C3 F5 V
vector <sItem> vItem;
* w( S7 A8 q1 E9 ` vItem.resize(MAX_INVENTORY);//初始化大小
* j9 P: u- C5 v; L2 R //////////////////////////////////////////////////////////////////////////5 F% Z+ t; i: E$ e$ R4 h. G* `3 [
//填充数据
b' J C2 _7 h0 k! ]; V for (int i=0;i<MAX_INVENTORY;i++)
+ W$ ]8 L, {( D+ t {4 j3 }' w3 S9 U7 M- R9 ?6 y
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);# B% h- a n) U
if (!pItemElem)9 O# G6 T8 J2 R: R
{3 X' m' i0 v2 B
vItem.dwKind2 = 0xffffffff;
& x* ] E4 p' H3 F/ R) R3 [$ z* h vItem.dwItemId = 0xffffffff;
4 o; q6 [2 ]; y# T1 r vItem.nIndex = i;% l( M ~: v) f+ m+ a3 L
}else {8 c1 l5 ]( R5 X+ B2 M4 o7 p3 }$ m0 Z
ItemProp* pProp = pItemElem->GetProp();
# L; R- M1 B' H% _4 } S vItem.dwKind2 = pProp->dwItemKind2;
& x$ t, c- V6 t% A+ S. b7 D$ j vItem.dwItemId = pItemElem->m_dwItemId;% K6 u2 ]5 ?- I% V. P9 s
vItem.nIndex = i;6 \% W. S( [! S5 x9 l7 [+ m8 R8 Y
}5 Z( d ], ?" i, K6 _1 K2 _1 Z9 T
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);, {$ k; n* K4 L1 I' L/ s7 z1 Q
}
; S, D; X' r4 _0 @; B u5 B, c! p //////////////////////////////////////////////////////////////////////////: X2 Z' C3 d! X8 m8 Z* }" Y
sort(vItem.begin(),vItem.end());//排序
6 j3 t7 G; j3 ]6 W; U! _% J* E //////////////////////////////////////////////////////////////////////////
0 \/ h F. l8 S/ K. h! F" S, G0 | //交换" K9 K) U5 C# g/ b4 j
for (size_t i=0;i<vItem.size();i++)
1 d+ p) p2 a9 A% q {6 ]8 X% N: a% A. x9 K
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
( c9 F9 |4 a1 s8 w( J# Z8 ~ pInvSort->Add(vItem.nIndex); j u! Q; C; F3 ^9 L2 e: x6 D7 Z' H3 V
}
- X" j2 b( X0 O Y% h* h* q- r" A BYTE nDestPos = 0;3 f, l8 G! w3 A; H; F9 w
for (int i=0;i<MAX_INVENTORY;i++)
& N( H; b( V$ s& N( F {
1 a8 S7 Q$ L" ]! j3 d7 p- b CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);6 J6 e% r* c1 G5 s+ R4 H% b
if (pItemElem)2 _4 U$ Z }1 K+ N* t) \
{' m5 c1 V/ F& w, v$ ~& f) J
if (IsUsingItem(pItemElem))
6 a; d: v& A# ?4 Y1 X' F; z {
, P' a- f3 D' q //这个位置无法放
* S+ l* a; |! Q' g6 H7 ]/ c7 V nDestPos++;$ u- z% _5 C( k7 S2 S, S
}# Q5 S- w: V$ k: `6 o
}& o3 [- X# F% f6 L
BYTE nSrc = pInvSort->GetItemSrc(i);5 D* F- \, Z/ G0 {) H# F' ]. `
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
' H Q, q7 c9 n$ ` if (pItemElem)
; _3 R; ~8 Y" q' {/ C, F {
6 e$ R6 S6 o) S6 A$ W" U if (IsUsingItem(pItemElem))1 @, j. r* c1 X4 {: | R# Z
{
N) |0 P& ~4 K; e, o //这个道具无法移动,跳过* y% n3 o: {1 M# x
continue;
% _# q2 B! Q3 n }- {+ v& ?4 R: Q' ~4 [* t7 {
}else{
4 A3 t3 V1 z7 R% ~ //空位置 不用动- ]4 X3 m5 i) V5 k; y! e
continue;+ X6 K, H9 d( H- T6 P4 B
}
& {, n# Q2 k r6 u //////////////////////////////////////////////////////////////////////////
( }2 {2 |1 f! A //开始移动, v& f; |$ l' p
if (nSrc == nDestPos); F& x+ x! l8 r0 u. s; a( o
{
" R D5 T* ?6 B& S& |$ K //原地不动
% t" T: S5 I K nDestPos++;
% {6 q3 r: W8 \1 D1 B' a continue;. L: a4 \; `& `/ V9 o q: c
}6 B; _7 F1 B; Q6 y6 `2 X2 h
pInvSort->MoveItem(i,nDestPos);
5 T! R/ p; B( ^( p, V- o4 K g_DPlay.SendMoveItem(0,nSrc,nDestPos);
6 C6 d/ A/ b$ U& R0 f; {2 v3 E Sleep(5);1 X, l' {& w& b8 z$ L0 T1 i- W
//Error("移动 - %d->%d",nSrc,nDestPos);- x& \; ?9 h/ d5 O* B1 f
nDestPos++;
/ v% u. p0 x, J }6 q v3 Z" A j0 t- p1 w0 o; i
//取第一个元素的信息
9 M7 n7 b& a( D0 p9 z /*0 b: F/ l+ ~/ _1 i6 a# b
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)2 \* t: a$ T" r2 p
{
1 z2 _/ L6 n4 c o6 a) ?7 v Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
7 I" ?2 \. M) ~ g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
6 g: l# k+ h& J% X0 F/ f }9 |) p5 X0 W5 b% c6 R$ l
*/1 @. i3 E) H: Z) S+ g) l
//////////////////////////////////////////////////////////////////////////
. a, k" l1 i3 Z @# O; Z, H break;* h/ J* \. K! o) E9 `+ T; o
}# G$ O8 E5 D+ m% E
}
* B9 @/ q' M; d; g}
# ?3 W8 U- C! S) z2 ~m_wndMenu.SetVisible(FALSE);
) \/ f F+ w" ^/ W8 z0 g& Y0 C0 z6 R7 ?* R
--------------------------------------------------------------------------------------------------------
8 u& W( {- h3 R0 i- S v) w! t搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
0 _7 y) ]8 ^3 z1 p# f{9 k2 j% d9 I, j0 f
BaseMouseCursor();( h3 V, t; m6 z6 o; u7 W
}
! |) p8 c! O- R# i- ^1 k& I% z在其下添加:6 C3 ~ F6 q& `6 j
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
- f& M& f4 o5 q) Y{
0 D; w( K3 H! Tm_wndMenu.DeleteAllMenu();. h9 o3 W+ u4 g C p
m_wndMenu.CreateMenu(this);
V+ {0 x' y4 ~, a* f0 nm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");5 w& W0 z9 n8 ^0 A* g$ x
/ M8 h- n: K8 c4 T" T
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))1 b. h( ] u5 [, @# I3 C: Z
{( j4 x f, u8 F
//P以上级别才可以删除所有道具, o1 i1 y' E; o" W5 j) U& P. g' H
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");- @1 D2 F/ Q* V
}3 U% y" t8 [: U4 b9 J7 @" Z
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );) s% i# U% O8 Q0 Y7 H. F- @$ E
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
6 [% u9 w6 A& r4 Em_wndMenu.SetFocus();, X- q7 B* @, s6 @2 P' @
}& m+ U/ y7 \$ S0 ^
------------------------------------------------------------------------------------------------------------
, M$ n+ ?- O q9 Z( U*************************
; D& S. A9 j( f0 e" p% DWndField.h文件
8 @8 k/ e% g8 ]7 s) f8 @( j*************************( c; F/ [3 }$ \( y/ d+ A
搜索:BOOL m_bReport;
3 ?1 q5 ~- p; V其后添加:, U! O1 u- {3 [
CWndMenu m_wndMenu;& z9 H: S! P3 n7 T) j8 o" H/ L, w$ O
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);! O/ G4 P2 L7 o) C0 _% j
其后添加:
! K6 F8 C- f( z! g; Z4 Q" ]9 yvirtual void OnRButtonUp(UINT nFlags, CPoint point);8 t& R( N/ y4 O# |
( U/ t b) y# {6 Z
8 ^& s' s, \, ?( @9 N |
|