|
|
源文件中_Interface文件夹下WndField.cpp文件# | [3 h) ?9 G5 b0 E
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
# I% _7 |( x2 o% Q: b9 o& K8 e8 d2 I0 ]: ]" R# K
struct sItem& L6 G+ \% P: [* A2 n/ Q" M1 h
{
* A. O7 p& F$ G4 p3 ZDWORD dwId;/ ?2 e; x; O/ F& e+ R
DWORD dwKind2;
% Z9 S$ `& y$ t/ E2 D, V- ]3 KDWORD dwItemId;, h: Z) Z) F) A' L4 e# [. i4 _
BYTE nIndex;# T$ T9 M4 r% I
sItem(){7 V0 l9 V( i* X& }$ }( }6 q' Y
dwId = dwKind2 = dwItemId = nIndex = 0;
( e5 K0 V- l( D7 z}
: c3 Y. z, R! T; x( @$ f5 M/ Ubool operator < (const sItem p2)( x- X! J3 c9 r& @1 d2 W2 b C; W4 X
{5 @* X& C4 K# j8 N' J# ^
if (dwKind2 == p2.dwKind2)
; M1 T& A, R; I; ~# ]! ~1 L {
+ T/ W. Q, p# u! B return dwItemId < p2.dwItemId;. R! F6 d) {& X A, O. V) X
}else{
. F8 J" H* |, B) H% I; d z return dwKind2 < p2.dwKind2;+ e% J( x/ H4 k2 I6 t
}( r, q s6 |. o
}3 A& [" Y+ u$ W( B+ x+ f
};4 |2 C6 \: k- Z- l
class CInventorySort6 K+ Q$ C: W' K: c2 L* D& r
{
4 J: o! \4 T$ y& J& d! c" T9 c/ T7 opublic:2 P& R" q% c, F, W: s/ `+ Y( N# A7 F
CInventorySort(), ^3 h+ o. b4 D2 B5 H
{
9 J' ^! `5 J) ]! U- a m_dwPos = 0;
" m8 b. i" Q+ u& C8 b, q}
$ d2 ~0 p" u. p& @% C! U( Y~CInventorySort(){}4 ^7 A, N. [! U4 ~
private:
' E3 E( t; z2 x* G& M. P( FsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
+ \7 S* G% r6 eDWORD m_dwPos;$ M8 o7 \' D$ s' H1 j
public:. [) O; A9 K. A2 o; @
void Add(BYTE nIndex)
' ^5 g6 l& n8 j$ a4 Z. Z. t$ q{; b- {4 P% t0 @: h! H" e& d
if (m_dwPos >= MAX_INVENTORY)0 ?1 U" H# Q. o2 z- C
{
7 e# @+ Q+ Y4 f5 F return;0 T1 T- \( O4 ^6 `* ]. z- p$ U' a
}1 h( n* J9 ?/ E4 m
m_Item[m_dwPos].nIndex = nIndex;9 R! ]+ h) F9 L$ {7 j4 ?
m_Item[m_dwPos].dwId = m_dwPos;8 Q* L! K, g7 L" j% j3 B# m
m_dwPos++;6 H9 ]8 |5 P, p" }" q6 ]1 \2 m
}) S. `% j$ F9 k% |
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列0 x1 F3 K2 P3 M/ S- R+ W
{
6 `4 n5 x$ \- x2 H$ ~ for (int i=0;i<MAX_INVENTORY;i++)
" B% @" a9 I7 I# S' c) I: e {
8 M3 p) `) P! a) [: ] if (m_Item.dwId == dwId)$ J) U, }% v( K9 M
{
+ X: h/ ]& O; Y+ I N return m_Item.nIndex;
$ E3 N' E) _5 j8 ^1 Y" Q& B }
) }, m8 T% ^, N( i) |) V }( `/ n: |; N0 |5 ?
return 255;
9 B! p+ U2 j6 i- f w}
9 G! {( ^% w! `/ {0 I5 ]void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
+ i7 |3 t0 j+ a5 K+ V$ K{
6 i4 C7 F2 Y* G! I8 J; | BYTE nTmp = 0;
/ v( `& s/ x r. d4 h) ~- r A bool bDest = false,bSrc = false;
5 H, t2 P, O/ X7 w2 t# k: H# X for (int i=0;i<MAX_INVENTORY;i++)
! I) g1 E$ W- a; ~: L. x% w& J" e) G {
7 S ~2 V _8 |- Q9 z if (dwSrcId == m_Item.dwId); W9 d- W' Q) L# r- |6 s4 N. ~1 X
{( v# s$ B, r9 X x* v# V
//id相等 则 改变对应的dest和src- `8 A3 t u8 z, j5 N" E3 W2 \
nTmp = m_Item.nIndex;
6 L4 R) E2 C3 j1 X6 S% Y+ X; o+ M m_Item.nIndex = dest;2 H4 X7 G) ~1 ~/ i, \1 w6 L2 l. r' W7 A
}
& E% b8 @7 T) _: D! L7 I }
! v; M$ s" A; t5 h# ?# ~6 C% X //临时数据保存完毕,交换开始' d7 v3 [' ]2 X7 e
for (int i=0;i<MAX_INVENTORY;i++)1 N/ a# t' T6 i( U0 V7 V- s0 j
{3 a# F) I8 A u' s& o1 u
if (dest == m_Item.nIndex)
: R" g W# e; a+ p) ^% B! y {$ k8 K8 R9 S" J6 X
//id相等 则 改变对应的dest和src
% F: J* [3 y4 B" r m_Item.nIndex = nTmp;$ P# M+ g: Z* @) t. F
}' l0 F# ^6 u; r- f! T
}4 }. W- b- M0 @" `! T
}
' j% m! m8 p6 G' O};4 ]6 v0 p8 N7 A
-------------------------------------------------------------------------
; \8 ^) C/ M" o; h: W依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
R/ X0 Y3 Z, K, x8 M2 D4 Z' }# E搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);3 X$ G4 M Y9 F
紧靠其上添加:- Y: {- {" H7 B0 P& F& |5 m
if( pWndBase == &m_wndMenu )
G5 u/ }7 S- P6 b: N2 F{9 ?$ d. r1 T3 n7 I; u# D8 p
switch( nID )4 ?3 i" s5 y. N8 }9 u7 @8 u h
{. s9 P7 K( K$ ^
case 2:
* o: D- Z9 u2 I, [2 E {1 Q+ F3 [7 ^, E- d
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);* S% ` X" v# w1 S# {/ D
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
+ V% j$ ~6 t( p. ? {/ r8 n! e, h( Z, x
break;
1 O; o+ E' a# U' D* [- Q, e" } }+ q, M! r# f1 M7 x3 U" n! o; L4 N
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)8 V1 h7 t# S, ~; `) y
{
6 A9 T8 b. k: m+ x5 f$ M1 l" y" l CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);" \. X0 y) \9 J/ O: @
if( !pItemElem )6 M% f7 W6 _& ~+ J# @
continue;' g8 u4 ~$ \ W- G% n7 |- d* J
if(pItemElem->GetExtra() > 0)1 S# \& m2 h; s3 h% p$ \, @
continue;
& Z1 Q0 m: u4 c& z if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
/ k. T; h3 [* _, } continue;
; e( }# l, a4 b) ^7 z if( g_pPlayer->IsUsing( pItemElem ) )! V1 @# n q) G9 ]* ^
continue;
' Q' @6 ?9 n/ T4 q3 ^2 j5 A if( pItemElem->IsUndestructable() == TRUE ). W! v( L( @( @
{
: d. M7 G, m" H# h0 O* w( V2 I1 U3 } g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );3 X `% ^3 W/ W& ~# E
continue;; A" D3 r2 `; P( G3 a$ @1 X
}" @: ]3 z$ \, ~+ a, v
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
- G# g! Y$ x7 n, @' E8 O }
0 ]9 @+ u9 E4 G' S! W break;
8 p9 ?$ p+ n; f3 z f# C }' q t- R! o2 e/ J2 L
case 1:- k! Y& a0 P, B
{- a2 i3 J5 O. R4 `0 K
//整理背包& F6 @3 N5 e* b3 {9 H N
//////////////////////////////////////////////////////////////////////////0 ~4 ?7 @/ ]- l0 U* C8 p z
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
8 N0 A% t @- y& W9 K$ ` /////////////////////////////////////////////////////////////////////////// Y4 N6 d, f% O6 a& [
//////////////////////////////////////////////////////////////////////////1 Q# w: K+ A* u0 J. [
CInventorySort* pInvSort = new CInventorySort;/ q1 c) u1 l& ^! J9 Q/ h
vector <sItem> vItem;
. ~$ Y2 W" J* T# b" m4 _. a vItem.resize(MAX_INVENTORY);//初始化大小5 Q# E( C- O/ b% N( y- V2 h0 d; O
//////////////////////////////////////////////////////////////////////////
7 z& V p# K0 Q3 X2 ? //填充数据; m+ X& b: @( s: Z( ]' V
for (int i=0;i<MAX_INVENTORY;i++), y2 Z+ G( I7 r1 o2 n- g; N! D
{- M2 l3 A( `5 a2 {
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);7 T7 T: m) o& t2 B3 l$ o
if (!pItemElem)
. ?4 f& `2 v( I2 F5 d2 @ {
0 @, ^# p1 A. c6 T8 ~/ T/ ` vItem.dwKind2 = 0xffffffff;
( r8 A& o3 ^1 w- z+ [& m% i7 o vItem.dwItemId = 0xffffffff;
- U5 \# l2 g% M8 }6 W vItem.nIndex = i;' ]' \1 g0 I9 d, p4 G1 y
}else {) s/ D$ d' n' ~5 @ R5 D; W
ItemProp* pProp = pItemElem->GetProp();
6 e7 m; B/ m! \1 k vItem.dwKind2 = pProp->dwItemKind2;2 v8 I9 h/ K R+ {0 L5 c9 ~/ I, ~
vItem.dwItemId = pItemElem->m_dwItemId;! H5 L0 H$ h6 J. B
vItem.nIndex = i;
# q( `' b; ^- `: W: e6 C$ c5 T- m }1 H( C: G2 A$ {8 J7 A( r
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);% p& m3 Q7 U4 m1 N5 s
}0 _* H O1 z/ P. L2 L
//////////////////////////////////////////////////////////////////////////) M! b5 R h# X; B+ q$ I1 O
sort(vItem.begin(),vItem.end());//排序
( e$ a; u; i9 p4 t t //////////////////////////////////////////////////////////////////////////1 T7 @' \. K( K
//交换, ^& E$ R8 g1 y8 t. [7 g
for (size_t i=0;i<vItem.size();i++)
- K+ l: ]* D4 [* F {
3 t8 R( u p- @: q //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
: H7 `% w( W: E6 A pInvSort->Add(vItem.nIndex);) l9 ^) n4 ]" U
}
" e5 q" n H- E0 | }" X5 U) ?) h BYTE nDestPos = 0;) Q$ @- r2 T$ t7 Q7 m
for (int i=0;i<MAX_INVENTORY;i++)
" Y) O1 @, T* v9 P' M$ h* n {( G- z* }0 I% p! S7 v
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
' [. w' ]: L8 L* N if (pItemElem)4 T1 Q0 ^6 Y1 v' b* U
{+ l, _4 q- X0 x
if (IsUsingItem(pItemElem))
" m% t0 A8 b5 T* x* _3 G" g N {
+ n' E& c- b$ A/ P) Y' A //这个位置无法放
4 {& _; @ \+ |3 \) f( ?) z nDestPos++;: E- m% V j+ ~) F7 @4 x+ K V
}& O# E0 ?4 @& O3 c2 J3 b" h7 A
}3 K! `! M6 G6 N# G1 L1 t1 q3 b
BYTE nSrc = pInvSort->GetItemSrc(i);
' i, k& t# g: [3 u; l: j pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
1 c! `3 D4 m8 l& g if (pItemElem)5 y. i7 a% B- ?4 j. [+ I3 p
{9 J( ]6 Y1 q/ t) e
if (IsUsingItem(pItemElem))
% ?4 h4 K& t N0 g! c, t+ e4 n4 S {
! ?* y4 `$ b$ V& v1 x& l4 e& g //这个道具无法移动,跳过3 R4 F) K0 C- ?+ U) K
continue;
# F3 G* W& {: @ }
8 y; T6 k3 b/ \. f$ I6 g5 s" O# g# R }else{
6 i! a( B8 y# F y9 l2 k //空位置 不用动 H( w( Z3 O) v- U% @2 X
continue;) j5 [$ J3 t: n, p: F- X# A& }9 v1 ~
}& ]; c& [5 z: s6 t8 I
//////////////////////////////////////////////////////////////////////////
* D) g4 P% T0 W* r //开始移动5 q H! n$ c( ?5 E- E3 m4 T8 V
if (nSrc == nDestPos)
2 n4 z1 F# h/ T7 k. C* ?8 j {
" h8 \( T8 S( N x //原地不动" S, D, V, s3 V. |6 ^& J
nDestPos++;
: ~/ s+ e4 g4 v! Q) K# f% q continue;
8 w* U0 m3 P6 L o ^/ Y& K7 N }: W, f. T8 i: C7 U$ @/ H
pInvSort->MoveItem(i,nDestPos);6 M8 E: i4 l- r9 x2 B1 d, F
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
: l5 b& R7 x8 G$ [' X) W5 r Sleep(5);
3 r# P' y1 x# H D' ` //Error("移动 - %d->%d",nSrc,nDestPos);
, O! v; b, W% S7 B+ E& t" a! u/ F nDestPos++;# a$ z! e& e7 {2 e7 m6 l
}8 m7 `- Z. r3 u g/ }1 G
//取第一个元素的信息
' \! o) t a- P6 f" [ /*0 M2 U i/ n8 |3 b; G7 y& A
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
( g8 W/ t' Q) ]9 C0 X5 D+ Q. a {7 Y4 U$ \ @; x: R$ |. I( v
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);# u8 x7 r8 Z$ V! M# k
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);& ?4 ^; S8 D# n) ?, }+ N
}
9 T6 Q7 w; _, ]. Y0 A" i */
" f, J# I5 c4 H8 v //////////////////////////////////////////////////////////////////////////
" }) o3 D" d; P+ K& J. v break;
, ]( Z2 I( e$ k: m% r' O4 H( ~( c$ k }7 U3 N) F/ w S. y z+ u
}
+ d% P/ V) e) y) w5 U}
h5 B, g3 n5 H% \4 H! S' Rm_wndMenu.SetVisible(FALSE);/ D! c1 w% m+ Y+ V9 A6 l, `
* I% q4 {" Y! x! K" u& C' _
--------------------------------------------------------------------------------------------------------
) q4 q( Z* {( ]2 c9 |- U; Q搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
8 q& F; N- Q$ @) N* t ^3 b{
3 h, Z9 P$ V- M; i/ VBaseMouseCursor();. e% q! ] {4 k6 F$ {! ^/ l
}
9 x) A2 I9 p h' |在其下添加:3 [( y% c/ Y1 \
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
7 G: T7 ]# ^" ]% p, ?" `+ ~& s4 p7 a{
1 ^: @. E1 o! km_wndMenu.DeleteAllMenu();, q% X, l$ T& m) j) @
m_wndMenu.CreateMenu(this);
8 S. J j" X$ ?! Z6 Bm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");0 Q8 y/ Z1 Z4 d9 ~7 f8 W
+ M* C( U2 D9 I. I+ j$ k
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
& v$ y' b! ]5 I* B) s& n{
! n8 U1 O/ g3 \$ m& A //P以上级别才可以删除所有道具8 t6 w) d+ ?$ B! \1 m3 N; L
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
6 n+ A& d! I! y0 L}3 b0 u; l; i. |/ I1 h, o! [
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );% Z2 _% I$ a \& g5 Y+ \# v3 g; C
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );: M) v) ^/ V/ G$ O0 i
m_wndMenu.SetFocus();
" |; C( I6 w2 K" {$ ?1 V}
& A( I* ~# k; }; w- g' ^# [0 X3 t------------------------------------------------------------------------------------------------------------
# o- H" ^+ n# Z' e7 ~*************************
9 D1 V. ?( l# O$ Z* O" G8 LWndField.h文件9 `& z) a0 o( Y
*************************
& @6 q; I; u3 d W9 C$ v% c搜索:BOOL m_bReport;
& k3 m& O, i! k* O其后添加:
6 p2 l, \! V$ {CWndMenu m_wndMenu;
7 ~8 h. f: Y9 T) s+ \搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
9 R- k+ |: ]2 j. A: r9 P$ u其后添加:) S. z* f" }5 M+ l1 s
virtual void OnRButtonUp(UINT nFlags, CPoint point);
# }, x V- |0 R! w8 Z- ]
$ y. `/ W! v }, U% A+ b9 q0 B' c& Y: R. `4 m2 E6 S# R
|
|