|
|
源文件中_Interface文件夹下WndField.cpp文件2 Q* W' j8 q- b8 k; i7 x7 H* n1 V$ [
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
; ]' N8 B2 P) ~9 k3 r; l! D9 L, n9 w: A
struct sItem% g6 X) r5 p1 _! ?" ~( q. W
{
' d9 @ S* N9 X4 b% IDWORD dwId;* z6 v9 Y) h% j6 a& `
DWORD dwKind2;7 n" C0 g& p. Q! f: p1 Z" P
DWORD dwItemId;& m' k, N' D& I% |, |
BYTE nIndex;
8 f8 D& L$ x# a: U ^$ z" K7 B6 YsItem(){; O! ^# u* \5 y1 Y* u* l: D
dwId = dwKind2 = dwItemId = nIndex = 0;
- J7 B- p x% C9 d}. W& Q+ ~$ m. u! s C, |+ s
bool operator < (const sItem p2)6 h$ ^2 V* q. |4 b8 i) P$ P
{2 _( {6 B, t e, r( Q1 v
if (dwKind2 == p2.dwKind2); r# \$ n- u0 _
{
! b) Y0 P% `: I+ i4 n& S return dwItemId < p2.dwItemId;
* E- t, K) {. c' m }else{$ f9 _# @$ e: V. D9 W0 R2 w- U
return dwKind2 < p2.dwKind2;) ^" [5 I* q& j: J- o% v
}
7 p( r3 y! ?# p. G% G}0 i/ o4 v' k5 R9 i: |, \
};
) q& r$ m O8 Z: ^4 N* }" |9 Lclass CInventorySort
" t, k: q: V# g/ v6 ?& j# h% j{% O+ N7 h. r; w0 e8 r9 Z; `2 h
public:- I/ y- W1 M p5 ?' q
CInventorySort()
/ K9 g9 {, `, @& D/ l( X& `) l' F" T{- K) V, Z3 H: K6 ]7 f3 N% p
m_dwPos = 0;: ^( U; c9 o7 V& j' ` w" V. s
}
; _' D( I" _1 L o* L. W; E9 E~CInventorySort(){}
8 D* \6 M- N" z2 M' T/ nprivate:
b$ e0 B7 p- g0 k" ]sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息( c# y2 {& l! ~+ @" S
DWORD m_dwPos;
/ {) @ ~5 }0 O4 `! R# u4 e, k0 rpublic:9 R9 m) }0 }7 e1 _* D
void Add(BYTE nIndex)
) s3 g& ]) _, m( l* m{
, w$ H" v7 M+ k. K+ i( R/ w if (m_dwPos >= MAX_INVENTORY)
' z, Z. N; }% }! c {
4 V* z8 p. U8 Y$ l return;
1 V3 N! n# V2 F; C }. a7 o, E5 C7 I" L4 _" f
m_Item[m_dwPos].nIndex = nIndex;
/ n- c4 R. O2 z% l5 ?, j+ j0 W/ Y m_Item[m_dwPos].dwId = m_dwPos; i0 b: e! ?2 F {
m_dwPos++;7 |! K( b# T0 l) d7 g
}4 r) s! ?0 S: ~$ d3 \! ?8 O* D
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列7 {0 Q* R5 \% P: ^, r: O/ i2 I x# ^
{
- z! G) l4 Q0 a/ S8 f7 ]) { for (int i=0;i<MAX_INVENTORY;i++)
# Y( D3 a0 e5 d, a* I$ G {
* i, H% v& b9 _; b) O if (m_Item.dwId == dwId)
; G% }& e9 J" n {$ i; B$ V+ t% j6 c. R
return m_Item.nIndex;7 d- b' r1 k( T3 ^% J9 I3 G% K
}
" M1 d4 s& h6 H# c. x }
8 Q/ _* }! f+ O return 255;' t& V6 l% p1 B; P. z; E" S5 R. V
}
" H; f) k; O% G O/ \- evoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置9 Z+ ~4 ?: n( F& R# X
{7 t: f9 @6 }! B+ |( H. J4 C1 w
BYTE nTmp = 0;, g9 P$ A$ r/ G8 N' J1 G: U5 W( {
bool bDest = false,bSrc = false;
4 s. t' D9 h7 C u" v2 C. j for (int i=0;i<MAX_INVENTORY;i++)5 f! m% J# {. F8 k: S) |0 c2 N- |
{( ^8 p4 g) J& l$ A
if (dwSrcId == m_Item.dwId)* m/ s/ T4 E# H- K
{) i1 e- D( b2 z5 G3 l
//id相等 则 改变对应的dest和src4 V2 ?1 L& R! g7 ~! O
nTmp = m_Item.nIndex;4 ]' Y# X4 q3 h6 q
m_Item.nIndex = dest;# y; C$ C9 C' o0 j% F' E8 W: D
}) N) _" a9 D3 A5 L4 h0 n9 l1 c; S- l
}
; j n; T! A, K2 E! R //临时数据保存完毕,交换开始
5 u9 L! j5 X: \' A. k6 ^ for (int i=0;i<MAX_INVENTORY;i++)
) ?- l. ?1 I! ~4 X5 K8 ^ {% \, u e( O4 {/ ~* K
if (dest == m_Item.nIndex)5 T4 t' b! O% ^# l+ v a8 S Z
{
% ]+ _' _, ^8 \) a' j \8 S //id相等 则 改变对应的dest和src, ]5 I8 I8 d" v
m_Item.nIndex = nTmp;; [% Y7 ]) l, r. C' ]- {: ~
}6 e1 y# B/ C2 m- b) ^
}9 `) n9 b' s! J0 ~6 j
}
. y- ?. V y8 j};
* M# v5 k/ R# L( l- w-------------------------------------------------------------------------
" r7 [# @! z5 m: j$ B2 m: e% S依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
t# V' c3 F+ A2 H搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
( v% p6 h/ B3 r7 ?7 R4 q7 |" q, _紧靠其上添加:
, Y8 P( P% f$ q: Z( y5 N: Oif( pWndBase == &m_wndMenu ) [' ^% u6 d( h9 d% v$ W! a
{
% X6 K# d+ {1 F switch( nID )
$ S* Y r. Y" F4 c* `6 Z1 }3 ] {
& T& P8 \$ I" r& J$ u# ^- B case 2:$ G9 z& {- r4 _; N/ L: X R
{' c4 j6 `. g6 T) c0 V' l' Y
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
W' G( T; b+ w6 `! D if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
; r% \' {4 F4 r0 `) ?' [ {
$ u6 q# ?$ l+ Z. f4 R- ^ break;
2 O" g/ k, C( R3 I" G }
. a) ?! m+ G+ Z( _ for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++). A4 O \: v% F4 \! v! H# U: m
{
+ k3 H0 J( ~0 G9 G; `" K, _0 e7 Q CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i); A; C1 a, @& t# }9 n W8 W
if( !pItemElem )
) Q" I/ `) v3 g+ |, [" _+ I& p* D0 K continue;
1 V/ ^ r( W; ?4 ~) s5 U( W* Y if(pItemElem->GetExtra() > 0)
9 p% u/ o. L6 U( b continue;
+ i0 j# S) i; G if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
! v |5 N! y0 R( X9 D& z- X7 h continue;; O# d" K4 J8 g4 L! b
if( g_pPlayer->IsUsing( pItemElem ) )3 |+ a2 M& Q Y
continue;# @, N/ M* H9 i0 c7 P0 a
if( pItemElem->IsUndestructable() == TRUE )% Y1 |& M' z6 t/ f- X. Z
{
/ T- ~% s: K1 e; I g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );, }' ?$ [3 g% G$ U
continue;! `2 Z0 Y( y4 M2 h
}
' E8 Y- \/ @9 f: H g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
* Z; f6 l2 N& {# V }& N) C( { `0 V" [
break;
& g' }" G( \& G }
, ~' I* k( r/ \7 `/ T case 1:+ r4 E9 Q$ F$ V' z/ }
{/ A1 d- ?5 F3 X2 ^
//整理背包
) \/ q" d2 S! R8 n, Y2 H, |5 B0 v //////////////////////////////////////////////////////////////////////////% I5 [0 X8 S8 h
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
% c$ y+ `3 w7 B5 f. i% d //////////////////////////////////////////////////////////////////////////
5 A. _3 k7 L# {$ X6 j //////////////////////////////////////////////////////////////////////////
$ O5 \) V% K- _3 a; b7 n CInventorySort* pInvSort = new CInventorySort;
7 K- L1 q' E$ V- p0 { vector <sItem> vItem;; S% r! _& ~9 [6 d
vItem.resize(MAX_INVENTORY);//初始化大小* I7 Y! Z) L# z' B$ w
//////////////////////////////////////////////////////////////////////////. C) y+ l {2 ?+ d4 C
//填充数据
/ U: t) K5 U3 c: U' ^9 A6 \: p for (int i=0;i<MAX_INVENTORY;i++)3 o3 `, j4 l" v4 U3 g
{
8 A5 \$ D; n6 D2 }2 ^1 ]) y CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);& e* W& x" B: ^' ~4 y4 F
if (!pItemElem); q" `/ y$ R$ I
{
0 ]( R( R' |2 z$ P3 W vItem.dwKind2 = 0xffffffff;
+ U. }* J+ A. n/ i vItem.dwItemId = 0xffffffff;1 u' N* C, h9 X' s6 P4 ?8 S/ j
vItem.nIndex = i;5 G. H! Y0 E# m7 r4 t8 i$ U! `
}else {
% L X& ^, m [7 W) m% z' D ItemProp* pProp = pItemElem->GetProp();
" v. C- l5 @3 \! E vItem.dwKind2 = pProp->dwItemKind2;. H4 N3 [! C, i U$ N7 c# ]
vItem.dwItemId = pItemElem->m_dwItemId;) I2 y J, D7 A
vItem.nIndex = i;: k& Y' u7 X1 y2 v* n
}2 X# j- m/ F9 I. l1 }# A
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
- R. ]8 U! f, X1 y2 x/ f }9 [7 e$ e x* Y7 U6 M0 z4 x
//////////////////////////////////////////////////////////////////////////) [0 a0 a: [ O1 i1 R L, I( a
sort(vItem.begin(),vItem.end());//排序- Z8 ~0 V4 O4 v
//////////////////////////////////////////////////////////////////////////
7 w8 q' j% B. j# W- L1 r5 t. o //交换
- Y) i/ \" }# Z7 ?: S" x$ q for (size_t i=0;i<vItem.size();i++)+ {# O" ]. q( r: Q
{. G+ X1 k' P) ]# c) c& Z
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
% Q0 `0 c( S, x& o pInvSort->Add(vItem.nIndex);
" s N5 F: r( q9 g( `& n, E }
6 I' e. E/ n8 \0 |% d9 [. O BYTE nDestPos = 0;; v0 J8 X: o* |
for (int i=0;i<MAX_INVENTORY;i++)
/ y/ [+ j) b1 ?0 ^$ c {
( `! q+ ~$ o2 B7 V CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);( \( R+ Y5 S, U# Q3 T& K
if (pItemElem)! g, B6 Y: H4 M4 P, h
{" \3 N; z4 r3 T
if (IsUsingItem(pItemElem))
- ]( _3 O+ k9 e8 z" c {
B4 E$ O5 k: f+ C; I1 ] //这个位置无法放
9 V( |) \2 V! j0 p nDestPos++;) b% [8 i8 O" \7 ^' I# n
}
* g$ y" d" ]( s h! z, G2 \; J) c }
# D, V8 @! }) ~3 z2 j* L7 ^7 X BYTE nSrc = pInvSort->GetItemSrc(i);8 a" e! Q' n: s0 c; I: Q
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
s+ x* L5 x8 `7 J3 P3 j if (pItemElem)
( c+ x8 ?9 T% R5 P1 \ {
6 U& @! X$ j% G2 b" K R5 g( j# P+ w# S7 ] if (IsUsingItem(pItemElem))
0 m6 ]$ l, q0 ? {
& {2 p0 g( H( }# x8 M //这个道具无法移动,跳过4 h0 j2 R2 j3 k' t" m# ^
continue;
2 h' I# Y5 l. A }) Z2 d2 i6 l: o
}else{6 j* r2 [3 h! R. Q! [
//空位置 不用动% k7 ~4 l, r9 n
continue;
" {1 E8 ?7 [- X9 W# \" p }6 j3 L7 m" x$ d: s- \. F- | |* \$ o
//////////////////////////////////////////////////////////////////////////
% V* z4 H* b4 t! U //开始移动8 U0 w; p: d) k, S g
if (nSrc == nDestPos)& x; r. y9 ]0 g- S
{
2 w/ M }$ y2 u* l0 s. C //原地不动* V1 ^! d0 a# X+ ] @6 [
nDestPos++;# l& \% h. W. Z. }& y5 N: i8 ~6 A0 z
continue;- G) F/ r. n3 x
} Z* {/ A, }/ [* q! a/ x8 R1 g
pInvSort->MoveItem(i,nDestPos);# b: Z+ L4 b! v3 \( S5 N
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
Y) P- Q; z; m j! u* m& {8 O, I Sleep(5);
: i, S3 @1 U3 ~9 o) d; }7 ` //Error("移动 - %d->%d",nSrc,nDestPos);
. u: U, f& U1 K; I nDestPos++;+ h, K& d% N. w8 h& D% Y7 S2 d
}
# ^2 O2 v# E" M# x: T //取第一个元素的信息0 k* X2 b# ]8 e% E; o; r; k
/*
4 N1 A$ Q, J" U5 r$ N if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)6 u2 a7 V. H0 \3 v8 X1 V1 X
{8 v0 [1 q" k; A" h& ?3 c
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
; L; r9 l& L( p' w g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
1 U: a0 s' g" x- C }$ I2 K, V, T& x$ A D8 V
*/
) m% ^% Y6 T. w. G z) S1 I1 F //////////////////////////////////////////////////////////////////////////
" k- m4 P' g2 R break;
7 B0 p, K1 `( Z7 @ }/ \, I0 N* w1 A% [2 T
}
: u9 M' j. T% C, i( g1 {( r}
" Q; c; X% N8 e- T$ I$ d; fm_wndMenu.SetVisible(FALSE);, ]2 A- }2 w+ x
% r. ~/ i# s1 F5 l* V5 b--------------------------------------------------------------------------------------------------------! I9 u( a) l E7 c- ^8 _ W& D, s
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
; Y1 S) l* ?2 C* {& P{. k, n/ y) Z& \; r* |
BaseMouseCursor();
2 ~/ ?& ^3 V1 U3 B) }* ]}
8 I. C8 Q( M" V9 a X( t( F在其下添加:
4 Y1 z$ }5 k! R3 {0 \/ Hvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point), P) q6 O* h/ b
{
( ]7 Q7 K7 c: m, h7 |$ J5 f8 bm_wndMenu.DeleteAllMenu();, [1 G( X0 U! s) J' s: a
m_wndMenu.CreateMenu(this);
! L& |; L/ `6 V8 d2 ~1 I$ T- wm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
2 f" C7 }0 S" [* w i, [& `1 ~
- L/ S1 ?' U9 i, k" C: J" K& cif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
! ]0 M% t: q/ E1 I+ K$ {4 Z{* n. W8 }1 G( U5 {) Q/ m% Y
//P以上级别才可以删除所有道具3 `: ]: M2 p. N* u
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");: | _7 W6 y$ r3 |2 {
}+ ]0 f( C. `6 \( l
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );$ T! Q6 ]$ J8 D* u$ A9 j
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
# f: ^+ Z @" Z- ^7 b' km_wndMenu.SetFocus();
2 ^! }& D+ c. E0 }7 Z}
( k; ]5 q+ b0 @% I------------------------------------------------------------------------------------------------------------
& Q) ^; n5 R0 K8 y# X9 Y*************************+ q: V* l3 H' ^% p; Y3 L6 |& a
WndField.h文件
1 |1 s8 z- n* p( |*************************' M: O: F" ~) r: I' }" B
搜索:BOOL m_bReport;% B4 @1 y( N1 t- X' i, s
其后添加:8 Y7 f( n8 M0 x2 _" {
CWndMenu m_wndMenu;" D. |" G5 I: x' l
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);: h+ c; L! P% `' h
其后添加:
' T# x1 A9 S0 b& y& p+ @2 n% \virtual void OnRButtonUp(UINT nFlags, CPoint point);9 A. f8 G+ D) K; c- g
& W% K# ?9 z/ _- E8 E8 u$ u
3 t( m8 u3 S5 |, n! _% Z |
|