|
|
源文件中_Interface文件夹下WndField.cpp文件8 ^# L% }, U3 w+ _
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
$ _& S3 {& S4 }5 R+ ~% T: E d2 U3 n
struct sItem
5 G. D$ P9 E! v) r{
; W4 y) }/ o* TDWORD dwId;
7 z- u9 K3 W+ W# F( }DWORD dwKind2;
7 {& v, m8 [; h8 eDWORD dwItemId;
8 w5 D1 W2 y+ rBYTE nIndex;
: u# e( k9 O5 t/ CsItem(){
( v* ^" y1 i5 W, d dwId = dwKind2 = dwItemId = nIndex = 0;' y# J0 u" p9 A; i6 y+ }
}
/ N3 H1 m6 P2 x/ r, C3 e+ dbool operator < (const sItem p2)& J, n3 b: B" Z, W- {
{* y- J: x3 k. ?; G
if (dwKind2 == p2.dwKind2)
0 V- \8 E8 N4 c0 u3 B. z. e {
& n" O# `: H0 C; h# K5 c! Y return dwItemId < p2.dwItemId;9 k2 M v: u* }
}else{
) \1 B8 H; t1 H9 R2 N8 s: Q5 j return dwKind2 < p2.dwKind2;
4 J) C1 W$ O* D N9 Z! q# g2 z }
3 W1 B! I% X+ T8 h5 Y! W0 p}0 p- u+ x6 o9 g
};" K- L, _/ p: t* \: b% y$ n: V
class CInventorySort
+ g* \5 H* x. J1 w9 T{, ~* y+ q0 S7 l0 G" W6 O8 @7 S
public:
8 N. d* \/ s* n3 ]6 YCInventorySort()
$ e' b1 v0 y3 [; `& K" i! J{! l y& C" y7 t; D4 [3 a
m_dwPos = 0;
2 o. {4 i4 i# ^8 v5 [' R}2 z) z; i3 G# t! I4 S" Z+ z
~CInventorySort(){}2 @- Q7 d: m) w: U' u' }3 V" [
private:5 q; j- A. J/ _" P$ r) F' k% l
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息! a% _. k0 M5 F6 ?: ~
DWORD m_dwPos;) \. T; {6 T6 u
public:' G, R$ K6 i$ I1 a* u
void Add(BYTE nIndex)
( T. T9 |0 T N5 v{
- ]1 G+ m. ]0 @9 Y0 Z if (m_dwPos >= MAX_INVENTORY)5 o) N' p) R- f1 L6 F( x2 K% Q
{
$ g# u/ d" @" V2 `5 t( A return;
7 P' r7 q9 _- R4 {% J7 | }- C: {' N; F# O% ^/ N( Q* R* T
m_Item[m_dwPos].nIndex = nIndex;
9 d7 K( ]4 L4 l6 W( E+ u: F0 k m_Item[m_dwPos].dwId = m_dwPos;8 s6 B8 |; h$ X. F
m_dwPos++;
% D7 R$ p. s+ X f7 F9 L}
* C- w( Z3 ~' l" H/ w# `% G: xBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列8 l" _4 b/ j( M5 c. L" F
{
- I6 E$ J( {1 a1 v$ e+ N; {# B" _9 r for (int i=0;i<MAX_INVENTORY;i++)
( u; R7 R8 @5 g6 N { U# u* j8 V/ |1 E% w. ]6 e$ G
if (m_Item.dwId == dwId)
& l, T; O6 S' P {/ T+ e; U6 Z2 P) G" V- i% M
return m_Item.nIndex;1 E9 u: d: `/ y+ k) ]
}% H" Q4 a+ i: w$ S9 g1 z" m4 l, }
}5 [9 _9 u# ]0 D& G, c. o+ P( t% f" x
return 255;
! t% z4 q7 _1 @& p; L}
4 t1 |6 u! p2 g/ j- Nvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
( u- t/ F2 ?- o% r{0 U7 Z) T5 c* L' B$ W% a
BYTE nTmp = 0;7 ^/ U6 b8 g& u6 P6 p3 j2 j9 N! s
bool bDest = false,bSrc = false;
8 @" f* X0 q1 c" S5 g7 n for (int i=0;i<MAX_INVENTORY;i++)5 o5 X4 ]6 A% ]$ I
{
5 p7 O# v/ J& x if (dwSrcId == m_Item.dwId)
4 W1 \' z& {7 w/ w { V: R$ _; J/ { S p
//id相等 则 改变对应的dest和src- F' B: i( |+ v
nTmp = m_Item.nIndex;$ _9 r0 M: p+ B3 B
m_Item.nIndex = dest;
4 a$ \. l/ t7 J: L }
1 x C, R" Y& a }! f; A0 [% c0 ?
//临时数据保存完毕,交换开始
?& u6 P8 { E$ y5 a for (int i=0;i<MAX_INVENTORY;i++)7 f( e$ B: U3 v; V
{* W8 ~$ B) e# x; Z+ n" A
if (dest == m_Item.nIndex)# u; }& b, ] [$ L) K, F0 V! S! c# `, M
{; Y' ^4 J+ }. `' Q+ a
//id相等 则 改变对应的dest和src+ F. V9 f% I% R9 @( ^ Y
m_Item.nIndex = nTmp;
; K0 w& u% y5 a: L$ y }3 H6 } P; s: g4 L
}0 g( o" x, j5 @2 G9 m$ F
}* c( ?* u( z: ?+ C* R) `8 x
};. t! G7 G( X8 ~5 [5 s3 t( W
-------------------------------------------------------------------------
9 l+ N8 \& M2 x8 a$ j! d依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
& d& K3 P3 q3 f, `8 D1 K# z搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
% u& I N" Z; y. y# J紧靠其上添加:
' ]7 l2 o* x4 |) G/ g9 w: f; oif( pWndBase == &m_wndMenu )
+ p4 G) u0 _, g: g6 T+ Q7 r x/ ]6 b4 Q{
! E; q. C4 N& |, c' W switch( nID )/ f; {7 ` r0 u7 k
{1 v$ X+ ~: k8 L8 \- ?- A# n2 u" ~* d
case 2:
4 r, a- M: e6 I2 g1 N" K/ t {# h9 P3 m* E2 f4 L2 J. s
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);5 x& H& i, t. B$ N. j
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)): o5 c) f3 Z0 s
{0 G! S% R( j) z. s) u; `/ L
break;
2 e* w* C" b( t- @$ G9 a0 `4 o }. E) j8 Y! \# U' x2 F: E: F
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
7 ^- j2 S; t* _* V3 Y( _ {
. y- O, ? S2 _ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);; A `5 u: @; S K5 H9 p
if( !pItemElem )0 a0 J" ?# W) g8 C6 C" v4 p
continue;
1 s2 F4 ~$ Y% D# W0 ? b if(pItemElem->GetExtra() > 0)" w" x* B, {: T/ k ]
continue;# W: m; }' \! P& E0 Q
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
% b; y7 T x, c; S+ D+ Q3 \3 @ continue;* {8 R. y' c$ q5 Y7 t" T
if( g_pPlayer->IsUsing( pItemElem ) )+ O& S) \: O$ O Y, s$ o9 ~
continue;
7 |- R9 ^/ w' \8 F if( pItemElem->IsUndestructable() == TRUE )
7 ~* n" f3 j! g- S4 J$ H# U/ F {
0 O) J2 z$ j( T g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
5 D8 M$ G6 } e2 k, w continue;
5 b5 ^+ k9 d: O! z3 w, h9 T }
" j- S' s- L6 J) k6 l0 v/ R g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);* U2 F+ B8 P# ~
}
! {# L" M6 u L+ c. F' I4 y break;8 b3 J4 W0 d$ F4 E2 X) T
}4 A' I% W: n6 i4 Z+ p( S
case 1:
( e' Q' D7 h; o/ r# w {. e5 h3 ~ I. K& ]
//整理背包
! x1 Z% T- I$ i* Q8 I8 G5 ^$ M //////////////////////////////////////////////////////////////////////////' t8 {8 s5 }' G0 c) z( f. F4 d: N
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );" g/ a2 n6 N( v, k
//////////////////////////////////////////////////////////////////////////% E0 c5 x ^8 d3 T& g3 V: R$ F8 ^9 H
//////////////////////////////////////////////////////////////////////////
' f2 d6 Q0 g3 Q5 L+ m( Z CInventorySort* pInvSort = new CInventorySort;. C' B3 O( y2 g, o0 A* s. r
vector <sItem> vItem;; S, d, Y4 Y, d) ], q2 T
vItem.resize(MAX_INVENTORY);//初始化大小
6 ~0 S! J) A3 H9 j! v //////////////////////////////////////////////////////////////////////////* z* I4 \# V! a7 w9 Y' l& u
//填充数据/ v- o" f: ~+ n" k; v+ F
for (int i=0;i<MAX_INVENTORY;i++)! D& y' f* V: s4 b
{1 c6 H! h, H$ K% @; o
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
' j" l5 N7 c! c0 r( }( P8 u if (!pItemElem)
) T9 y, v% {4 t1 t% W5 [) E) [" d" ] {
0 [& s. p" q* T* Y vItem.dwKind2 = 0xffffffff;$ r6 o: L1 x9 c
vItem.dwItemId = 0xffffffff;! h9 J. M* v" d' M5 t( a$ \
vItem.nIndex = i;
( i* d& J) g% Q6 p" i" W }else {
7 w7 a$ i# ?: R ItemProp* pProp = pItemElem->GetProp();
6 T$ Y& i# B1 O) I, O vItem.dwKind2 = pProp->dwItemKind2;
" v: N+ z2 x5 E: O+ J4 i. Z vItem.dwItemId = pItemElem->m_dwItemId;% U, S" W2 g% K( p! N% _+ H5 i
vItem.nIndex = i;( E7 u3 I( B! S" X# q# N5 b# t9 S2 t
}- H0 p( u2 h& h8 G! N4 e8 V
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);4 u2 m- C: G e5 A1 ~: {% N
}
& d( ~: h7 p$ h/ Z //////////////////////////////////////////////////////////////////////////- M6 N/ r0 y _4 u; l) V
sort(vItem.begin(),vItem.end());//排序# V+ T" K# a/ ]4 E7 c8 q6 W6 R
//////////////////////////////////////////////////////////////////////////
% \0 k7 F; d. z3 {8 A1 b5 } //交换& Z( d2 A8 N" \: m
for (size_t i=0;i<vItem.size();i++)
6 \$ h! d( O# Y! n- V$ Y; ^7 W {4 {3 s. j2 a9 X; S6 R, L+ P/ B
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);3 L) D2 D5 O3 z* L o3 c4 B* t f, w
pInvSort->Add(vItem.nIndex);
7 S) e# `7 {% z }
( Z6 D! d$ F: |0 g* @" h& j BYTE nDestPos = 0;
5 o# A7 F/ W* U, l: i/ e for (int i=0;i<MAX_INVENTORY;i++)7 a" V# K- z( A8 g- l7 Q$ C
{
, u& e/ K% Y( z7 O CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
8 G; `) A# h7 d if (pItemElem)
]1 b& Y% ~0 v {. a+ c$ C) c. q% H) |' c
if (IsUsingItem(pItemElem))
6 S b$ v+ Z/ t {
( P! g& N p; N9 C1 _ //这个位置无法放
1 ]: e. d. i& }1 {, B nDestPos++;, P8 k1 U; Z) ?( s: e( r4 P: G
}2 P8 t3 W+ C* I( W" ^# d8 q% s
}6 C5 w% Y' |3 h3 P, |
BYTE nSrc = pInvSort->GetItemSrc(i);# t$ F! t; {1 O3 `( }
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
" N# |! R, w |1 Z+ D4 X# Q if (pItemElem)$ @! Q2 ~: ^' ?1 P: O
{
! B& t9 W, v( A, Y# W; d if (IsUsingItem(pItemElem))
! q+ E' b2 K; I. w( @, M {
( W% S: i8 a$ q K; Z; H //这个道具无法移动,跳过 s) V) K7 [! ^5 \( I- q+ U
continue;! G' }1 ]: q/ b8 }
}
8 L6 ~/ v; k9 N4 N8 n }else{% l5 G1 U* @; D/ v" B; U4 Y2 z2 m
//空位置 不用动
: E! B. s8 R% Y continue;
: S! @9 f4 ?% U) Z$ a6 s }
5 X* z) T3 b( y B //////////////////////////////////////////////////////////////////////////* L: S6 }; \; F$ |% {' c
//开始移动7 e* J- K1 k5 {. y7 {* z+ S
if (nSrc == nDestPos)1 w% @2 _, p9 u, @: V# [1 y% J
{8 V7 {. P3 U3 j
//原地不动
/ E( j0 m( v6 f5 y nDestPos++;: I/ w. r1 X# a& t
continue;8 D; d1 S/ D9 g2 W! R" j) u1 t+ O
}
/ i( A6 E( N: @/ ?- { pInvSort->MoveItem(i,nDestPos);# `7 `9 r- }+ w6 r7 r
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
' X( W' C3 o1 Z j" z5 m Sleep(5);; E5 @9 B0 j- q! l- g+ K% R9 Z, I
//Error("移动 - %d->%d",nSrc,nDestPos);
: f7 U* `" Q& x; Q+ b* k nDestPos++;
8 t5 c& H' n# m3 ~! A }' d3 w7 x" u* g8 K6 F1 Z* {3 S
//取第一个元素的信息" E% ?) V% d% I- X" q) v' c+ ]
/*
0 m$ S, s: U& F3 p3 d/ `/ J if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
4 Q) ~: R& ], G$ S {
- C/ ]& ^/ J8 Z# }$ X. r; m) ~6 z7 | Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
( t6 l% \# u6 C* Z% B8 ^ g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);* c! A# W( k- |& [7 ]8 T8 k$ M
}
3 g/ E* E4 `) W. q# H, n+ { */
) T0 Q' b; Z7 J //////////////////////////////////////////////////////////////////////////
7 l( h' N& ]2 d2 f2 e5 j" N6 e break;
8 M B7 o7 @/ d6 p: p }
1 ~( U/ }, B* D! h$ V1 _1 g6 g } ]# a, g* b( Z8 t* I
}
- e8 L0 x* ~+ N9 l H2 p- rm_wndMenu.SetVisible(FALSE);/ I' Q+ y* X8 a6 N/ v
5 r* G6 @4 v" B) Y# T3 i$ v: @1 f--------------------------------------------------------------------------------------------------------
9 f% Q* Q! v" h2 P搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
* o, ]% Q9 s8 @4 y/ M$ e{, b( g9 u! S: a* M! ~+ H2 c
BaseMouseCursor();
2 f5 T# b9 G$ p- t}2 L# G- S# z* E/ j! X# Q G4 G `
在其下添加:& a' h A4 f9 ^( i9 q
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)! v" a7 n6 G! {, H" h: T
{
. i8 ?- ?% y) k2 |, L. X9 @m_wndMenu.DeleteAllMenu();4 d7 o" M; O K; _6 X0 y U* ~
m_wndMenu.CreateMenu(this);/ T! M! Y8 s* s1 V9 Q1 K, A( N2 o a
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
: F0 ?, E8 U5 p) @0 [. [- `
. C1 Q7 B; j4 p xif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
- |, N$ Y3 S& N$ I2 ~! Q{
) G: h. f% |# m5 X3 s //P以上级别才可以删除所有道具
, N3 {, k# I: U m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
' G2 n2 A; V) g' V( N' c}1 _ ` V) C! J" z- y6 ?/ p+ r5 Z
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
$ k4 ~6 c2 A$ Q2 Z; Km_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
5 ?0 [3 u# S7 c% P5 }, [' o Jm_wndMenu.SetFocus();
! J, A! E! B3 ?) z6 B5 [) u! M}
% H7 E9 O# M( k9 g9 J------------------------------------------------------------------------------------------------------------9 R0 L9 A: f6 j! f2 P1 T9 @+ T
*************************
" g( ]5 `3 H5 b2 G SWndField.h文件5 s, |* W" o6 G& ^7 J5 T5 c: o
*************************
9 R5 x0 E9 [/ C& p搜索:BOOL m_bReport;
7 x3 \+ V1 P( s* B其后添加:
- L- `4 k& y& p2 @8 X+ }CWndMenu m_wndMenu;
/ U& h: R* j2 B: X7 V搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);& e8 g5 L4 _, k6 S' N
其后添加:; G2 q, L( i" ?
virtual void OnRButtonUp(UINT nFlags, CPoint point);
4 Y) _( M: n! [/ }6 v$ A5 z% ?
h: _) \1 J% {: e6 f4 v
|
|