|
|
源文件中_Interface文件夹下WndField.cpp文件
: B; [$ m; I6 D4 A; }/ W搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
% J# m) s! E7 a
' v5 N! b' \; v) Ystruct sItem
' y h: E, i* Q! ?3 D! l* ~6 A# F; O{, ]# P. ^) W$ {: d9 e% x8 J
DWORD dwId;8 p4 _2 Q) J: ]
DWORD dwKind2;& B, z. N$ f' w' u% x
DWORD dwItemId;
4 P3 G1 o& c) G9 \; \BYTE nIndex;- p1 X2 x4 s5 e8 H# W
sItem(){
- D6 t5 J. c& a+ `2 y+ ^% q dwId = dwKind2 = dwItemId = nIndex = 0;! X/ x) i% o" V; v/ z1 S" s3 n
}
! N9 }, Q# K; E6 `bool operator < (const sItem p2)
/ C/ n" j* H. a4 O2 P) q7 G" U{ j6 B" b @1 @
if (dwKind2 == p2.dwKind2)6 W/ v* R, l4 @
{
7 [5 _" X9 V1 [" P8 F return dwItemId < p2.dwItemId;
7 `! a/ z3 L' a0 {! g }else{2 u. v* r1 w& i- D1 j
return dwKind2 < p2.dwKind2;1 a1 \% c+ j9 ?6 b. p; h, v9 N
}
9 ]* H9 ]& l* }}
$ Y9 N6 `( @( L" Q! C" L0 I0 ^};
: K% d2 D2 _8 M4 h- W* Nclass CInventorySort9 C; \* u7 V' b" |
{- L& [* h+ N; B7 w
public:0 d- i3 j' C9 L2 D
CInventorySort()
5 C7 }( z% a! `3 d2 x, ^# k{5 o' T0 E, F/ j3 S4 a
m_dwPos = 0;/ j# f1 y& F- J
} x H+ D% a" J: h8 [* I
~CInventorySort(){}
4 {. F, j" b) N# a3 yprivate:1 W* t& @9 C, ?* ~( @: p
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
I* r8 D m& w$ B& Z6 SDWORD m_dwPos;
5 q" s5 ~0 U- P' w6 jpublic:
0 a, y' [3 V; X% _9 L t/ Pvoid Add(BYTE nIndex). w+ y& n# |, y2 [- p
{
7 g: Y- _2 `% c& y. ? if (m_dwPos >= MAX_INVENTORY)& M: h- }3 p2 O
{
0 R. j+ n0 [' k return;- }2 | w2 ]5 x9 m
}
( R! _' i% z% ^) f* X( M) L. _ m_Item[m_dwPos].nIndex = nIndex;, _. S/ X+ I5 I; e6 G$ t) i; Y
m_Item[m_dwPos].dwId = m_dwPos;
9 C$ ~6 Y8 Q, P. R/ Z7 L" B R3 P m_dwPos++;& t; P6 O9 R0 Z0 K
}
/ s+ |0 s; \; t! b4 J4 O& cBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
7 L% o) Z1 j, D7 f% o{# x1 `; f8 Z. Q- J$ \
for (int i=0;i<MAX_INVENTORY;i++)) u; H0 }# e( j0 j& h+ S f
{. k; M- A$ o' h3 \( ]5 d
if (m_Item.dwId == dwId) w9 Z* S$ c* e+ N5 `
{" d0 h4 H9 G2 Q7 t- p1 ?% M
return m_Item.nIndex;! v7 X* ~3 l i. e6 Y6 m
}# O( Z1 t/ j+ Q. v) T
}
) [. j6 }& r9 f: o return 255;6 A/ u8 f |3 P' V0 X7 _1 N5 H
}
% X& `' _; }: M/ d: L. e! R" y3 Z/ r2 Yvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
7 a$ r, T7 T# R% w& }7 {{, r! J3 Y; d2 E( S: W" o0 T
BYTE nTmp = 0;
* E& E6 ?% q5 p bool bDest = false,bSrc = false;
# |0 y2 O; G* g7 T% M for (int i=0;i<MAX_INVENTORY;i++)8 L+ J9 @0 G# H% U, C2 K* U
{% @5 [4 O! ]$ N- _- i7 J3 J) q
if (dwSrcId == m_Item.dwId)2 C ~; c$ F6 K) X! C; m
{" E; `0 R! _% v" F$ B
//id相等 则 改变对应的dest和src
8 S9 z# I! M$ J) k6 p nTmp = m_Item.nIndex;1 n, o% R# j( O* ^" |# }) s
m_Item.nIndex = dest;2 h# L: ?8 M" Z8 a5 x0 f: F4 j2 i/ N
}5 p& @- T0 P) [# u
}7 Q5 E$ C' d" y, W
//临时数据保存完毕,交换开始
( `4 F; P4 \ K6 S for (int i=0;i<MAX_INVENTORY;i++)
$ H- p2 i9 }/ o( e2 Q% d6 M! d {
8 S7 Z! Y+ y& ~- u% } if (dest == m_Item.nIndex)
2 o* K U7 i: A! K& n {
& Y, M8 J1 e4 h% Q* l4 t% l //id相等 则 改变对应的dest和src3 `& ^- c3 w: ]! h) g
m_Item.nIndex = nTmp;
- f, r' A5 z/ w }/ e9 N- P: j' c6 e7 L* Z
}8 v; C+ V, Y+ a7 _& P
}
: Q; G% q- k2 M7 c/ f};# a% I$ y4 z$ H. E
-------------------------------------------------------------------------
2 _% B: @9 j& Q0 j. M依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
+ E/ a4 `5 k* |搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);6 q# u, i: c9 r( N
紧靠其上添加:
! S! B0 ?( Q4 C" y+ s3 g/ H5 C2 b" nif( pWndBase == &m_wndMenu )
1 K1 Y+ n; X8 a3 K: A{1 k# F! ?! P- c1 g# x
switch( nID )/ v: C! }5 e" u' u# R) a
{
. @6 ^2 X) r) C9 n( C) [( M case 2:$ u! ]( n6 k. N0 E# g
{
+ E7 K! I+ M" { //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);( L8 C; R6 a5 p$ Y" [9 a
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))5 c, O0 j5 D! s7 k' }/ ?! m
{
& Z, z3 U! O: }! l' V9 A: I0 H' f break;
* _- v5 c; @7 X: j% D7 _ }
* K- @9 r( h% N% @! y for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++). U2 ?+ h. @3 }" Y( M; A# k: u
{
+ m0 b6 v3 F3 A7 w CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);/ d1 w' _6 h, v, B; T
if( !pItemElem ). ~8 ~" C2 H3 h( I' e
continue;
& a# q* b4 w: `! M7 F/ D0 l/ G( H) i if(pItemElem->GetExtra() > 0)
; s1 x) [9 n5 H [$ V continue;
1 @3 I: A6 p$ {1 F- Y4 l if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
% n2 \. y0 G% S* p) S* p) T continue;
$ V/ }" r0 L8 x/ N, ?6 P) b' q if( g_pPlayer->IsUsing( pItemElem ) )
: ]5 Y' v& w4 s# c continue;
7 ?8 a+ G; b$ K( G2 s9 u if( pItemElem->IsUndestructable() == TRUE )
* ]) h3 ~# A2 ? Z { {
" t# \5 j2 @% V. w1 a, _ g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );) n/ J& h5 j* `4 M% o) [7 C
continue;
; y/ s' I+ m, | }5 T* S- M) W0 v- u% f4 E
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
6 u6 ~9 _ |8 S' A }0 r( Q1 [6 A% O2 l) g/ C7 V) `- ^
break;
, b+ X8 o$ U1 u5 `" e }" f% ^9 [3 W; @8 ~
case 1:9 u. K7 G: O' I; z
{
7 U) F) t/ S1 d6 c! l) m //整理背包: F5 z8 B" E( v, Q4 y9 T
//////////////////////////////////////////////////////////////////////////
2 I2 P3 g, I# d //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );. x! Y* d; a6 \* M4 d7 t
//////////////////////////////////////////////////////////////////////////
' j' ?. _- {! p" v, s4 D //////////////////////////////////////////////////////////////////////////3 R. g( e8 M. K6 u [' f7 P* N
CInventorySort* pInvSort = new CInventorySort;9 j+ M* b8 R/ z- a0 N7 r0 g/ J
vector <sItem> vItem;- o" I1 B6 u( [$ s
vItem.resize(MAX_INVENTORY);//初始化大小4 k! T8 ~% D b7 _9 @- A. x
//////////////////////////////////////////////////////////////////////////- J1 R7 ~1 ?% y. D+ f% I
//填充数据
+ U# m# g# {" w/ ?1 ], \- H) [ for (int i=0;i<MAX_INVENTORY;i++)1 G+ \7 O) f$ Y2 `- K$ }
{
1 M( f: j' q: G- g+ i CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
3 K+ U1 t! ?) E6 M if (!pItemElem)2 Z! x( O. c4 ^( X( U: h% o! Z, y# [
{1 P1 s5 E5 j) S9 W! w+ ?
vItem.dwKind2 = 0xffffffff;
7 x) N4 y1 T. t vItem.dwItemId = 0xffffffff;
3 d! \7 I. {$ j w! B7 N6 e# r5 d vItem.nIndex = i;- ?1 ~* u+ x u/ z! U) k
}else {
; B+ X% s$ V! ?" ~" E& L% { ItemProp* pProp = pItemElem->GetProp();
# M6 ]$ k" d% M e, O$ I* D vItem.dwKind2 = pProp->dwItemKind2;
& b F: g/ y1 T9 H vItem.dwItemId = pItemElem->m_dwItemId;4 `) K, u. R6 G7 M; J( z6 y
vItem.nIndex = i;
" @( K# F; q" {3 g( r1 j8 B4 I9 a }$ r4 M1 m, U9 w4 d, W' g
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);8 C3 _& B+ T9 z9 Q
}
1 M9 y( ]' a% F! [) A+ R //////////////////////////////////////////////////////////////////////////4 B) n' z6 S4 s4 t1 U
sort(vItem.begin(),vItem.end());//排序7 X: k& n/ _9 M
//////////////////////////////////////////////////////////////////////////
. _" Q8 Y; B* g5 C) V8 k //交换
8 d; H0 l' H X1 S# B for (size_t i=0;i<vItem.size();i++); e, L8 u, k' @2 C( J# B% a
{3 C `. u- Q: f6 w
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);( Z6 w1 }4 O& I# r6 q
pInvSort->Add(vItem.nIndex);
2 V4 l7 w$ [) j2 w0 {: ?( H }. N) E& Z: X$ i5 H I
BYTE nDestPos = 0;
' t, X* h5 [8 Y for (int i=0;i<MAX_INVENTORY;i++)8 S# Y) J+ E) d# A3 ~
{
5 ^: C1 z) j) y, K% ]4 q9 z6 J CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
& \9 \/ n' `9 J- o$ T. h0 R6 q if (pItemElem)3 g8 L+ M X0 l5 s
{
5 I+ }" z9 c7 S if (IsUsingItem(pItemElem)). g w7 M5 C6 f; M E/ Q
{
6 q1 n1 B% e1 \ //这个位置无法放3 `4 Y: g$ P- k" E
nDestPos++;
. t; H* |0 s! g. J }7 T3 b3 R9 G# R% J8 o3 p
}5 r8 C4 I/ ~3 {* m/ F6 s
BYTE nSrc = pInvSort->GetItemSrc(i);$ c5 f. o, K9 f6 Q- b/ {3 g5 \
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);" a3 r! f9 F3 M/ b5 j7 A: i& C
if (pItemElem)& {8 q0 `7 F% V1 V
{4 h6 P4 S! H% A' l+ d9 X! Y
if (IsUsingItem(pItemElem))
u# [1 s2 W' D- l! D2 X {
# O' A" G6 u- K0 L/ R" h2 C3 B: @ //这个道具无法移动,跳过
; F/ I& R+ U8 B$ t" i continue;
, Q6 I4 [2 [& w7 I8 B( ^# E }9 q7 {7 w. I& {5 C) R) n
}else{7 A$ h% R4 c0 U7 ^' B+ J1 p
//空位置 不用动. M! k( p- Z* Y ]& i
continue;
4 M8 W. L9 {5 `$ \" r }
/ z ^) I2 T: R2 J //////////////////////////////////////////////////////////////////////////2 Q+ y, h y P h8 C, j+ K
//开始移动
$ E9 h' u% f4 a1 T' {1 b if (nSrc == nDestPos). n3 P. Y% w) |3 b
{- L: Q& |4 U+ ]; y1 H
//原地不动& r0 Z1 I1 C0 N. e8 f% \
nDestPos++;! T' E7 t- y2 B) G7 n" X
continue;! `9 J+ E: H! h. O1 Z
}
. ~9 r0 i5 b% f& H2 A. f9 { pInvSort->MoveItem(i,nDestPos);+ g* E: L4 G+ i1 _
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
. `" g, B$ S. ]& P [) i# s Sleep(5);
8 I' X# X9 A4 T; L //Error("移动 - %d->%d",nSrc,nDestPos);
- W) Y9 k7 E/ s: G, ]1 ]0 C( g nDestPos++;7 c, v) t" P# y6 e) Y
}' `/ w3 J/ w8 a1 _2 ^3 Y4 ]
//取第一个元素的信息
( |, t. N9 z( J) @7 t7 c* ], f /*1 B% G" i( D( r
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
& [( q9 s* Q$ y1 F' U8 R( u {# k2 J! @' F$ B2 E5 i+ E
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
; z* Q7 z$ T: u/ x0 i' r8 \: j g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
. C; K/ r; U% \7 d t' b+ B1 X }
- ~& G) ?: B% N/ r/ d9 _& s */
2 q$ |' t7 n; b( y //////////////////////////////////////////////////////////////////////////3 M4 `% i6 a7 k6 l, V2 }! }
break;8 t3 y! G% i5 K7 W( l. @6 U
}4 _- T& f. n2 k' r# L9 C* Z+ R7 b
}
3 o. d& H% r: O N}; b" e, P7 X9 s- f6 d+ ^) b/ D
m_wndMenu.SetVisible(FALSE);3 a2 W0 P1 D2 o
2 W; v4 ~" M8 h0 l9 s( U--------------------------------------------------------------------------------------------------------8 }1 b! C" f& s: E) j
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
; l# I2 V0 w# N, c{
( [7 X8 a$ g" gBaseMouseCursor();0 T4 ~/ B2 t4 I# l S9 k
}/ @1 m1 O; J" S6 W# X; K% e
在其下添加: S7 k3 X5 a1 ]+ b8 S
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
% n/ c: F( ~/ @) R& [) E2 ~ v{
4 x( d+ r$ z% X- c* D' O: am_wndMenu.DeleteAllMenu();7 b4 f0 ], D% f" @3 h3 v, c* P
m_wndMenu.CreateMenu(this);
M8 D& y/ z, {4 a1 l1 em_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");. @9 f8 k2 M2 P5 d* k: d
' g7 g+ o+ V, Uif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
0 a5 R! \) e8 }% w$ ]{. _% \# }# f6 a& c
//P以上级别才可以删除所有道具 a/ e; G/ R3 F" h# X3 ]7 E) ~
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
" Z" U7 v' L! |$ z, i2 j. X}
) d+ N* b6 U2 U" V8 n) a. hm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
$ A. h# K) Z; [$ h6 q' E6 Mm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );/ N3 y' C/ ~' G& I$ q! l
m_wndMenu.SetFocus();
* L5 s3 G( Z. L' Y% t}) E1 }. @" X- _# I2 G7 [! y
------------------------------------------------------------------------------------------------------------+ w/ p5 t% m( E1 `/ m
*************************
* U+ r) J+ ^& q' Y o! RWndField.h文件2 s1 `9 E0 l5 J x! E. G
*************************% X; Z3 d/ f9 L/ q' _0 C
搜索:BOOL m_bReport;
9 e/ |7 y: `/ y2 O* e其后添加:. P0 p# T% G6 z8 d
CWndMenu m_wndMenu;
& Z; R7 G9 `& w% D' S) {; a5 t搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);4 p7 a& T& f$ Z! ^! S
其后添加:
. |# e) S/ O8 }6 P2 o1 z" q, E8 ~! avirtual void OnRButtonUp(UINT nFlags, CPoint point);
& U, _! s; R' O; |( v, C0 Y3 J
& D' g( l% K9 [$ x. w) R7 s
1 U. Z- g- ~0 Q |
|