|
|
源文件中_Interface文件夹下WndField.cpp文件
3 K0 \9 D' N; {4 p% F; l搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
6 P! Q t5 v0 M% w1 i: J
( b9 e V; p. p pstruct sItem
4 `3 Q5 \" V& I% ~3 o% x{0 f5 r* ^2 n9 ?! w: h- f8 `
DWORD dwId;
- R7 P) F* r: @% R: x, J6 YDWORD dwKind2;
, s& J/ L, o2 D' e; ? S' wDWORD dwItemId;7 W$ a) k; h/ Q- c o
BYTE nIndex;
1 |2 w1 N) X& L* j4 u1 ssItem(){
G+ h) d' @) Y1 c2 ` dwId = dwKind2 = dwItemId = nIndex = 0;
7 r0 c4 V t) [# Z}% Y5 _1 d9 f$ j/ U" u
bool operator < (const sItem p2) M' L' q3 Z# V2 g) \; u& G
{; r/ q6 k! Z8 O
if (dwKind2 == p2.dwKind2)/ U2 f3 R) J8 e- X. f1 m
{
$ K9 Z; C4 v0 g6 ^ return dwItemId < p2.dwItemId;, a* E, I# z( i( i7 \
}else{
' [) x, U+ J p& Y8 ^" h @/ o2 V return dwKind2 < p2.dwKind2;
8 I- ~9 [3 O3 [( ?( n }2 g# H, x/ w7 q3 q& t
}+ T- J. H3 E' Y, D6 H
};/ E7 ~% c# o& W
class CInventorySort
9 v! r! r' ^) Z! N+ X& D{
( v% h0 d) M# Q: p$ w+ |8 Fpublic:# C8 @$ z; P, x
CInventorySort(). {& V8 o P: z8 Y
{
$ Q& N# ?1 y8 L+ C7 X2 x$ q' d m_dwPos = 0;
$ M* @, H5 B* r+ m+ P1 M8 H; D}) S2 c1 R. \" c0 y
~CInventorySort(){}4 }# [' T1 E+ M/ H: r: a0 n
private:# j6 K8 X6 X6 D
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息) j- W) ~2 S: Y# D9 p" M
DWORD m_dwPos;' Q; t0 h) q* _1 C* x0 y" j( q" G! g
public:
9 `3 ~ d0 z% ~' k; V! U! Yvoid Add(BYTE nIndex)
r3 h8 T! o: V1 L' r{
% _: }& w: m; O if (m_dwPos >= MAX_INVENTORY), f$ B) c) O* ^8 E: L) C4 ~. O2 _
{
. e* G0 `( g5 m( R5 L/ Z return;8 x+ F9 r4 @$ e; u
}; ]" Q( M; H- G+ V, J8 L$ e
m_Item[m_dwPos].nIndex = nIndex;) a$ ]: u. G/ d* I" P8 p* L
m_Item[m_dwPos].dwId = m_dwPos;' M. L' L( O0 o' d
m_dwPos++;( @( v- K7 b# c& h
}
1 d9 r* C$ Q; A+ l! Z1 x5 v& JBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
) _# U+ B6 R, x% ~" X) N{
8 C8 |/ O9 d$ C u( M for (int i=0;i<MAX_INVENTORY;i++)# p, f$ t3 u$ [# A. y4 t' w: R
{
; d8 s. v) c$ a" ? if (m_Item.dwId == dwId): x0 x. e" u# I+ D) }
{) P) o1 f$ E, _- J
return m_Item.nIndex;
9 H8 X, V4 D& b2 H J }
1 n3 }$ {) T/ z; { ]3 Q }; R+ E4 J% v1 k3 v
return 255;5 N# Q( P9 u4 r' b% l' N. f0 ~/ @
}* [2 o X6 c' c( ~9 I. Q' L
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
# i7 q* c x; p" N{: _# {. ~, I- Y7 u J& W9 `& K
BYTE nTmp = 0;
6 C u' {* z$ z7 ] bool bDest = false,bSrc = false;/ D, L9 l T: z% Z! \
for (int i=0;i<MAX_INVENTORY;i++)
8 @. O# W! Y2 ]8 R {
# w0 P2 v5 m& B8 g9 ^ if (dwSrcId == m_Item.dwId)) n6 {1 i$ c* F* @( x8 R' j
{7 n2 U @7 O8 C5 @& ?
//id相等 则 改变对应的dest和src* r) A7 x- p8 x: X( U) ~- m, p K
nTmp = m_Item.nIndex;
2 _, y8 ^ `2 [( c$ n2 l m_Item.nIndex = dest;
3 L* Z& p/ h: w: Q }) Y! J- J9 I( D' E+ Y
}
& P: @+ s1 ~0 j) S6 a$ L //临时数据保存完毕,交换开始' X) @# H% q0 j% f2 U
for (int i=0;i<MAX_INVENTORY;i++)' W% M; h. a$ a& Y: i' D6 v7 z" s
{" z+ V b* A# L" F ?
if (dest == m_Item.nIndex)
: l' G2 S' M9 m, k' h0 C! S { B, v7 B2 N" _4 u' y2 B4 Q
//id相等 则 改变对应的dest和src
' b" N w ~; E. U m_Item.nIndex = nTmp;
; O R+ `: |: ~3 U* w! W9 K, q2 g }
* r, u* `6 d [ }
( F4 @* Z4 m" A; n}! K4 Q4 `$ V% _" M
};0 a0 u. t v, e8 T
-------------------------------------------------------------------------# Z$ L2 G+ B, Y* q7 n) r# C: y0 \ Y
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
) L9 Z5 }& z2 o2 {) Q7 V9 T0 s搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);$ @1 ~' F9 Q3 ?5 ^/ P* x
紧靠其上添加:
7 j% g i! m, h6 c+ Tif( pWndBase == &m_wndMenu )+ v& ^# w4 |& _
{4 A9 S# }4 [: p! ?% J
switch( nID )$ u: U/ ]- _2 @( U& O& u: w) U
{, L) a8 G. D F# c F* I
case 2:
1 K, h, d9 ^% e+ v8 ^2 M/ z& T {
5 A+ W+ O( m: c2 W" z ]" L //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);4 N2 B, n$ k; K1 x5 t
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))7 L o9 X9 t% U* u
{! x. _9 ^7 F, A. R
break;
5 J2 G! n, H$ P* \: R }
F" ]9 c& E% @8 s8 N! o7 ]2 M( ] for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)6 ~. m! h# Q" ?' L9 `5 b, ~8 A
{' ?: [6 L# ?& g* Q$ ^
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);5 j- G+ @# W( @4 }7 g
if( !pItemElem )6 ` h k5 n8 \6 i
continue;2 v, V& c( ]; o: R* F4 B; k4 _
if(pItemElem->GetExtra() > 0)
& j3 V! l8 m5 n, p d continue;
* P% b2 d! E' L- Z if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
% Y+ v' l. i/ ?* v; ~; w continue;
5 z! \& j v! _( h! K+ u/ e0 v8 J if( g_pPlayer->IsUsing( pItemElem ) )3 \' s2 u& p* C' Y3 [
continue;
. H( v. w7 f' @ if( pItemElem->IsUndestructable() == TRUE )
4 l( @) w" D- d5 _( `- ?: N {' m4 D: a6 w @/ Y3 ^
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
& S+ q& ^5 E3 r. R& T) G8 R' O continue; P0 I9 J% M7 [; j y+ x
}) y+ Q! v! f2 F# Y% }* F& o
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
9 }8 o' D% y) u7 m% W: ^ }/ t- |4 M+ c' z/ N U6 x O
break; O* v9 Q( M7 D0 N3 ?2 s* F
}
) L1 i7 s+ s, I# g8 W* g case 1:
2 C: k8 F) U D' q7 O {
2 {7 S8 x6 I8 z: U Z0 O, } //整理背包$ F! y9 S3 K+ A; i2 ~5 s' A
//////////////////////////////////////////////////////////////////////////" A1 Y5 T0 T. W( Q k3 @, a' {
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );- v) p! ^9 @" I6 B$ s& m# P* C
//////////////////////////////////////////////////////////////////////////. [0 H, q: E7 X
//////////////////////////////////////////////////////////////////////////& h4 z. q8 o/ _ t' y6 A: n
CInventorySort* pInvSort = new CInventorySort;
1 _; p7 h! y9 t8 { vector <sItem> vItem;
# V0 k( z/ t0 r7 W: k vItem.resize(MAX_INVENTORY);//初始化大小
2 t8 T) ^+ a( G //////////////////////////////////////////////////////////////////////////
' d% R, Z |7 A# v) n3 x //填充数据
9 _# v8 \" n+ N, [- |0 @ for (int i=0;i<MAX_INVENTORY;i++)* z; B3 [& `0 {
{6 u, x2 }; p; d1 U
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);7 u9 A2 t: C/ B0 W9 `8 a- z9 e
if (!pItemElem): N h6 c! t0 h3 k. B" W: ~: [
{3 b) {! M7 J; H! g! V" o
vItem.dwKind2 = 0xffffffff;
6 U" H- E+ F! x1 B vItem.dwItemId = 0xffffffff;
O @% V1 X9 h, P+ k vItem.nIndex = i;, c) z8 X' K) w
}else {
% ]& ~3 n' m( [3 V7 l ItemProp* pProp = pItemElem->GetProp();
4 ~* X) P0 j1 }' s, ~- ~ ~& A: z7 G vItem.dwKind2 = pProp->dwItemKind2;0 }- q, r9 H$ F0 M, W
vItem.dwItemId = pItemElem->m_dwItemId;
8 J0 k) ^; X' R9 i! k$ b0 a. O! [ vItem.nIndex = i;
( y; o% W" t- v }3 L# }1 K: E, u& q2 B
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);, Q3 F( \! L& ]# U! N* Y# H6 g3 T# f
}5 w( {- H! o6 }
//////////////////////////////////////////////////////////////////////////! M' O' N S+ l5 K+ t( V( i9 s
sort(vItem.begin(),vItem.end());//排序
- _3 e+ N6 C% J( s4 `/ V2 s //////////////////////////////////////////////////////////////////////////
9 d5 ?6 t! J2 p$ e7 A( I3 y //交换# D8 R8 n% h% f7 _
for (size_t i=0;i<vItem.size();i++): L% `. x2 a1 ]; Y& \ N
{0 P/ D9 d# D8 ^8 L- ]& o
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
1 t- `6 E: q* S# h2 _$ h pInvSort->Add(vItem.nIndex);: n' \+ z; p$ B8 r6 `+ Y% E
}8 a% ^# O) K. `+ m& H+ Q: C0 @
BYTE nDestPos = 0;
# [1 E6 X. B% h5 p for (int i=0;i<MAX_INVENTORY;i++)
+ i* O& U- ` X {! M9 ]) C; w" a2 B8 y6 }# ?5 I5 x
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);( _4 M+ v A5 ]( @* t5 F
if (pItemElem); h: B$ y1 U& S5 _% a
{
' p& X4 m4 z. P if (IsUsingItem(pItemElem))( ?; H7 N* L2 B; s- s3 ]& j
{
5 G2 n$ i8 K5 f: P2 e3 u //这个位置无法放
- D% s2 ]& v/ s7 [8 { nDestPos++;" U9 ^+ z+ q/ H; V
}
* y1 a+ j. f9 z2 R' [" V }+ o8 T) ~+ {. ]- V
BYTE nSrc = pInvSort->GetItemSrc(i);# I# Y3 Y# o/ _6 n( c& q* Y
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
: ?( j- d Z2 G6 q6 K( b1 W, S if (pItemElem)
* h# k% ]7 j n( i$ d {
! k" q& ]; n8 }( ?# W- [ Q ` if (IsUsingItem(pItemElem))
- d* g. v9 n$ G ~3 F {% P3 g/ R9 B& Q) }" b* o
//这个道具无法移动,跳过
' n# H: k5 n0 _) N7 ?! \+ h' a continue;5 F/ t" o# `2 D$ ^8 q( r+ X
}7 G7 ]+ d9 ` N+ ]2 W
}else{& {+ k h! _, C& O! M6 W! ]& a
//空位置 不用动
! d1 @7 t6 G+ Z0 C! S continue;
5 ~ u1 Q2 F" [% B( k" {% m" W }0 ~* R5 w/ ]$ s8 j
//////////////////////////////////////////////////////////////////////////: t/ k* q; }# S# J% b4 |$ d
//开始移动
& ~9 @2 S9 T2 \+ i: v* g" u if (nSrc == nDestPos)
0 G: @( S# C+ C8 w$ M% y3 {; J {
3 l/ s2 F& c6 m* Y //原地不动
. j+ \% J1 Y( p nDestPos++;
$ b3 T. c6 J6 P7 @ continue;8 w' ], g* u f) x2 o0 k$ u2 S
}
+ c. R! Z" n! e# G& u( I5 P9 P pInvSort->MoveItem(i,nDestPos);0 w5 S7 o% } E, E3 P
g_DPlay.SendMoveItem(0,nSrc,nDestPos);, H/ b1 p. t! o) a( n' N2 Z7 Z
Sleep(5);' ]$ y# l9 O5 c" J9 I, z: x
//Error("移动 - %d->%d",nSrc,nDestPos);
/ d) V% n* o' d' |& q" E nDestPos++;
$ b `% | k3 m! k: ?' H7 X$ v }
2 L; d+ } m2 d4 A& m! H" k; ~( H //取第一个元素的信息" Y& A" G) y3 Z! [7 Y" r0 V
/*
9 u% n% {9 x& y7 [ if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
( i8 g) D% Q O {
4 U/ P( v5 C1 A5 }$ K0 q- u3 M; R Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
2 n! u6 {& Y2 V! \ g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
8 C: Y' M" d3 |6 D; A. x }
; X J2 q# t* j- { */" _! O |! }# y4 ^
//////////////////////////////////////////////////////////////////////////; z+ I( W0 V: `2 h2 a) ~. g$ G/ `
break;+ a, Z8 l2 i7 `8 i/ X2 d( F& ~
}! ?8 E1 ?; L6 x" I. W
} ! S$ p* b2 x% {0 K. L" H
}& `! I( n m4 B: F
m_wndMenu.SetVisible(FALSE);
9 o% [; G: p9 |6 _1 Q$ ?4 S) ~9 Y" K7 w. P+ O h2 r9 K
--------------------------------------------------------------------------------------------------------- C+ v6 U, W }
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
# L7 b* P, B, l/ v{7 c/ `* }6 J. ^& _) e6 w5 `. z
BaseMouseCursor();
/ ?5 ~! A r) ^ e0 B" A: O}
& |4 h1 `6 Z/ \; O1 o9 w; `$ |8 J在其下添加:! I! Z4 M- X$ D+ O1 W
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)7 ?( H2 R! Q6 l c3 B. _9 |
{
) R5 h. V+ S$ h3 n$ u/ a% Cm_wndMenu.DeleteAllMenu();
G" _( Y( |# z3 v7 F1 Rm_wndMenu.CreateMenu(this);4 O; `: v1 m1 d0 t" _. }& @
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");- [3 m# b" e! K1 x4 ~3 f* ~7 K
' A, a Q5 _- ~
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))- w% a" u; x; H) N. u; G3 q: X
{) k3 S+ s" m8 K3 P% @5 Q E
//P以上级别才可以删除所有道具4 k4 Q1 E7 ^. j- @/ d/ o$ E9 y
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
& Y% i' {% p* |, r7 X}
0 K2 A: r- Z& }1 m& w) V* @6 `m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );( |- u7 J& k) \+ Y, S8 n
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
+ V# u* v& K: Q; Em_wndMenu.SetFocus();
9 q& O2 F- Q$ ^/ U- r1 ?}
/ W8 z2 ^2 H# ~$ G1 P. Z7 G------------------------------------------------------------------------------------------------------------
, A, B6 E& a& B j( T' g# N*************************
* `$ o8 {4 n& S; B. _, j7 xWndField.h文件& r+ Y0 T' ~7 z q+ g
*************************
0 V* J2 k5 v# d$ b# e5 r搜索:BOOL m_bReport;6 c& G) r6 M/ d9 q$ g; x" A/ ^
其后添加:
7 S/ ^: g% I @CWndMenu m_wndMenu;
, D8 F8 A1 ~' V搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);6 B1 O' ?( ~- @
其后添加:
! N( G6 B; m5 ovirtual void OnRButtonUp(UINT nFlags, CPoint point);+ H* Z) k. t \- H& L: U' [
$ W) `1 G' Q! j4 u; ^0 \- }
1 m, [. u' T" R! d2 ]1 b |
|