|
|
源文件中_Interface文件夹下WndField.cpp文件8 y/ A" A( h& Z) A! B
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )) @& U: {/ F6 @: P ~, K
& y8 g5 t7 D2 o( K X4 D# }9 e) P
struct sItem
! P! q7 m. ^" R# V9 T% T6 U{4 Z }4 }+ C8 ~% @; O' o3 [( h5 b# C
DWORD dwId;
3 I6 ~* N- m3 {, B9 n4 W7 n2 ~6 CDWORD dwKind2;; k8 B) y8 P( N- y0 y( ~$ H: i( {
DWORD dwItemId;
9 r6 [# l/ {9 H8 Q9 x9 EBYTE nIndex;
$ ]; H) o* ?% M* s4 B, tsItem(){5 G1 P# P, S2 w
dwId = dwKind2 = dwItemId = nIndex = 0;
) i+ S" I. p3 G2 m+ s}' q3 _+ `6 _7 p& h
bool operator < (const sItem p2)- z' {# w7 }0 W4 z/ m
{7 [' T; {, \! F2 C, A) V+ L
if (dwKind2 == p2.dwKind2)
3 ^' d. ~7 W( `! W7 n- ]& w% ]$ j- ~ {
2 G" @. L( }6 h/ n) S: M4 R return dwItemId < p2.dwItemId;2 M* J" W3 \( b, D% ]' F& i7 `, t
}else{
' |5 x' z$ Q) {& s( S* R return dwKind2 < p2.dwKind2;# a! F- ]1 f) m% J3 ]0 y
}6 R0 P5 z2 e8 O. X, E
}# z& d* q. r$ h; G" T" r* O
};& i4 e! k1 Y* P6 y7 j
class CInventorySort
, V6 l. R& \" T* t- L% N9 C{) B1 y4 |' t; ~( S" X- F
public:1 `6 p' e% ?5 _( x
CInventorySort()3 }: f* w: Q6 w4 ]6 O S
{
6 B, V! M7 I$ J/ g7 c. y m_dwPos = 0;
; E- r! u' u- m, n# w; a9 X}& b% Y; R3 u' |* G
~CInventorySort(){}+ w( T* d& ~* i. {, I2 ]) H4 e1 Y
private:+ @) ^! O* x. A
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
4 Z4 t1 C- ~6 ^ |' xDWORD m_dwPos;
: N* C% u- K+ P# M/ m. p wpublic:
t! M( c$ I$ N( k# l5 f! ^0 T0 r- ?void Add(BYTE nIndex)' i3 b$ B8 I* t6 c# j3 o6 I
{6 `: K/ `9 Q& a3 ^* Z/ }
if (m_dwPos >= MAX_INVENTORY)
( s V8 ~9 ~2 j/ f/ k( w! Z {
+ ^( @9 P! y, I return;9 Q* K; d( f! v+ J, S1 O1 E
}& C+ g: v# @" w+ n
m_Item[m_dwPos].nIndex = nIndex;, v2 m% Z+ n, ]9 h E
m_Item[m_dwPos].dwId = m_dwPos;
8 X# B' }3 I" t$ L6 t' d m_dwPos++;
4 Y! b3 X4 r! @6 ^}' d& L2 f% q' E2 z' b' n
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
" {3 u6 \' D& m- B{) u" \# l; F& U9 k9 D
for (int i=0;i<MAX_INVENTORY;i++)# L$ v R# s( B! d l, V: }
{3 ~% B) D y1 v: z R
if (m_Item.dwId == dwId)8 z* U7 w% R: N! R* n- T F7 F
{
8 x. ]* }1 M4 {$ a return m_Item.nIndex;, q/ j$ _' D) Z4 A0 H
}8 ~" n( v8 p1 S3 A( E
}2 g. A2 O5 z* [3 \ x
return 255;+ n8 W7 z# p4 C! n$ d& i, Y v
}' o3 s% {( M8 P$ ^4 ^8 s2 w! o) d
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
0 c4 U1 m" k% c4 i% m2 h: u{
, O- { n: C' P2 g BYTE nTmp = 0;
# Z4 d) m: T }$ D& Y4 R bool bDest = false,bSrc = false;
( H7 W: c4 H% O3 e0 U' ~. K for (int i=0;i<MAX_INVENTORY;i++)
+ w! K; ^1 I# t {
7 k& U5 S+ l* s# N( o1 _4 V7 s if (dwSrcId == m_Item.dwId)
0 h, x. Y3 R0 k. k. W {
$ l# G' H, Y1 I) d //id相等 则 改变对应的dest和src
, O1 k( v1 \" i nTmp = m_Item.nIndex;7 j6 \1 z: f8 q3 r# Y
m_Item.nIndex = dest;
; K! Z) w4 g. `' _) S }6 C; I. \/ x: i
}1 S& q4 e. O# c; O$ J
//临时数据保存完毕,交换开始: D3 l: ]( m3 w. N& `+ c
for (int i=0;i<MAX_INVENTORY;i++)9 v* a$ V, d( Z$ @9 x7 y
{
0 G: \0 c) c6 H: }* g7 t7 `9 e if (dest == m_Item.nIndex)% J6 D( R! o+ F$ w# q3 F: M
{
" \& S1 B5 M: h9 ` g! h //id相等 则 改变对应的dest和src
( J$ \5 d8 A t ~+ ^/ O* o, y m_Item.nIndex = nTmp;
M+ Y6 J2 b" v }
x$ J% L& C% L3 H V4 f }
c, F! E9 Y; J! V2 B0 V! w}$ E! F7 L5 c0 r2 h
};
4 T$ R9 b$ r" F-------------------------------------------------------------------------
0 ?# u7 ]: O6 s$ ^依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )% p u4 Q: u; L' }3 h8 v, H+ G
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
! U$ X3 k, j O1 K紧靠其上添加:
4 p6 M4 W& p! {# Zif( pWndBase == &m_wndMenu )
' f$ J1 s" I' A{
& W8 `3 C) \! W% v' j, P switch( nID )+ ]1 W( o% b: k& ~# ]2 N
{
7 _3 a: g5 u& j0 R0 V case 2:
* T; F( ^8 S K( N5 l. m& L7 _& B {
' T/ I7 z5 T: H: X, x //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);6 H2 b( d6 b1 y( o* u
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
- |* C p4 H+ f, o3 l/ I {) q3 y& H0 r7 h0 _6 P& y) p3 X
break;
6 Z7 `/ j) l" ?" d, w7 B( q }
% D8 m- L% S+ ^$ ], f for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
, C2 x( ?! X6 F9 y6 F9 o+ ` {
. M& [' S- N$ ]& r; G) R* \ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
7 F+ W& E; z+ a. D if( !pItemElem ); P* C: O. Z$ v/ D: ]
continue;
: i2 d) B, L9 C( J7 U if(pItemElem->GetExtra() > 0)
4 Y6 ]) m/ u1 F: P$ n continue;
' e8 ]% a0 {/ j e if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
6 y- H, C; @ B5 k# m continue;7 @1 p& Z" y; Z) [# n5 U1 L9 B6 g9 K
if( g_pPlayer->IsUsing( pItemElem ) )
1 v1 O2 N# P1 w& D% n continue;
+ B& Y+ v/ [" D3 L B9 g" H if( pItemElem->IsUndestructable() == TRUE )
" @' [3 J* A4 {) ?& i4 L* f {
9 h3 f: S- ]# b @ g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
( m! j4 S; i/ O continue;
6 \, M+ ~' j$ E1 ~ }
7 l9 u3 ^& V3 d7 s$ K( t g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);4 ^6 X( m% U* r1 c9 F
}2 e+ P m8 L3 u: P( [5 D
break;1 v. s5 R+ R. N- \9 Y: M8 R
}! y8 e, o. w, r0 `8 J/ Y: [. h: Z
case 1:
7 v' n, i/ Z8 X1 W ]" K- F0 u' m# m3 F {
( }& A3 W7 Z7 s/ L) i5 c //整理背包; r. Y1 a1 z( e% S, s/ m
//////////////////////////////////////////////////////////////////////////& L6 G7 ]) C2 u1 G
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
9 w: v0 U7 w/ B5 q& d3 J- e //////////////////////////////////////////////////////////////////////////
- W* j: m2 B! S4 {! O# n //////////////////////////////////////////////////////////////////////////& Y' `, T5 E: A$ o5 M& a# f
CInventorySort* pInvSort = new CInventorySort;' E& W0 u# N2 ?; p* ^
vector <sItem> vItem;( ~+ o. t3 u3 b7 j; M
vItem.resize(MAX_INVENTORY);//初始化大小
3 g7 h' }2 R6 M$ j! K2 s# l //////////////////////////////////////////////////////////////////////////
7 X9 S, ]2 r7 W1 f0 d //填充数据
( _3 |( c7 D7 B4 X2 I- [ for (int i=0;i<MAX_INVENTORY;i++)! M3 h- S# s/ g6 |! X: j
{
+ G+ ^& i$ R: z CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
' N# X( c6 n& \5 O' @- ?3 D if (!pItemElem). i$ n, k1 N: o& x5 ~ v2 x' Y
{
6 h' H* h4 l# ^0 U }6 n vItem.dwKind2 = 0xffffffff;% T: U8 L9 X% Z, x7 U4 _
vItem.dwItemId = 0xffffffff;
+ B& p- i( Q0 W5 R5 R vItem.nIndex = i;
: Y' N( j) V( E+ a }else {
9 S. ~1 l1 B& |7 H. n& v7 R3 C: s ItemProp* pProp = pItemElem->GetProp();
M- s1 [: a* h N8 ?5 R2 t vItem.dwKind2 = pProp->dwItemKind2;
# I! x2 x1 n, u- G9 \* d vItem.dwItemId = pItemElem->m_dwItemId;
$ I0 A8 X" V4 C$ J vItem.nIndex = i;
0 I4 B3 e* B1 r* m# R }, ?' J8 S5 [$ n t) P: K8 `
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
' H( C7 r( e5 A l }
6 _( K4 D7 O+ i' G% o //////////////////////////////////////////////////////////////////////////
3 o0 X2 [7 K2 ~, q3 _- B# X& d/ q sort(vItem.begin(),vItem.end());//排序
! z. O. v, ]: g7 J //////////////////////////////////////////////////////////////////////////* K; E! P6 J) k0 ?. V8 J
//交换4 B# L( c( _+ f$ q7 R5 k
for (size_t i=0;i<vItem.size();i++)
: {5 }7 ]! A" f% t1 E/ c: F) Q* r {
( v& v. K& Q$ l' I8 B //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
' `! d9 ?7 o9 N! Q3 s0 L" ]# L0 g pInvSort->Add(vItem.nIndex);
1 m& f4 B: X! K# k6 Q8 N }
! B4 v) S: L8 v; o" t% u BYTE nDestPos = 0;9 S% P: n1 @7 K8 _; R% R( K
for (int i=0;i<MAX_INVENTORY;i++)2 K4 R( r/ p8 L: R2 l2 e8 B2 I
{% |4 E5 l0 d5 Q* @" B
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
! u L. A! O" A2 Z if (pItemElem)
9 z3 X$ M; d% u/ d$ Y1 D {
. ]: t6 j( g/ q: K5 ~ if (IsUsingItem(pItemElem))
7 O' l1 r3 P- k0 | {, [2 N- z* t. q3 h! `4 K
//这个位置无法放 d: w# z' C' F( G, G$ Q: B& I
nDestPos++;
& p/ E& ?8 S& f- c$ d1 U+ n U }, z( {/ u3 p& J' q& u6 a6 ]& u4 q5 `
}; O3 c$ m& A( a" Y" H: a7 H
BYTE nSrc = pInvSort->GetItemSrc(i);$ h; t; @6 H2 b: M7 X" b
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);* V- |3 m T+ N* a" q% Z7 f
if (pItemElem) P( P) L( `7 i: \* R8 O
{
! L8 p" O" m9 a5 a' x$ I if (IsUsingItem(pItemElem))
3 C8 G9 G3 I4 Q/ I4 P {0 t1 \( V. i0 f1 i$ ]; F& y: B5 E
//这个道具无法移动,跳过
( z; [4 h {, l' N" | continue;
: Z* @; p8 i+ \0 e2 l$ H' Y, X }
& s! J+ k/ M3 U& l$ s' c6 K- g1 h }else{4 m: S4 ?* a& R4 C: ^" x6 n
//空位置 不用动
6 E$ U& ^" H& ?* C! ?& U0 z$ k continue;
) ~3 T/ _4 m- A. ~* |, o9 a }% h( _9 J7 n7 s9 q$ L: g
//////////////////////////////////////////////////////////////////////////3 A4 e+ X" p% I1 u/ _ B
//开始移动* \9 m% o, p( K' y* z* G
if (nSrc == nDestPos)" d" P4 s4 ]) U0 C/ r# ` N2 {) | c. W
{
3 K, S% a) m6 R7 z. j) K //原地不动 F- J& X1 f% B: J! b# ^/ L+ e- G
nDestPos++;
$ o% |1 N. z7 X9 p" ?# U continue;* S. X0 ]) K# C/ c6 d: N
}
+ v. Y1 ~; V7 p4 ]4 z pInvSort->MoveItem(i,nDestPos);: @9 X3 v+ G: _$ l5 e
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
2 Y7 B, }7 }2 j* x' @6 o" Z( D q Sleep(5);
1 a/ Z1 E& V) ?& r //Error("移动 - %d->%d",nSrc,nDestPos);
& ?& ~8 y7 P3 e, j" M0 ]6 Z nDestPos++;
2 y {5 b" |) E/ \: u. v }
( H. L5 M8 r+ G8 e. W6 T$ M7 X //取第一个元素的信息
" |! r) _* _0 N/ U /*% M9 L. z. o4 T- W# p4 Y! S
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
4 I. J4 p- o3 @; P+ G {2 d8 @# T9 f/ V& @
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
( f- c: O1 }( m g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);8 I$ ]& ]# [6 j7 t& f! G
}, \/ L+ i( Q4 H7 Z" ~ _
*/. d8 ?$ v% t# g$ r
//////////////////////////////////////////////////////////////////////////: e6 x7 d6 a3 ~' ~& f
break;% @0 \' L6 M; K+ {% R( L
}
' S; V3 b0 Q! ]0 ~ } & ]+ \, G& S! i% m; U3 c2 ^/ X
}6 r( q- [: f& e" X$ |0 A
m_wndMenu.SetVisible(FALSE);3 W7 \& A. X' |1 _. D
+ H1 E7 G+ B9 E! U" L
--------------------------------------------------------------------------------------------------------
' ?% O2 f! v$ e6 L7 h: [搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)2 ]- H- c! l) T8 L3 _; P. \
{- F, ^! p& S# x6 @1 m" Z7 }+ ?
BaseMouseCursor();: f4 Q* a- V9 w4 k, c
}
' k8 q- M+ ^. u. A3 K( H在其下添加:
' P/ j9 u& u% }$ }. `. F6 T( uvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
+ q3 `3 M. ^+ w/ V/ d# O6 i+ Y9 U u{0 E9 z; b7 n. T( l6 |5 N8 s; Z) M
m_wndMenu.DeleteAllMenu();
( c/ x9 M( ]0 L8 U) S: Hm_wndMenu.CreateMenu(this);9 c5 p) a# M0 r' \8 X
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");% O* m |" m, P" G
4 M( C' V p9 R8 d1 P Lif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
4 ~/ S( ]4 ]9 u% L* h2 T{6 J+ D% B- \# F; n- G
//P以上级别才可以删除所有道具
: u" a" J" c n/ Q8 d9 \: t m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
, Z2 L; J {/ A) W' y}
2 k/ r: W' F% ~8 [* T$ Um_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );* I+ P' ` B+ W
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
' n0 r4 T( `7 qm_wndMenu.SetFocus();" w. ?7 U1 b6 l
}
& B! Y& t, b" ]( z& [5 i------------------------------------------------------------------------------------------------------------% R( Q' P% m- C, Y1 K
*************************
8 W4 h( N5 ], Q( `- g6 e0 t; _8 `WndField.h文件9 C( K' H: \( t
*************************
0 { A5 y& f5 Y2 B4 {! z搜索:BOOL m_bReport;
j' Y3 A0 k7 |: |9 b4 H4 v其后添加:0 ]& h9 x% K8 u+ t4 d
CWndMenu m_wndMenu;
/ g2 m+ W: W% y. L- f {$ {) Z搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);( {( g$ {" ` ^" ^' P- o g. N7 m
其后添加:- p9 _8 U2 r! r t& ~
virtual void OnRButtonUp(UINT nFlags, CPoint point); h/ O5 }6 @; l3 l S2 y: ]8 ]2 V
- ]! P/ N8 W" q& B
: \! A$ J. m/ c: }: |# @: a" D
|
|