|
|
源文件中_Interface文件夹下WndField.cpp文件
. G1 i+ m6 ]. X1 f- v) V. o; g搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )5 e1 S0 s5 A# l, o: `
5 L3 D3 d; r3 y" o+ J# Y, m
struct sItem
( q% \* ^# O; w& I7 E{4 V8 w7 I4 m; P. w! I# d" j' @0 y
DWORD dwId;0 {; _4 o+ K* ?# D
DWORD dwKind2;
% r( n! t/ T( I: g6 g- MDWORD dwItemId;
) A- _' d" ^: U$ E1 K- G3 {. R( x4 @BYTE nIndex;
$ j) V& Z# U, `7 @- {5 b7 msItem(){
$ I6 l; `6 d, N4 G4 p3 d; p* T dwId = dwKind2 = dwItemId = nIndex = 0;
6 k& q8 R7 y" [. A: Z' Y}9 X8 _+ F, f" }. Q2 R5 R
bool operator < (const sItem p2)0 O& b) P$ |& h8 m8 P
{
. z7 u% [1 t* K8 c- i* l" C: Q if (dwKind2 == p2.dwKind2)2 a2 {7 `* d0 o* ^
{. G, V3 g' s# A
return dwItemId < p2.dwItemId;% Z0 p/ a" ]: ^* v* ?3 W) ^$ f4 X
}else{
& I" z' P" A) I1 |- M return dwKind2 < p2.dwKind2;
) @7 W \6 {4 b6 m- t; U. l }
* I. @1 t0 P; l$ c}8 x. |5 V6 V! e6 b, s
};
) G2 D6 _. [* f$ U3 L1 u, eclass CInventorySort
2 M U' O+ g! K: g; I: v{0 B {* I" _( H
public:
" D8 {6 H; h% p# sCInventorySort()
u; B" T& y, k) d6 m1 {7 V- t{
n/ [9 e( g. M/ X" u m_dwPos = 0;( W1 N+ O$ @( Z% K, Q" f
}2 t1 E# V: ~: K9 d! D
~CInventorySort(){}
# {) @' y6 ]8 s5 j4 Dprivate:
5 s; ?* ^) t3 osItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
- q& s1 D8 ]4 \4 nDWORD m_dwPos;
! y6 r# ?" a" B; v3 c- Epublic:
4 w3 c) R" F# H! t. z9 A8 pvoid Add(BYTE nIndex)
: J+ h; S. c. q. C- V{& z' n. r4 l: |' a5 S# H& A
if (m_dwPos >= MAX_INVENTORY)2 k5 p) T2 A% G) y
{
2 Y3 }0 @9 l1 Z k0 Y. b return;1 g2 P2 H# _1 b( P- j/ |6 v6 w
}& ^( D7 Y3 Q: X3 n: R
m_Item[m_dwPos].nIndex = nIndex;
$ `* |2 l) i& } m_Item[m_dwPos].dwId = m_dwPos;
b7 M; Y, e' r9 a. O1 ~* i m_dwPos++;7 f( C% t( D/ V2 P
}
I4 m0 y! P# f0 f! k1 H5 \* g. t8 ?BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
2 `+ }& L0 t6 [1 `{
0 Y9 F% r# L& N; d& r# G for (int i=0;i<MAX_INVENTORY;i++)
: ]' T0 p. T! B" q" t {
6 V3 Z9 a# ]6 u5 m3 ^" _ if (m_Item.dwId == dwId)
5 H3 j# x/ A% a6 t" V {$ l8 O; l( [5 u3 n$ b
return m_Item.nIndex;
' D2 O U: S( E }) `$ j% B/ r9 ]& n
}- q: N9 C6 d7 e8 t) B/ c, j M
return 255;
, t w$ f& ^' A" D) t7 l! ?8 X% g) a}
$ }# K9 z0 u- G* P" s9 W Yvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
# u# x# m v* g& m/ c" J* f{
) W/ p; {( t3 `# e, L- R( b BYTE nTmp = 0;
+ v N$ G, d4 _# X8 r# C, T bool bDest = false,bSrc = false;
, X4 V% G8 k; ?+ E+ c0 ~0 O% Q. k for (int i=0;i<MAX_INVENTORY;i++)
, l' J" y- G# c {# a- @4 A% g3 c# f; d% l, Q
if (dwSrcId == m_Item.dwId)
_% T- q$ _. u `- {1 \ {# J3 E3 P* [( p, D$ P4 a0 `3 D
//id相等 则 改变对应的dest和src4 d9 z h& h" c7 [1 P
nTmp = m_Item.nIndex;
! @8 B/ s" o* ~% J0 O3 b m_Item.nIndex = dest;
3 H" m9 g7 ?& D+ c6 j s9 X, z }2 r9 K' m4 t# s1 `; T2 ]' y. Y
}
4 f @ m& t- S" L5 U //临时数据保存完毕,交换开始8 v( G L; e7 |1 P j/ q3 C2 G
for (int i=0;i<MAX_INVENTORY;i++)
( j1 m, i9 I8 N- y {" [ h* D* r1 {4 U8 ^' G. J
if (dest == m_Item.nIndex). r4 |" B! W, L5 M4 ~/ c
{- q( t6 n, |8 I- |2 A
//id相等 则 改变对应的dest和src4 Q+ r5 |6 Z/ k7 Z
m_Item.nIndex = nTmp;, b2 K/ f, s6 o: X6 ?, S
}
+ \: r: g) y! V" U" _2 d! O }
7 U; i, \' D: \0 L6 Q7 a}
0 I/ @4 }8 Q" t9 V& i2 X};5 n2 |5 @' g6 U% p8 o7 j2 U0 ~
-------------------------------------------------------------------------% p' C. b e; U- X( Z! o( M
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )1 w, K9 B6 F. r
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);2 y/ f2 E1 d: X" n+ b+ {# m, u; `
紧靠其上添加:, `# D% g9 @+ x/ v
if( pWndBase == &m_wndMenu )2 C$ l+ D! e8 v' f! q/ N
{
, a+ r% {, M4 e d2 W* {. |1 x& A switch( nID )' E! U5 @' ?! m- B) A2 Z
{
' {. q- M( n! o' O# p* n; p case 2:: h2 u n+ H$ Z+ [9 M2 g
{* J2 |+ l. K1 f
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
. ^4 y: B# }$ i' i B+ N: I" M R if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
: G4 ], ~7 r5 Y3 E. Y" q {+ j$ `# Y+ T0 m) s+ K
break;
, O. W+ K! |1 s+ q: }8 ?% _ }' ~' |1 |: i; v3 q7 {" _- d- R
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)7 T: _# \; }( Y, T9 x6 K, d8 w* T
{
" R, W1 c: T5 H CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);# G0 h3 M% A) b% D+ F+ [9 l
if( !pItemElem )
, j5 V' t9 d' x( c' _8 H7 V8 T" w3 a continue;
& E) \. U9 X. U' t Z& y if(pItemElem->GetExtra() > 0)# T# D, n9 i! [- d" x2 I) `& L1 z8 @
continue;
% F0 o* K1 l$ Z1 `/ X7 b if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ( H& `% j% n8 C8 }& d& ~; q1 B
continue;
; |$ b6 j e" G if( g_pPlayer->IsUsing( pItemElem ) )! Z; s& T% T+ i2 ^0 [
continue;
2 L+ G7 [7 F C* T; M if( pItemElem->IsUndestructable() == TRUE )
2 y9 m- Y" S2 j) ]. L; E( g {, W3 N& M6 G6 G7 Q- C
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );$ z: X# e) e4 X" x
continue;
2 K* N! Z' y! l; L% Z$ A }
4 g2 |6 j- |" l$ M8 q g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
/ x- Y9 V1 g( u- {7 [; l5 T }
3 O9 @3 P- q0 l) @6 d" J break;# Y: X) I6 k1 n
}
: O2 b8 L: l# U" d. P1 w' @% M case 1:- p8 {+ h: g6 M; }2 K. e$ [: f
{
. U! i9 s) P: b5 [7 a3 u+ q //整理背包
/ Y% H/ L8 O+ u- d5 v //////////////////////////////////////////////////////////////////////////. ~* u% W1 G& s' U9 j; p* y
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );; y" ?9 J1 L. a) A9 ?: {
//////////////////////////////////////////////////////////////////////////7 c$ G' W1 e9 O: ?1 C& `( c
//////////////////////////////////////////////////////////////////////////
9 Z- _2 X; K7 ]4 U CInventorySort* pInvSort = new CInventorySort;& l1 ~$ q; v8 E- X+ s/ a
vector <sItem> vItem;
7 R/ X3 ~; z; R4 K; ?; B vItem.resize(MAX_INVENTORY);//初始化大小2 B" {1 Y' R, E& J" t P
//////////////////////////////////////////////////////////////////////////8 _. a7 i& s* C5 i& o3 O
//填充数据% O; j3 [& S7 u4 t# V+ j8 Y
for (int i=0;i<MAX_INVENTORY;i++)
3 y6 G4 y. P3 v- b {/ `7 ?4 G& m3 j# R2 [2 H* F5 z
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i); }( [2 ^! o+ T) h; \- K# I' w
if (!pItemElem)) n" ~+ B- ]' R: Q/ \ n- _. o* j
{2 k* \% I2 j' k
vItem.dwKind2 = 0xffffffff;
$ Q, K% X7 {0 o6 ?$ t$ | vItem.dwItemId = 0xffffffff;
0 m5 T6 s& X) x: F }. {5 g& i$ b' T vItem.nIndex = i;
0 A7 d) w% l# ^; r; | }else {( R- u4 K2 @! o8 Z% U) {4 W8 c3 S
ItemProp* pProp = pItemElem->GetProp();
/ k$ ^& Z: L" H" G* d) w vItem.dwKind2 = pProp->dwItemKind2;
; H' c5 o7 |+ V. ~% J: h vItem.dwItemId = pItemElem->m_dwItemId;
3 ]# Z* h. S* N8 @" O+ ^& U vItem.nIndex = i;2 v( B7 e, o. m
}8 C8 E$ \3 T- u
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);4 R- j- I5 E0 _# x* A9 {5 c
}5 K* ?" _! N: G, b. i
//////////////////////////////////////////////////////////////////////////
& H, I' n. ` w9 I4 s U" k sort(vItem.begin(),vItem.end());//排序
" ]! p! J$ E0 m //////////////////////////////////////////////////////////////////////////
@6 F, @$ Z( g$ ^, r H6 y0 ^5 k. `* }! d //交换+ j- c5 l0 }4 D* w9 M7 {9 H J
for (size_t i=0;i<vItem.size();i++)3 L7 k; G. l6 z+ x" c
{
+ x3 F2 [" N- I9 B+ C" t //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);9 [: A9 J7 K4 C7 N- e
pInvSort->Add(vItem.nIndex);! `6 b X, m( @6 \( R8 ]
} d$ x3 q3 F2 F+ L6 ?- B5 j
BYTE nDestPos = 0;
r/ V+ Q- L; L: X for (int i=0;i<MAX_INVENTORY;i++)
) n/ x$ Z3 V- u2 E5 W {& s# u0 K2 P1 J, J: G
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);4 a+ x9 }: Z# p+ @1 P* L7 n' G, L
if (pItemElem)
1 R4 m n. P( c- q {. I; x8 s, z5 ?9 Q& \/ j+ n3 X
if (IsUsingItem(pItemElem))1 M: A/ X# l W% R$ v8 D
{7 |" J- `# N% X# O; M, C
//这个位置无法放8 G/ [8 H! Q7 d7 w) c! _" V
nDestPos++;
, y. k( b0 W; b" b3 D5 m }
4 x5 I$ Z. I$ `# w% c6 | }
* R. `" w/ r* n- _1 `: E! ? BYTE nSrc = pInvSort->GetItemSrc(i);- _: k; y0 m8 p1 i
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);: }3 ]8 x' \' W
if (pItemElem)
( v; y6 ^- `5 |& x0 ], W/ d {
+ l: D( C) i; A, i3 [ if (IsUsingItem(pItemElem))- v# Y+ U/ C9 u! b) j9 W
{
. I% Y# C4 k% X$ t9 p& J0 n- F3 Q //这个道具无法移动,跳过
0 W" ]& [' O# }1 a, } continue;' u. ~5 X' I+ A/ S+ i* s
}
/ j1 F3 p2 b% u }else{( g/ d% H& v! _) N u
//空位置 不用动
# c" ]) [* E6 @ continue;2 A; x H5 h9 E
}6 h! q$ {6 K" G( N5 F. b3 g
//////////////////////////////////////////////////////////////////////////, q9 y6 h: V+ j' G6 \" z) u
//开始移动
# L! {- i( M1 q) z) G* |8 N if (nSrc == nDestPos)
% @, E2 f& M& T. b1 X {
+ _, e* o2 A6 {8 e //原地不动1 h3 {- B6 \# r) P- I* ~
nDestPos++;& Y/ ]$ S- b: d+ P
continue;6 S S$ \! m& l$ d# P: {
}
8 e2 a4 h4 K7 {! ]2 _& C& ` pInvSort->MoveItem(i,nDestPos);6 }( _$ N! V4 \$ V
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
6 J1 N- x# g) ~$ T3 \% e, v6 \; [# q& ` Sleep(5);
, ?" a8 R+ v5 t //Error("移动 - %d->%d",nSrc,nDestPos); Z- P* I$ \: _% P5 h7 l
nDestPos++;% U. k; q/ l0 k% U0 r# [! L
}1 y' I6 j( F2 ?% B' s! i1 O5 i
//取第一个元素的信息3 F- I% S f. c q1 h: U2 O3 e
/*
/ W" W2 F( W0 ^ if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)' l* R( c# g* r, N
{
( C0 k- V' N7 a5 f+ w5 W* n Error("Move - From:%d,To:%d",vItem[0].nIndex,x);% x4 f% |1 l* {2 S
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);7 u. z& {. Q) n0 h0 ]
}
# m& `# x& A6 |9 P */' _2 s1 J' k" R& @5 S3 B2 \
//////////////////////////////////////////////////////////////////////////
, ]2 ?8 f+ A; `' q Z break;
% y6 c- ~# a% w/ G } E) J! E$ I1 L1 T/ A: S
}
( I$ p, ^! B5 y$ W5 k; h" M}
) Z$ ?& N' C) Q% ]& Nm_wndMenu.SetVisible(FALSE);0 P2 u6 \5 D) C7 d% U' }' J" f
4 a: C y! j8 ^$ {& k$ u--------------------------------------------------------------------------------------------------------
7 U2 i+ E/ D$ c搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)) p& E* q7 P2 F
{
& x" S4 ~3 a; [BaseMouseCursor();
* B5 [3 h+ b( J- J: j" Y}
: l- ?. C) E' D6 S在其下添加:6 H* @" f( j, G; _; x" k( n2 W
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)- [; Z5 S8 j* R _$ w. a) A& U
{/ ]/ g q, p$ r5 h! H/ A9 b
m_wndMenu.DeleteAllMenu();3 g' _& P- t: c" g8 Q
m_wndMenu.CreateMenu(this);( ]) w4 t m4 y* a
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");- U& L5 y. p/ d8 G1 ^8 T
) p6 U2 {5 ?! x9 K8 Bif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))/ m B- m0 t/ M$ I; \, i# V
{
/ Z5 Z+ ~ L8 _( j; o //P以上级别才可以删除所有道具
$ X' t, M- E7 Z; a& h% x1 \7 X, | m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
- H9 \9 e+ j2 ? E+ d* {}; J5 w8 ?" [3 J+ p4 } G H
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );' t4 a/ P4 M; ~6 v
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );5 M0 `1 ?/ m+ h/ z8 x: z
m_wndMenu.SetFocus();0 B" W; _. P2 ?) j+ F2 ^
}' ?3 } j8 L3 d3 h4 T8 q# J* T% Z
------------------------------------------------------------------------------------------------------------7 r% n' S; V+ d& ~5 e& I3 m
*************************
+ O P; \! o8 I% oWndField.h文件
( F) F7 ~6 V9 v0 V1 Y1 Z9 u1 M*************************6 J7 A/ N% `8 w/ @0 g* U
搜索:BOOL m_bReport;3 g U& n/ b, S$ }
其后添加:- {- e/ X& S5 y
CWndMenu m_wndMenu;
9 S! [& y( e. r& S: i% D8 d) P搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);0 z: L' o- F; t, Z# D
其后添加:0 ]; ~( r$ f! g9 [1 x5 c$ D1 j {
virtual void OnRButtonUp(UINT nFlags, CPoint point);+ k2 X8 a; }% n: ^& v* y
. H" c. O1 A9 ?! Z
* D. Z- {; q) ?
|
|