|
|
源文件中_Interface文件夹下WndField.cpp文件
3 `5 M$ f4 R ?: n/ ^9 z搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )- U. D3 e2 r, H
0 R6 g: k# [ Y: P& k7 e! S, i: n8 Nstruct sItem
4 u0 U \" E4 I{
' v# c! B; x' G- b$ BDWORD dwId;) i2 g+ p% Q5 m. q q
DWORD dwKind2;
$ m2 t: E; c& D% `0 H2 E6 |DWORD dwItemId;
0 L% V$ o% p- T0 ?0 sBYTE nIndex;
( W/ x i# e7 [sItem(){
- d5 S$ Z1 s0 T4 m, } dwId = dwKind2 = dwItemId = nIndex = 0;. |6 [' m3 O; Y3 X! n# y7 @ _
}5 D; c$ M- M4 n3 O( a
bool operator < (const sItem p2)# o* s* Z& r4 w/ X9 ]+ S( n
{
8 Y+ y0 J* w# ?6 H( X$ s if (dwKind2 == p2.dwKind2)
0 @2 M9 h8 r; C7 b, i& Z/ R4 r {* ]* O6 t: Y |/ g, O! P, j
return dwItemId < p2.dwItemId;
0 f* s) R# n7 Y5 w }else{, S* v. Q3 I6 F# q. R+ A+ d- n; I
return dwKind2 < p2.dwKind2;
) E* Z. D8 H2 l! A5 b0 H* } }
/ e& ]0 G8 t! }& Z( x}0 @ E# c; m. B8 q3 J4 P
};
% ]8 y# `, i6 {' p: x) i: g) Wclass CInventorySort
' d4 R& A* E8 U+ z& k( `, y! f{
' m' I+ K( M4 {4 t4 ypublic:
* y: A: [& I5 I4 ]. k9 nCInventorySort()% C: F1 M3 }, l7 p3 j
{" U# h. u1 w, j" s |
m_dwPos = 0;
( P+ ?! Z: z! l% p- \}
: h: D: h$ D$ y~CInventorySort(){}/ U4 ?# }" k3 @' b4 j/ T, S
private:$ k4 J( J0 [& _3 r' [; a
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息2 \2 h6 F7 X3 z& d U
DWORD m_dwPos;" f A7 T6 n8 W, ], h6 u% a
public:
! R \% F/ ?4 C# Lvoid Add(BYTE nIndex)
( i# K, ^, Q! _: w) s$ _) M" r{) c" @: ~0 q. \) b- F8 r
if (m_dwPos >= MAX_INVENTORY)! C. x# k; E; y P2 g1 t/ O5 u* a
{
% R4 u& E" e ]4 ]) a t& } return;4 y& o0 S6 c2 x3 R
}7 Y% a/ M1 t. |, E
m_Item[m_dwPos].nIndex = nIndex;
' k+ F1 e9 v2 ^% ^4 x1 e m_Item[m_dwPos].dwId = m_dwPos;
. c- W- L# W! ^- L) D6 Z, S8 C m_dwPos++;1 }0 b' _6 w: n" l0 ?
} I) i8 {5 `/ L/ s6 C8 {, Y1 h- M5 S
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列6 \0 [& B: m# N* v( g; t
{
: ] I: R! Q5 K* M [1 O$ | for (int i=0;i<MAX_INVENTORY;i++); y$ c7 m: n4 r/ o
{* a) O9 x# d$ c. I) a' j0 p) l' u
if (m_Item.dwId == dwId)
) C* v8 G. Z4 \- q& `0 r7 K {. j/ e0 v, K. J! z# X- V. q
return m_Item.nIndex;
. q9 e7 c3 g7 `$ C9 Q n! u( k }
0 r" R7 L/ `0 A' b: n6 m! d }, e ~2 _/ J9 y- n: ]5 e. r
return 255;8 c+ _3 J4 F: c' C. X, N
}
) u' g9 F; v4 X1 X5 c9 ^void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置 m! p2 a/ h0 E( M6 |+ k
{. q ?$ S5 \0 J' V. K s6 A/ J6 j* T
BYTE nTmp = 0;
7 [5 K5 F: N: `/ F' y7 m bool bDest = false,bSrc = false;
0 o0 R- }5 j) ~6 F1 x9 v for (int i=0;i<MAX_INVENTORY;i++)
8 w2 \7 L/ H$ H* A: K6 q$ K {
" s+ \$ S- \2 C3 s if (dwSrcId == m_Item.dwId)
6 }1 {. a0 d% X# k8 T+ G+ P& Y {. v, }5 f$ r, v: C$ z% G6 O$ p* s
//id相等 则 改变对应的dest和src
) b: J' N/ K4 T: n6 W9 r2 u/ N nTmp = m_Item.nIndex;
! J& Y3 \" T4 t3 }9 _+ H' s* f m_Item.nIndex = dest;
* [4 @4 h8 d" ~+ z1 a) ] }( @5 w! {, ~) k6 D
}
+ n6 @! l* N# Z //临时数据保存完毕,交换开始
% _* O1 B* s# B ^% S2 C( ?7 l for (int i=0;i<MAX_INVENTORY;i++)* k6 Z% l# f: ?* @/ D8 j) s
{
. e5 Z" b( w& }8 ~7 \ if (dest == m_Item.nIndex)/ a5 o) C- u( q i( w6 [+ q9 j
{
3 }1 ?5 B- U, P7 }- r. R/ B( O //id相等 则 改变对应的dest和src1 j* E) M, r5 P. g# f! z
m_Item.nIndex = nTmp;0 x5 P, X9 n1 g4 ^1 x+ ~
}( |! g: F5 Q* c+ G9 n8 |, W
}/ F: g$ G0 L. x& q2 g& ]. a% u
}4 _4 R( u- N, o( b1 ]# I
};$ Y7 W( H& A( m# J! x7 ]
-------------------------------------------------------------------------& S! l8 Z+ A5 i7 H1 t+ t
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
$ f$ X1 _1 ~/ ]- N3 X搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);# ^, m: c; \8 T. ~, I7 u! e% \" K
紧靠其上添加:
7 M6 l6 y2 z9 o7 L% [) u, [) {if( pWndBase == &m_wndMenu )
$ ?2 X, u8 [5 d. V/ F- h{
/ E$ Y$ Q3 u+ E5 G5 j2 J x+ f switch( nID )9 C5 C$ j& p4 z: a4 |% L
{
1 L j- F, R( N! T5 r* }2 e& q- z case 2:8 z4 R2 h+ B, H
{5 i; f; w& J% m; X
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
4 N! B2 C# f% ]: N1 v- B if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
) M# P0 N% c# g8 t' I {
- X, o! `. g) q( C( Y break;
: G- E; t# p7 h }
& Q6 y& T4 ?8 ] for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)& v2 t9 N- t$ Z) b- w' S9 x5 }5 x
{4 p6 L0 V0 z% x, ?
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
9 X& Q' m( \+ Z- {) B9 k if( !pItemElem )
7 e% e9 N: f1 L) _2 p continue;
& b' C! |" ] s2 r9 Y if(pItemElem->GetExtra() > 0)
) C ?; @3 K) M" W& n) |% ] continue;$ [3 ^- u* Y; w% U( t% c, v
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
V3 m. u0 p4 P; K5 k continue;
8 p* O0 R$ l0 V" N7 m4 K/ Y: W if( g_pPlayer->IsUsing( pItemElem ) )
) |4 ^ Z5 D T+ k continue;
x& g' H9 }# T3 h. {& [ if( pItemElem->IsUndestructable() == TRUE )
. |4 x9 r6 E; L$ @ v: e X {
7 t4 b7 s# w6 N( E4 U" S) n g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );. \8 u. w U% x) S7 m9 ]5 I
continue;
+ O0 X) S7 m% f }
3 R& E% S0 m& p' f/ \$ R) {- | g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);& p4 |9 e/ l1 A) o+ k0 N
}
9 R( F$ ~2 H/ L* M& V5 _7 D g- c F break;, j. {$ a$ ]! ~2 u$ H7 F( Q
}
- y7 d3 t9 O% y @+ g7 ` case 1:0 z# v! ]2 B1 e* o+ @8 G
{
, {5 U8 @* c9 |' ~$ X3 X$ S ~ //整理背包
0 I- |. Y; P( I n) M5 A. a //////////////////////////////////////////////////////////////////////////
7 {$ b( F4 t' \5 B H: r8 p //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );0 ~4 K: `" C' _- W. o
//////////////////////////////////////////////////////////////////////////
7 V o! z' l/ P" ^2 d //////////////////////////////////////////////////////////////////////////2 B4 e! X! Q3 a/ Y2 v: y0 l
CInventorySort* pInvSort = new CInventorySort;
( e# ]2 l4 K0 { vector <sItem> vItem;9 @% {+ i# V6 S' r2 w& T$ @' S: S
vItem.resize(MAX_INVENTORY);//初始化大小
. i, H! K( y Z7 V s8 N9 B6 \ //////////////////////////////////////////////////////////////////////////% a" z0 O: |# @! h
//填充数据
3 ^8 [8 @& G$ c( V0 m for (int i=0;i<MAX_INVENTORY;i++) [% L4 P# n1 A! @3 l
{
# m" [( x0 O8 ^1 M+ h3 p; y CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);- r b( r5 A. {- R
if (!pItemElem)
0 M5 m0 w" F! _# h1 e. n {0 i, D' k5 k5 ?) V. n
vItem.dwKind2 = 0xffffffff;9 m/ W$ u7 n" _% f% S
vItem.dwItemId = 0xffffffff;$ x" z* J, \( F2 H/ n+ `+ ~: @
vItem.nIndex = i;
4 c+ A+ y' I+ g) x. u4 E" {9 b2 Q }else {8 q: f( \! i- C, ?' {, F# U
ItemProp* pProp = pItemElem->GetProp();# h3 S; h5 o: b; b) K( x: r
vItem.dwKind2 = pProp->dwItemKind2;7 {$ Z$ `0 i. J4 m4 [( B/ f
vItem.dwItemId = pItemElem->m_dwItemId;
4 Y" L r9 e0 k! S, e vItem.nIndex = i;
$ R0 _. P" e& B+ }% g }
+ t5 N }/ O; {+ g% h //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);9 A1 x. u0 ^) w, L) {
}+ G) S0 y( s+ X& M( y( X
//////////////////////////////////////////////////////////////////////////
0 ?! O- p i7 Q sort(vItem.begin(),vItem.end());//排序1 ^, \ r, F2 }! ~& s7 E& Z4 F
//////////////////////////////////////////////////////////////////////////3 }3 T& L* B( U1 k7 ?7 W
//交换8 a3 p4 z/ ?/ D2 [( m$ A+ F
for (size_t i=0;i<vItem.size();i++)1 I9 r( a7 H+ E
{
2 e& N d* o3 e- { //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
9 E: H6 s$ k2 }2 A8 N' n. N pInvSort->Add(vItem.nIndex);
" v: r. u/ ^" y U. p" z }# w; [2 X/ Y9 `0 j; o& f
BYTE nDestPos = 0;- F' a0 U M: h. l" H
for (int i=0;i<MAX_INVENTORY;i++); O) `# o' ?: u
{. [5 B( }! n8 o* B0 K+ B: F
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);" \( y' S+ N( _ n9 \
if (pItemElem)9 f& l1 T9 P6 l. D7 `1 u
{
o5 \" J' s; l if (IsUsingItem(pItemElem))
* s' ^! `+ e0 K8 S {
; T6 { Q, s o) a+ T //这个位置无法放$ N# W4 X4 l, f2 S6 @2 N
nDestPos++;
4 k) B8 d0 y4 I$ C r7 R }
, B0 u% T( X5 q1 @+ [1 ^6 p2 D }
( e2 b% e S! T8 T6 a3 e BYTE nSrc = pInvSort->GetItemSrc(i);
9 m! ^7 j/ m4 c. c# f8 ^" y pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);( m. b( N" {/ W1 Y/ Z
if (pItemElem)1 F/ x5 {6 E. C9 C" q ^
{
. Q+ t* q2 O9 _! Y% s) G6 R if (IsUsingItem(pItemElem))
8 B9 c' ~% S+ k& n) ~9 d } {
3 }# Q _5 S5 @" u8 V `% M* Q //这个道具无法移动,跳过8 \8 f5 u8 q2 a2 ^; v2 a' w$ q
continue;
+ K) y( }4 [2 J; g }+ L3 e' P$ X/ `7 B/ a9 L
}else{
. ^$ y& C3 t) a //空位置 不用动* i# D% p4 R/ g, A
continue;
/ ^# o/ m1 ?* o6 f3 ] }
# U/ Y) y9 ], C5 ~$ e //////////////////////////////////////////////////////////////////////////. j1 H$ g8 S" Z, s7 s5 b
//开始移动+ v- X5 Q- u/ S n( L
if (nSrc == nDestPos)
/ J0 {2 ?& C! B' f7 C2 a" r) G {
4 t$ J- r Z/ I3 J/ b. l //原地不动
5 d% _ E6 j4 V: n! N, k nDestPos++;& N. L/ G" a! Y
continue;
7 _3 W% I0 M: R" C }
1 m1 C9 }; D8 x5 E9 O( N# p4 p: w pInvSort->MoveItem(i,nDestPos);
5 k2 n! ^& U2 J0 b. Q( W g_DPlay.SendMoveItem(0,nSrc,nDestPos);; R. q: O" [, M- Z- T2 U
Sleep(5);
# J$ p+ | L/ A! c //Error("移动 - %d->%d",nSrc,nDestPos);
* J" Q* J2 X$ j+ I$ Z: p% k+ M nDestPos++;% o' I( K% P1 z- k& s$ D: H
} y6 p7 e4 Y# s4 ^" k3 W. e
//取第一个元素的信息/ r# T+ H8 S2 F7 L- H2 x4 m* }
/*
5 M% F8 c1 \* J# o8 {9 V if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)1 l6 M7 I2 u6 o6 `: F4 k
{
* l& c! L; t$ K# ^/ Y Error("Move - From:%d,To:%d",vItem[0].nIndex,x);+ b) M% i- N- z
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);* D2 N5 A! x! Z6 | C* k2 D2 T* o* p9 L1 R
}
9 j* i6 C U6 ? */% t- G- F0 {! g# Q( |+ t9 W8 O4 U
//////////////////////////////////////////////////////////////////////////
0 M" [6 L9 Z# J break;' u4 B, D9 W2 M) Q6 o
}
/ p5 }: p' j6 F( g O: r } 1 s. f2 s1 J9 W0 B; P; n5 E
}1 @! _" q3 }9 }' U" x
m_wndMenu.SetVisible(FALSE);+ g, V" U+ ]' I
0 S; d l; R5 h+ I% f V1 {
--------------------------------------------------------------------------------------------------------
: \4 ]7 b/ v, J5 W8 C" G, B搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)% j: Q0 O0 j1 s
{
0 Y# p$ Z# K; o, j3 E$ WBaseMouseCursor();7 s7 C* c4 }, `8 d& r0 i. c
}
$ S f% M2 t( H3 F4 z在其下添加:
+ q- B* g; w3 y. \) ^void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)" [, m' R' I' s) E. c( s
{
8 E6 h5 q% g- Y& |: a! e ?- um_wndMenu.DeleteAllMenu();
+ k1 k: S! Q$ p9 V, vm_wndMenu.CreateMenu(this);
6 G, n( c+ v9 mm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
/ ~* y! C8 V4 p' M, o9 J! N% h
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
: m" b/ M n4 a- a) c/ X& g0 {{
1 t* c8 S! y* `$ y7 U //P以上级别才可以删除所有道具9 i* \0 j2 ^" c& V/ K" ^0 C3 n* l1 M
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
; \5 Y% \# f ^% c" I) K}
( f- r3 U- @% ?1 Bm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );3 k. c9 K' ^* U8 S- l3 `) a
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );. H% j. b4 j3 Q: ?
m_wndMenu.SetFocus();
2 ^( a6 K) J% { S# E2 L% A}
( c6 s4 N9 f% @# ]2 ^, C. A4 `& Q) m------------------------------------------------------------------------------------------------------------* y: R5 H- ?/ G( @) k& M5 Z
*************************
, y$ v* [- i% G1 Y) S+ K7 C6 F: y9 {; lWndField.h文件$ q# r8 ?# d" y
*************************
; B5 F3 ]# X3 \8 }3 `, R搜索:BOOL m_bReport;# y( z( @8 b- W9 x3 d
其后添加:. ~ n/ J% T/ k. I9 T2 e
CWndMenu m_wndMenu;
[( s! Y: |) J% C9 _搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);7 i) D5 H' K+ `5 Q; A& ]2 M1 A$ T5 m2 h0 W; o
其后添加:# j7 z+ t" E9 O+ Y) Y, {2 P
virtual void OnRButtonUp(UINT nFlags, CPoint point);
5 l# O5 m8 z$ Y9 }, C7 p3 `; |; b S( w5 Q5 z0 ~# M
8 I, U3 {+ V/ o. U9 a+ m
|
|