|
|
源文件中_Interface文件夹下WndField.cpp文件! Z0 Q9 U! k4 y* P
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )3 D1 Z4 i" W" \! j* T
. v0 @& ]! ^$ G7 x- Lstruct sItem
( p. u5 U" J: S{- H* F* p* h1 U9 p& M7 K1 }2 `3 ?
DWORD dwId;
7 l4 z+ Q3 @4 `8 s$ rDWORD dwKind2;
0 A/ h$ L, u, HDWORD dwItemId;
5 c7 d& `3 O% `, B# vBYTE nIndex;
( f. S) p$ G: {7 `" M7 Z+ }sItem(){1 m( J2 L! F0 L) y2 {, Y+ l# n
dwId = dwKind2 = dwItemId = nIndex = 0;) M: p& r9 x8 D$ O6 L4 W5 T( _8 K
}
& h2 ^2 {2 x' Ibool operator < (const sItem p2)
/ N* P9 N3 u6 @{
- b* }1 _9 e8 }8 S7 a4 f if (dwKind2 == p2.dwKind2): \5 b( P% B4 R) i
{( Y/ a& s6 P1 l
return dwItemId < p2.dwItemId;4 L0 F! h. `; d8 r5 O; B2 k: E9 N
}else{' w* m! G* j& b2 U6 p
return dwKind2 < p2.dwKind2;# D( x/ w7 M! G1 M# m% i! B9 Z
}
B8 V. C$ H9 v7 P}
8 }- m% u/ F" E* v. c};
C/ _3 g& A$ e" {- O' z: A, p9 _# }: Pclass CInventorySort; l( n' G% W6 y' L0 D: Y4 r
{1 j- O9 ~3 K; l: d" H& V
public:2 h; U G- J! }+ t0 ?9 f; A
CInventorySort(); T# e; m9 Q# i. w b
{+ o$ |: q- b% O3 c) F
m_dwPos = 0;
5 O8 O- [; P1 N% G! l}* P% {: y7 k* O3 a: B
~CInventorySort(){}, B' m1 }* v) \, B: g8 I2 J
private:
% T8 X" g3 o; H) [7 a9 q; VsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息; c, W% W# x1 ]+ {9 Z# s# m
DWORD m_dwPos;2 H# m8 G/ t7 B" o8 T
public:
4 u$ H( P7 y: K% H1 s: x; F( ~! rvoid Add(BYTE nIndex)1 N- T' D/ y8 y
{ q/ G) i* X6 _- M* U: a
if (m_dwPos >= MAX_INVENTORY)# r. [6 v. K" ]' `7 k8 g
{5 s$ P2 c2 m/ Q$ u/ E& T& {7 o
return;2 u- s( M3 H- D. b Q
}
- }1 x, S1 ]) a* ~' m- L9 m- D m_Item[m_dwPos].nIndex = nIndex;
* O( w# e. ?2 l+ Q m_Item[m_dwPos].dwId = m_dwPos;7 ^) s D7 Q/ J5 E; p6 C7 g& [
m_dwPos++;' M8 {1 q3 q. ~$ M. B! S% N; E
}
: J+ z, A- b9 J% f* b M! ~$ UBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列9 ~6 x1 k0 X* n8 D/ r
{, [* i9 r) s3 b# _
for (int i=0;i<MAX_INVENTORY;i++)1 W+ S8 s- q' | N
{
2 e3 T# P6 Y) k if (m_Item.dwId == dwId): e* O: d$ `1 U: |1 a9 A
{* D# ~6 E) N. _) o( O% D7 t
return m_Item.nIndex;9 T, D8 `" u( Y6 e5 j# `) X+ O
}/ b& S% T9 q5 I* p/ ?
}7 n6 C& L8 z4 ? A% X- I; W/ v& v, L
return 255;
9 W1 C4 W, g$ W& V( A}0 k4 L4 `; Y$ n P! n0 v0 c( k. z2 ^
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
" k' W5 _' H; ?7 H' @2 _/ A{
: j1 ?7 V( r3 ^# d9 d BYTE nTmp = 0;
* X* z( [5 d! J/ |/ i% B bool bDest = false,bSrc = false;
$ T! \5 j- Y" q. z" v3 Z4 Y' ^. K for (int i=0;i<MAX_INVENTORY;i++). A) g- X1 f' r5 p! H2 ~. {
{+ \! I2 B7 V& x0 L# m* S) t
if (dwSrcId == m_Item.dwId)
3 K9 {, q& V3 i- G% F+ t# x {
( ^' h; G/ _; G' o1 b/ T T //id相等 则 改变对应的dest和src
5 p- |- z0 S% `1 O0 m nTmp = m_Item.nIndex;
9 P- b6 K2 Y |. i9 f m_Item.nIndex = dest;
) R3 s: H5 a4 G5 D2 h# ^ }/ w$ Z0 O! z% x O) B1 w
}) s e, G/ t6 q8 ^( h
//临时数据保存完毕,交换开始9 p6 e$ C8 T# f# o
for (int i=0;i<MAX_INVENTORY;i++)
]. k5 Q% r: ?7 T; S9 Y6 a' b {3 n( v* j' e ]+ Y9 f/ f6 p/ m+ u
if (dest == m_Item.nIndex)
& a! m: P) F2 ?% g( [$ s F2 } {$ N/ w5 @: P9 F$ ~. t! P1 Q
//id相等 则 改变对应的dest和src
e: |! C" H& H7 `$ I9 {1 K& c& w* f' K& R m_Item.nIndex = nTmp;2 S, ~' M! x% W/ P& I7 Q" w, x
}
2 K# N6 E, R6 z+ } T5 b" y) }! X }
. B) y7 `; s, S8 M}* W" ?; m4 K7 H
};
4 c, n* l# `2 y' Y+ t4 F6 |7 w-------------------------------------------------------------------------
, m! Y" i7 M' F6 Z) I依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
" R& b4 }9 O( J. b. E1 L x' z9 J搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);. J( Z, z0 E+ E
紧靠其上添加:
& r. c' q7 ?6 j0 Uif( pWndBase == &m_wndMenu )
6 }2 G* G X. }* g5 Z{
, v' |6 C4 }: t4 I switch( nID )
2 j2 a" f6 v1 p& c- _% Q {# o# Z& b% k& j2 E
case 2:
* C1 r( ]3 L6 O; V/ _8 Y {
3 o4 k1 p; f) }' M; x* I6 V1 X //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
# w. r/ I' d: b1 K, v if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
$ `/ \4 I6 ]7 e, w; P1 r1 o4 ^ {0 G" Q! Q5 X4 Z* G9 o. x
break;) ^: S( }- _/ r! P- ~
}9 P8 V0 J) s% x- u; r8 X
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
6 m9 e' i5 X! b {
# g1 w+ w1 _! n6 t CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
( h8 w9 y0 j) V- C2 |' _! ^ if( !pItemElem ); l& Y' X6 k# n' T
continue;4 j4 |8 o+ |) U3 ?
if(pItemElem->GetExtra() > 0)0 e! ]! j( I, N" i' q/ Q# ?$ w$ b
continue;* r! U& I* ^' u* X8 e4 ~) G5 t' e
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) . n- F5 j3 j- m/ l6 V* h" s
continue;
2 G7 j0 C/ v5 A$ x; p# L7 q. t if( g_pPlayer->IsUsing( pItemElem ) )4 A2 l! \4 ? Q" o7 D+ l3 u- u
continue;
4 z. T3 b. J" P o' O4 r if( pItemElem->IsUndestructable() == TRUE )
" J! t. `! a- d- ]* D {4 T( K# n5 q$ k y( @0 y
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
8 T, z8 F7 G! e- { continue;4 ^4 P1 `" T* S' x
}
5 v$ h) ]8 P+ L# Y! o g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);. Z6 `# V U" d, m8 c4 N
}
0 N8 l. |# G; T k break;% O i7 R% \3 Z o5 D4 d1 {1 l
}
8 i7 e) f& |* E case 1:
+ F+ \( o5 Q2 u! P0 t {8 E3 ^, R I6 o% C0 x" k- d
//整理背包
' ~/ s) z ]3 q5 N9 V4 u, S //////////////////////////////////////////////////////////////////////////
/ D5 i& B1 w: d2 W //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
# T2 `( S3 j. w+ f+ f; z' W/ O6 ? //////////////////////////////////////////////////////////////////////////; l+ i p9 y& G2 s3 q4 ]* z, r) j
//////////////////////////////////////////////////////////////////////////4 `1 A0 R- ^# q3 Z7 S' J* Z* t
CInventorySort* pInvSort = new CInventorySort;
9 j! h) Y# c1 c, ]; i vector <sItem> vItem;
8 n. ^/ A& y+ Q p. @* T" B5 C& B8 N vItem.resize(MAX_INVENTORY);//初始化大小% g9 _; K+ l$ ~5 T& i
////////////////////////////////////////////////////////////////////////// ]7 \1 q/ Q3 p; ~/ u5 v5 Y
//填充数据; O; U$ Q' O. r6 y* a8 |
for (int i=0;i<MAX_INVENTORY;i++)
7 [. |2 |9 z r {
6 ]( K" b8 }* {& G CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
t5 G4 h) b7 b8 I" } if (!pItemElem)
# R* {4 K' J) Q$ W8 z- ^ {+ {3 F" S8 V; m! y) ]6 ~+ U: J
vItem.dwKind2 = 0xffffffff;
) M# D& E6 ] j vItem.dwItemId = 0xffffffff;
) `' a! g5 }& r9 n vItem.nIndex = i;
6 _% O1 ]* p/ a5 a/ C }else {
: `: m( J4 v; D6 S+ ?3 z+ A ItemProp* pProp = pItemElem->GetProp();/ B, M+ L& {0 G) h, a4 D
vItem.dwKind2 = pProp->dwItemKind2;4 w4 @6 h) q5 E9 {3 K
vItem.dwItemId = pItemElem->m_dwItemId;
8 w0 q- f8 K9 b6 G vItem.nIndex = i;
, p) W. _+ o) m# U }, ~ h3 ~/ R" H* p: K
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);) K' h4 v/ }7 e
}5 h2 M3 y& r/ Z
//////////////////////////////////////////////////////////////////////////& N0 W$ P& d; A# f3 R' I3 }! d
sort(vItem.begin(),vItem.end());//排序. i2 |* ]9 x% {, J: m& k) F
//////////////////////////////////////////////////////////////////////////
4 X2 E0 y$ F; N6 E //交换
9 w, F: Y- ^: W$ | for (size_t i=0;i<vItem.size();i++)
, X7 w* ~5 X6 h& Z( m* e3 u+ Q {8 P3 K* D9 g& L5 `5 V
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);( I) B6 t" L L# i6 r ?/ O
pInvSort->Add(vItem.nIndex);. t/ m/ z* Y# X- j* f4 `3 [$ B" D
}9 V( ^( o% C8 G! a6 w
BYTE nDestPos = 0;
) D8 C3 c- M5 Y2 K- i for (int i=0;i<MAX_INVENTORY;i++)1 g% m j3 b0 \: N) n2 K) C
{
* R; x1 z, @+ ~2 r CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
5 X7 {/ f. y- w7 h K3 } if (pItemElem)- p1 q' Q: Q- S5 ^1 ^: a
{5 _& O1 O1 i6 M9 z1 z5 I& n; `
if (IsUsingItem(pItemElem))0 ]: r! X4 o4 j4 V
{
2 x+ x$ i( Y6 z& O //这个位置无法放
6 s" r2 ^7 N# k6 T0 Z nDestPos++;
% f7 Y, z \4 l$ a& w' z7 S; g, L } t/ y N/ w5 ?( f. C
}
) w# O/ C( P' | v. A [ BYTE nSrc = pInvSort->GetItemSrc(i);
' u l/ d' D. O4 T) v6 C pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);+ Q% Q" T7 M1 U7 I! N
if (pItemElem)
% [$ y2 ^6 H/ _ {! I3 k$ T8 c3 r1 l! J5 p
if (IsUsingItem(pItemElem))
3 A0 P5 S* o8 r4 }% {: Z {9 y5 {: T% w6 Q8 C; z7 s
//这个道具无法移动,跳过$ P7 V4 M* M" o/ G) q/ g; } b
continue;
: {0 n: S. K" `) A P. |! m5 A0 R }/ D- i8 z2 r' n0 q
}else{# G- X u2 ]; \5 N# T
//空位置 不用动
+ Z0 z: P- M; q5 } continue; o- q5 A4 O1 E( E: S+ k
}. M* t% |9 U) r+ ?- @# @
//////////////////////////////////////////////////////////////////////////3 x* E( T+ i( }
//开始移动
# {( ^( F; p& b: U5 L" ~ if (nSrc == nDestPos)
. q3 y5 { h! H8 j+ u {! S4 h A" E/ S$ e1 z" f( T( Y: v
//原地不动3 j4 M. b' N/ m8 ~
nDestPos++;# q0 N/ V" b* f2 E, F4 Q/ G# w- X
continue;
" k: s N) u, F Y2 o }
" S- [8 j4 s/ i- o pInvSort->MoveItem(i,nDestPos);* d# _" w( I! t0 K. k
g_DPlay.SendMoveItem(0,nSrc,nDestPos);# C, j4 q- L$ M
Sleep(5);
) y7 Q8 u) D5 s% U% Z //Error("移动 - %d->%d",nSrc,nDestPos);3 M/ r8 ]/ U8 {9 }: \) j$ n
nDestPos++;- q# z* G6 s2 U; k( d" n4 z
}
" G7 J2 i8 {! l/ S* d. `! ~ //取第一个元素的信息% U% ]7 P! i# \3 a# f g/ c
/*
% W( v3 Q0 ~) x7 p0 f2 N if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
7 h/ ]0 c/ I+ g+ W/ Q+ s( g {
& K: h. q2 Y& d* W1 }; Z- _6 i Error("Move - From:%d,To:%d",vItem[0].nIndex,x);2 I7 V) [3 e: M2 ^8 j! v
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);# k$ K* Z( s& W5 U* R. |
}
6 M( Q: V% m. W) J3 J7 t, h */
5 a4 i2 p) e: d7 b- a: P //////////////////////////////////////////////////////////////////////////
2 d. u9 j" V+ m) Z% f1 Q break;
. \6 |+ x4 I& I( g8 V/ A }7 @* N7 p# s, {2 _
} / k& _' @4 A) D1 p& i0 [; l2 s4 a0 I
}* N4 B2 P1 B8 ?/ j9 T
m_wndMenu.SetVisible(FALSE);6 \! D7 C; d9 Z; u' U/ p4 n
$ q1 ^) Y3 b! F
--------------------------------------------------------------------------------------------------------
; E. ]! E) P0 p; u9 t搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)( {- f" |. W% W- [8 `9 F" y4 c
{% M9 ?$ W4 ~5 n J k$ I( ]
BaseMouseCursor();
7 v" i0 x* L- b}
% W, g& |; i6 W+ B$ K在其下添加:" U( Y# H0 v0 ^/ D- Z, @
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
8 {9 G: U* ]4 ~; U6 H' v \% @{
# z# _8 E/ T# Cm_wndMenu.DeleteAllMenu();
1 s+ V' ]2 M# S' h9 I `2 @9 ^m_wndMenu.CreateMenu(this);0 m3 s' ^* \; _+ D9 U
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");' [) e! F& c, w$ M
5 i2 G$ T& K$ O3 M. u4 j* Fif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))# t9 s. `3 ~8 y% L
{
& v8 U7 g6 g& z' K; F+ ] //P以上级别才可以删除所有道具1 G7 r& M0 p- _' ~, e6 Z$ \5 O
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");& M+ q( ]; a2 ]% X+ v! |
}
, S, Z( E: b# om_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );2 i1 w1 u1 y1 }' `
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );. b1 X1 c5 }& X0 n e+ F* _
m_wndMenu.SetFocus();
+ _( |- h6 c2 P/ g e}
' b/ m3 u5 m9 j------------------------------------------------------------------------------------------------------------
+ r" D2 `8 A. b- F************************* F1 Y; a! P- J0 K
WndField.h文件
) ~! }& ]: ]4 M1 h*************************' D6 |9 K: x, B5 ~' \% T/ j8 G
搜索:BOOL m_bReport;$ }1 r$ Y% i" M
其后添加:
4 O/ }) @' l& W M" h! oCWndMenu m_wndMenu;6 Q+ Q0 ~% x: f: H3 V' k
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);! m) n2 I- q0 s2 l- M
其后添加:- A" ]5 ^4 O/ _% k3 v
virtual void OnRButtonUp(UINT nFlags, CPoint point);- _0 r5 o. T3 U' Z/ K: L
. q- E' ^) ^7 B( {$ `7 L. [' ]0 f2 k7 n% N+ c
|
|