|
|
源文件中_Interface文件夹下WndField.cpp文件3 n& m9 M: ~! e7 M% q2 @
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )# H, {3 h7 ?! `2 q; G1 y' B: C R
b ~; b- B' D% T7 }# pstruct sItem
& i% V, z. X! E* M% O{
* u, w2 T. m# nDWORD dwId;. X2 Z7 _1 v Q
DWORD dwKind2;; y- U) D* |! O
DWORD dwItemId;
0 i5 U- y6 g) T' y/ MBYTE nIndex;
y" G: a: O# a/ G }sItem(){1 m3 ~' r" R2 Z- S3 d
dwId = dwKind2 = dwItemId = nIndex = 0;* L2 x* q* Z1 h' y3 b2 A
}
) v# Q% M4 v! Rbool operator < (const sItem p2)
! ?# C/ v& C; w; j/ D{# E& L! y9 O4 s$ u. ?
if (dwKind2 == p2.dwKind2)
# L: k. @( W9 {. f {5 l* L; q3 H* \& |. z/ [' z
return dwItemId < p2.dwItemId;
3 c) [7 x) Q' q) Q4 f5 k }else{
A) \0 i/ c8 r, Q8 E9 K1 ` return dwKind2 < p2.dwKind2;- V* ]' `, @0 b. W6 e: Z
}$ T' g% w; Z0 J, {; o9 K- s
}
; P# Z- j8 c) V) K9 s};
' Q/ c$ q8 ?. q2 ]7 ~class CInventorySort
. C6 o* M2 A8 W# I{9 W" e/ \3 ~) a$ f' h* @+ m
public:( l/ s7 N* Y {1 `2 N* P- }* x2 T. X
CInventorySort()
0 I5 ?' W J: g+ h{
1 }: D& w# Y% `, S/ P: O4 I% r m_dwPos = 0;' s/ H) j7 a- q s5 _8 x
}
' J L$ J0 r1 u$ v( c% R- t~CInventorySort(){}
6 S m1 o9 P9 J( x- H4 Eprivate:& h* [- X) b4 t) s) T! U9 v
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
. w- ?% {7 Y" ^7 ?4 T5 o, QDWORD m_dwPos;
+ Y9 o* g: |1 `$ R) @ fpublic:: d8 S% U# A& L/ y: F5 |7 B" L
void Add(BYTE nIndex)
/ o2 E& Y+ S! @/ L! I- r" w$ A3 {{
5 u7 r5 t% x; K3 `8 z3 @, G Y if (m_dwPos >= MAX_INVENTORY)# ]$ V* b) S7 R2 V8 ^2 e
{/ {$ r5 u. m% g6 w9 ]
return;
! G; p6 q G+ o- m& n, k }& x& T+ Z/ V7 L
m_Item[m_dwPos].nIndex = nIndex;
" |7 {% U5 z# n m_Item[m_dwPos].dwId = m_dwPos;9 q, z9 B# Z9 T5 u y/ d5 @
m_dwPos++;
" |; k& H9 i g$ u4 L} o4 H- o! t% ^# o" |: v
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列8 a. k9 v0 H7 t. u8 M& V" e
{
% f. ?0 c. p4 ^7 T( H: Y9 x( ? for (int i=0;i<MAX_INVENTORY;i++)
: U$ w0 d# g1 _5 S% W {# M4 l9 _9 D# |6 I5 M
if (m_Item.dwId == dwId)& i; q4 @- J1 s9 o, h
{
5 w x2 h4 @# h5 d$ W return m_Item.nIndex;5 |7 f2 a6 Z8 C- s7 S6 F
}
% c: x. @1 @# q7 p* A: e }
" R. A! o7 j& D return 255;
% k3 ?/ f# z; n- q}
{1 z% E! I, Qvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置2 k! q6 h& R% c4 U7 ]& x, U7 b$ g5 S
{
Y. g. r' Z R k- d BYTE nTmp = 0;2 K& d& f$ W6 [9 z
bool bDest = false,bSrc = false;
0 d( o0 c# Y# W1 {& Y5 ~ for (int i=0;i<MAX_INVENTORY;i++)
$ c% M4 i8 w1 T ?' Q' z { ?6 r# o% N& j. C: i( ? @: ?
if (dwSrcId == m_Item.dwId)
* Y- X4 A. R$ r# v- G. ] {
( q$ [8 J' e" C3 j" V; z y5 u! s //id相等 则 改变对应的dest和src
' H0 E* L+ F- h7 N* j9 z4 g nTmp = m_Item.nIndex;& e& ~/ @1 _/ u v7 X
m_Item.nIndex = dest;
$ Q+ W, V# r) q; i, g* O5 t }, s0 e& k. V7 j( N3 i
}! R0 J* Y' X, g/ |
//临时数据保存完毕,交换开始
& O! S" H* B& K0 C* U! v for (int i=0;i<MAX_INVENTORY;i++)" a( E( \" N; l6 L" M% Q2 T, S; L
{8 f# s% \$ L e7 q) w. c1 Q
if (dest == m_Item.nIndex)
* ~, @! M& } k9 M {4 M9 M% ^" P! e6 [+ y5 _* ^
//id相等 则 改变对应的dest和src
. p3 y3 x$ b4 T: D m_Item.nIndex = nTmp;
. |7 K5 J0 x8 E$ J }
$ c" b5 C2 P% b* L8 g }
" ` d# j D9 [8 M9 ~}% E- e5 `& S' a" y/ L# h
};
. m7 L4 P! X5 ? B! a4 x0 l-------------------------------------------------------------------------. i1 J% } G" g0 W. h2 |
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )4 _: P2 s; p7 w& w: `4 l+ D
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);2 i ~; r5 P" T- ?. p
紧靠其上添加:9 I+ t3 ]+ B/ P8 A/ m/ h
if( pWndBase == &m_wndMenu )
' S' h |% ~6 [$ w* q! o{
/ m; Z+ p0 N2 {! S0 M% A8 B& B2 Y2 _ switch( nID ), R6 B( j: d% y( S3 [9 X
{
+ h1 ~$ l2 a* Z! C7 | case 2:
2 Q. X1 F2 f$ Y; N3 _ {2 ]$ `8 \ x7 U4 P$ e
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);( B# v0 I% P. S$ M4 O- D8 C& C9 k
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
$ p8 s7 o# E' i1 r0 F$ ]5 n {
9 p4 X; l: b7 ^$ |# S# y1 x break;
5 ?$ d' D/ j7 F! {, U2 E2 l; ` }( N/ s1 A- G+ a" `9 v3 W2 B3 u# N5 s' g
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
: w& X) m- A' M {
M: }8 R9 ~% I# }- O5 a CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);! R9 |4 R: R- Y! u. r' M0 b. n2 S5 z
if( !pItemElem )* C/ \) A1 p6 j9 P) W
continue;
; q7 C2 X, @3 U9 u& r if(pItemElem->GetExtra() > 0)* J# d2 q9 E' E: m* T3 w* B
continue;
( S) f V: F" z7 G d5 X1 q( H) X if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 6 c5 W) W0 z5 k0 A4 S
continue;) B0 v8 U1 N+ P- d7 Q& ^6 d3 t
if( g_pPlayer->IsUsing( pItemElem ) )8 [/ ?+ o' h) f5 S& n
continue;
/ q: x, c4 W: X* g. \ if( pItemElem->IsUndestructable() == TRUE )
, w1 [# z/ D7 h, m6 c! E0 Q3 I {5 w% |3 V3 X% A( t2 \2 n
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
]; T9 W2 i' f5 X- `" } continue;
2 O" K2 ^* f9 o- N }5 { |/ q _7 S. ~8 {1 h% y9 z- ~
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);) |1 m, r% W5 A# A8 O! @) C+ n* {! x
}
8 P8 `2 V5 Y" n6 h# I# H break;
/ j i$ h% x4 J- g }# w0 w9 J5 @& t1 W* X1 Z3 D
case 1:* f0 u2 x9 F) n: ~2 R& f' u4 A Q4 G
{; A, {4 W- L7 \, Y; ?
//整理背包
5 H( D2 N7 }+ f8 \; A //////////////////////////////////////////////////////////////////////////" _/ G7 g# _7 ^0 J4 F) Y
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
- C# m# c. c& I1 |# u1 Q/ x //////////////////////////////////////////////////////////////////////////. j# Q- W) D! ]
////////////////////////////////////////////////////////////////////////// |# h+ b0 w$ c& ]' V* r& C
CInventorySort* pInvSort = new CInventorySort;
" g, Q& Y6 v9 A1 h: X: | vector <sItem> vItem;
5 w" L7 \- X! U) R" B0 R4 T vItem.resize(MAX_INVENTORY);//初始化大小; Q% A- R+ \6 A/ J$ n
//////////////////////////////////////////////////////////////////////////2 `' D* l1 W2 O$ u! ]
//填充数据
/ x9 c' a A% y& d3 }: k for (int i=0;i<MAX_INVENTORY;i++)7 N0 O8 ?% m& y4 \, K% `
{
: h v( N6 X# D: c0 ` CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
0 E* n! L5 @: T( s D8 p if (!pItemElem)
7 s. i; S4 D J& ~/ \- q {7 t) G1 U7 v8 ?, } }" g: A
vItem.dwKind2 = 0xffffffff;
4 |, Y0 U+ W a) Z vItem.dwItemId = 0xffffffff;) A; r& f8 B3 T, H; U" F
vItem.nIndex = i;
0 C7 u/ {8 w3 @6 k5 r }else {
2 G) a& p' A2 ~0 r ItemProp* pProp = pItemElem->GetProp();% ^7 Z' I2 [# ^* J4 i2 t
vItem.dwKind2 = pProp->dwItemKind2;
6 q4 a* S* O* w# f/ ^1 C vItem.dwItemId = pItemElem->m_dwItemId;
# g2 ~/ N, ]& k Z* S7 T8 [ vItem.nIndex = i;
5 F- \* ^9 q$ g% W) ]( z) R }
5 A* J- f3 H8 |6 L: z //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
+ M3 E, Y* K( H1 d8 M/ Y" l }0 ]9 n: A* z+ |: }# ]
//////////////////////////////////////////////////////////////////////////
) k! L6 n( e! P, ]- |; I sort(vItem.begin(),vItem.end());//排序* ?6 u0 S( ]2 F( J* M" @
//////////////////////////////////////////////////////////////////////////
$ P, D" w6 p+ C7 Z //交换
7 V$ G' J2 a0 ?, M+ } for (size_t i=0;i<vItem.size();i++)8 @4 T5 |* K5 t! L1 ?
{( Y+ ?6 H1 H5 Q
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);( |9 z# r, q d+ e
pInvSort->Add(vItem.nIndex);
9 F- N0 U& I( p }
7 E) ~1 E3 |/ N i& {0 S) g; A BYTE nDestPos = 0;
4 H" K3 n5 U$ `! C% P7 C5 c for (int i=0;i<MAX_INVENTORY;i++)
0 { P4 @; }& y3 B {
2 }: P9 Q; x9 Y CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);* L+ @8 }/ D3 _
if (pItemElem)
' Q- X: d# v" P3 [! \' k {/ |8 H( ?) k2 q. l# k
if (IsUsingItem(pItemElem))5 _. X5 J! T% r0 E# }: [% M! W) i
{
, X' m4 m4 Y; D; m5 m( a //这个位置无法放
8 _: Q T/ j! \! K1 p7 [8 _ nDestPos++;
- ?! k, u9 N/ [. v5 o( P2 J5 `- W }' }0 U$ C n) J$ L3 P* A/ c* J
}$ N: X# B8 `# R" x$ d
BYTE nSrc = pInvSort->GetItemSrc(i);
2 H6 m, f+ ^! F, S" E3 @. [2 s2 X% e pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);, d u5 A$ a- a$ H5 f; B7 o% P q5 {+ t
if (pItemElem)
3 }: B J5 H1 V; T- C6 t {: e8 T. [6 \8 C/ R) p0 c
if (IsUsingItem(pItemElem))
* ]8 I* Z1 Y0 E {* W; }% H9 j" b/ d3 S- c
//这个道具无法移动,跳过( x4 V" I" X+ J! q0 D) I1 y8 c6 a
continue;( P# ~& d/ G' y9 O6 Z
}) B8 y# a5 v7 o' D; Z" k
}else{
" b) J4 r2 r% Y+ x$ Y //空位置 不用动- [* j b8 u6 N
continue;
) {; O& ?! j! s# @; ^ }$ ]3 Q" @" v3 p
//////////////////////////////////////////////////////////////////////////
+ y# ]4 a, T$ _) e% i //开始移动
/ V& k' X( K4 k/ V# L if (nSrc == nDestPos)
& K$ k( n/ d* t" R" I- a6 ^. G {8 c5 B1 W B3 w5 u
//原地不动4 P% L- b7 y+ [; A
nDestPos++;
1 R9 w- x. t R9 n! { continue;
* X( b' o9 C4 }- w6 _' ] }
% _1 k8 w0 ?0 X5 g9 J: I pInvSort->MoveItem(i,nDestPos);+ `1 x! `. L z( i) A/ o9 e
g_DPlay.SendMoveItem(0,nSrc,nDestPos);# Q( ?* k0 j5 E: P6 i" Z! S% Z
Sleep(5);+ p2 H, K y+ U) C h
//Error("移动 - %d->%d",nSrc,nDestPos);8 E9 x/ w0 W1 |" t; p
nDestPos++;
' O9 j1 g+ H2 a m }
" _1 D$ W; u* h) k8 a$ ~ //取第一个元素的信息
* N7 ? {- A! D7 c /*) N* n7 e* @8 I; t. c3 O
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff): |0 z1 @! Z f$ p/ p( t
{7 T% q8 V5 h& T8 y8 q
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);% ]" g, a) n9 F! x; M, C
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);0 v; t; r. W# m& C9 b2 m# S8 m
}# V, k9 T! @2 g
*/+ p# f2 K2 ?9 c) d: f8 M
//////////////////////////////////////////////////////////////////////////
|: T9 y- Z# C* ~9 D break;
- Z& N" M, C) m( b, H; c9 k4 G }
e# M( j4 t# h } . y2 ^# W$ z8 j& ^8 s1 |
}
8 H$ u5 E2 n. x. m; U7 U3 w+ G9 B" Wm_wndMenu.SetVisible(FALSE);
$ n9 U! E0 f- [8 A2 X! E/ \' O6 i+ E* [( ]3 ]% V+ H5 O, k
--------------------------------------------------------------------------------------------------------
' n* ?' `7 `/ ^$ x# _搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)# a7 j, }" S: W% t2 y; ]
{+ w& G9 W0 x3 N6 N" [
BaseMouseCursor();" d: Q7 C# i4 X6 o' y. b, I/ B& |
}
- A$ J: }3 c; R在其下添加:6 o3 `, k1 _5 W* M% w
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
0 [6 \ M7 g3 l. N' w{
y/ y1 C$ ^9 M B! j: x5 k+ Zm_wndMenu.DeleteAllMenu(); B l* J& D% w# J, W5 r2 {
m_wndMenu.CreateMenu(this);
2 }) F# L& l; N* {9 R1 _m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");: x* _$ Y1 b% z. h# l
# T6 |: B$ Q# w9 N
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
! Y2 |5 v) M7 P* _: {* q& N7 ]% L{6 M9 S+ Q& m r6 ^
//P以上级别才可以删除所有道具3 p2 _0 H$ T7 {3 m% P
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
, [+ g* P6 F4 w& c& w! N}
& A0 `4 }- {. W1 t/ ~1 ^1 Fm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
. _( Y* [1 w; J, e" Em_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );3 j1 p3 O: i! w$ A; ]4 |% S+ m
m_wndMenu.SetFocus();7 f0 r' M" e6 t+ ~
}
4 v& `$ w" D7 p( }6 }9 a! h% I! ?------------------------------------------------------------------------------------------------------------; l9 y, {* I! g1 s
*************************
, R7 t. y" f" Q- l9 FWndField.h文件
* x( d/ y6 v, y/ l. P( D' ]0 r*************************
; \% `/ W( ]% W搜索:BOOL m_bReport;
% T7 V9 d. I$ R( x5 n其后添加:7 D1 |% a& _) M- \
CWndMenu m_wndMenu;1 R) b2 S2 U7 |0 I3 Y3 h4 ]+ M( _
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);2 J; w& a5 ~: U6 r: r# A
其后添加:' D# p3 @% \& O) ]2 T
virtual void OnRButtonUp(UINT nFlags, CPoint point);
: p; }( ^3 P- P6 _ g' b f/ h/ G9 \* a$ p8 ^7 q5 A
4 Y, S0 ?! b7 L: x% q+ `
|
|