|
|
源文件中_Interface文件夹下WndField.cpp文件
$ C; w1 _# D3 m+ v X, U搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
2 @ `* }+ u, t f% w3 a8 x: ]/ D# w
struct sItem
6 E( |+ O5 _% n3 k{4 }1 j1 a, d5 N D( a. ?2 ^5 l$ J
DWORD dwId;
8 z7 \" U6 g! p$ T; uDWORD dwKind2;/ H+ w6 j8 {/ q! ]
DWORD dwItemId;
# M% A4 n8 U# I# yBYTE nIndex;* i& G2 u( D/ Z: X8 o
sItem(){5 V6 b0 L* \( k
dwId = dwKind2 = dwItemId = nIndex = 0;% I- P n1 p) r2 \6 e4 E
}+ C ~6 z/ B1 D& S
bool operator < (const sItem p2); K8 ?. p+ ~8 ~: F/ X
{
$ Z1 |/ }/ R, q" B- \* y4 U2 A: B if (dwKind2 == p2.dwKind2)
~- S& t( I( i8 X# ]/ O {
8 s8 @% Z( C' O% `3 \- a return dwItemId < p2.dwItemId;% D" l E! ?5 m7 a* r3 l' f* p
}else{
8 h7 f# f7 L+ E y1 _6 { return dwKind2 < p2.dwKind2;
! i! v8 j! t/ E+ K" a0 O }
$ N. t% M% X# K/ }}
2 F) D' l4 @2 }3 Y+ R};
) D) U5 v3 w8 I$ R) q& K* j8 i1 K& ?class CInventorySort
1 y- y* i& \$ `{
) F0 h- X) ?2 k& x. ~! x7 {$ G5 d: epublic:, m( E1 N X w. v' C% b, I" U
CInventorySort()
) I: O# R% c+ A! U( b8 U{) ~% H8 \# _3 x3 e$ }& P1 f! I
m_dwPos = 0;
! r* S. g/ w3 r8 c. s}
8 v4 v7 i" C @. z$ }! s~CInventorySort(){}! R4 R- J5 L, ?" w
private:
+ e, R# ^& K( F2 N( {% O- O% LsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
# I0 ~3 E% l& _6 tDWORD m_dwPos; i8 t1 }/ a0 p: R
public:
- ^9 g! v. N" n, i J/ ]void Add(BYTE nIndex)# d! @0 o" W) @" N' u* }
{
' j4 D6 Z; ~! Y0 m, a* D9 _ if (m_dwPos >= MAX_INVENTORY)
1 _0 Q# v7 s( q7 e% @( _ o {
' E# W" @9 J6 ~/ D' w return;" ]+ I$ r# `% T9 t
}% P! k# P: [- j v9 m
m_Item[m_dwPos].nIndex = nIndex;0 m* n. f1 h3 N, G/ U
m_Item[m_dwPos].dwId = m_dwPos;: k6 P5 a2 E- a/ `2 ]) z3 p
m_dwPos++;
8 W$ W4 ]3 R% q}
7 v% r: X5 _( k2 _1 T' }BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列( ~6 u( b+ ^1 S- n1 `! }
{1 o( w( T# T1 k0 v* t
for (int i=0;i<MAX_INVENTORY;i++). ~9 N; c# G3 _& d+ h0 F' R# t
{: T* v; `; e" k1 F! k( C
if (m_Item.dwId == dwId)- G/ e& @, y: ] B Q# _7 s: r! o
{$ F6 q' K( p$ O" F
return m_Item.nIndex;
4 d5 j$ J% l1 b1 a' v }
6 D7 Y" v' Z. V$ M }
Q6 ^( D: k& @% I d return 255;
- A8 x4 P# ~/ P- \. b/ G}
8 c; x$ n! U5 s$ w$ T- mvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置# ]; J( h* N' P9 P& P* [: s/ Z
{: d/ N; L" V' l* o( X$ [9 }6 P
BYTE nTmp = 0;
4 l3 l- \. [3 I: B- R: H bool bDest = false,bSrc = false;3 m- z4 s- C m1 T- a Y
for (int i=0;i<MAX_INVENTORY;i++); }- Y3 x* O' Q( u$ H2 {
{' [9 `+ z4 H2 x1 U
if (dwSrcId == m_Item.dwId)* ?% X* E0 [4 V6 V- H, c3 q; |
{) T% m. \2 ?2 H6 t: ~
//id相等 则 改变对应的dest和src
- q; w: a5 S5 |. ]5 G" h; Q nTmp = m_Item.nIndex;
, L& ]* p# i$ a* m- J m_Item.nIndex = dest; `0 `$ }- G2 ~ j, m1 l
}
( u- u( w+ x2 @) z }+ D/ g' |) X9 Y9 s8 G# D+ j
//临时数据保存完毕,交换开始* E5 M5 a* `9 z( r% G+ o
for (int i=0;i<MAX_INVENTORY;i++)
( X! s( [) n+ q {" a5 W! X8 p" A4 y8 H$ D
if (dest == m_Item.nIndex)
$ q$ Y4 B" C2 n. b4 D {1 F$ d1 B9 A9 k. ?. e7 p- \- O' Y
//id相等 则 改变对应的dest和src! a% z1 z/ }$ Y6 g% \
m_Item.nIndex = nTmp;
& g r, x) p6 i% O( w }* X% O7 _1 k2 ?
}
" A% k. `5 y& T}7 A% m' |3 E+ \- ~+ H) S1 _$ g
};
- P7 s2 D/ x, h) q-------------------------------------------------------------------------6 l% W( |8 y: ?7 B; P, ]( [! L( s: V
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
, {6 k1 U& x, w/ d8 d$ j1 J搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);! C8 R) @3 k0 V p/ }. R* k6 z( w
紧靠其上添加:
* b4 v! x. C4 ]2 }if( pWndBase == &m_wndMenu )
' Z, |' a/ W( n- b$ n4 W{ f7 x" \( o0 R# Z
switch( nID )9 V1 w# n% m, k0 G8 e3 ?; K' a
{
( ]; {! I) T4 G7 k4 n9 M case 2:
- \, B8 r3 V) N" Q6 t" o {. r5 z+ R6 y$ d* u1 a
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);6 l8 U9 D8 k5 ], E) d
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))1 L @' z8 w% L1 A. O
{
- y3 b. ]: T+ B4 b+ d break;
- _' M! l. @! p- R/ W: d& E8 W }. t: r4 b! r! b7 j/ @$ D
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
1 z% G# p1 S1 M) | J4 Q {
. X2 a6 p3 ^& A7 ]/ R$ \2 a3 D! b8 s# ? CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
9 F; V1 b0 A5 A# l if( !pItemElem )
" P( D; d# [- u8 C7 L0 S+ x3 z5 @* z continue;
0 E, H& _$ U5 U- \ n/ B if(pItemElem->GetExtra() > 0)9 V0 P6 E- x- D% f- ^1 n
continue;
* f& s& T& x3 D% y# t if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
/ [1 g* k x# U/ O( B3 m N- w continue;* ]) I, a5 A9 ?: u7 w
if( g_pPlayer->IsUsing( pItemElem ) )
' L! u9 [4 r8 n! |0 C$ j continue;
; Y# Z1 R. E1 _5 } if( pItemElem->IsUndestructable() == TRUE )
/ j! W- i: U/ S/ r {1 r3 I1 i/ H5 J- r3 q
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );: }; a b: N2 \4 `% H N
continue;1 ^0 D; J. F* J# M; L* x
}
% ]! O# R- b: S" d4 `8 q g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);. c/ O2 t( b; t w$ j
}
; q# J+ U0 L n4 t; f& { break;: A$ E& `/ N& g# b3 i
}
4 c% b% o) \0 \( Z* P1 D+ H: C case 1:
. h+ i9 S7 G. g" [4 a {
& P$ I) }: Q& X& q+ L //整理背包; v& D8 P7 E& i/ Y) z7 @
//////////////////////////////////////////////////////////////////////////
: L2 A U2 s/ L //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
# l: `: M/ U8 [" [1 [. q, j+ \) J //////////////////////////////////////////////////////////////////////////
0 M) S. Q& k+ i0 l4 E //////////////////////////////////////////////////////////////////////////
! N. q/ s* W1 ]' S CInventorySort* pInvSort = new CInventorySort;4 F( t7 I+ I$ C* D4 g
vector <sItem> vItem;$ P; M' `. x1 q, p1 I
vItem.resize(MAX_INVENTORY);//初始化大小
% {4 j6 W, ^1 q2 A3 u1 W //////////////////////////////////////////////////////////////////////////
& }) B4 w, V# I& k2 a& z //填充数据9 ^6 g+ d/ }: R/ ]
for (int i=0;i<MAX_INVENTORY;i++)/ G: c3 E' V* T8 a3 ]; b* ?1 O( }
{
2 e' i) h. y9 [8 {$ M; Z CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
: ?% g* p5 N; B' T0 `* X! y if (!pItemElem)
. a- v$ T- `; a5 B" G {. L' g& i9 o0 ?2 `- V% H. f3 [
vItem.dwKind2 = 0xffffffff;0 z% p6 E: R! }( t; k' e2 _
vItem.dwItemId = 0xffffffff;- a! P& C# E( h7 P5 b9 s5 y
vItem.nIndex = i;/ I: l6 c7 ?- X% x
}else {
% X1 L/ v! \ M% z- }& j ItemProp* pProp = pItemElem->GetProp();: G# U7 t* w, m% S
vItem.dwKind2 = pProp->dwItemKind2;
5 O) b: [3 w. W# T% i vItem.dwItemId = pItemElem->m_dwItemId;, j5 k I% @) L5 I8 k
vItem.nIndex = i;& h1 }' Y' [- _+ Y: ^) F
}& I# u; l8 ~$ e- Q8 t: [
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);+ P) W/ ?: w+ j* F
}
8 Q" \7 A# Y6 `) X! }. H //////////////////////////////////////////////////////////////////////////- K! N( k3 y0 |$ a9 t
sort(vItem.begin(),vItem.end());//排序6 N7 U, v& N" a; P6 L' D
//////////////////////////////////////////////////////////////////////////
# V. p; i$ j2 o1 s //交换' v; u- H! X' j1 v5 b/ V
for (size_t i=0;i<vItem.size();i++)
4 q+ n4 `' |# ^7 m) z! n! C9 c {6 F7 Y( J- P: U1 d R* @3 [% I
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
# T/ y% X3 l+ i' G5 \ pInvSort->Add(vItem.nIndex);
2 }' E9 P% J1 I7 R }, s- E9 R6 f8 j x |2 ]
BYTE nDestPos = 0;# j! s) Y2 I# G3 {; ?5 C
for (int i=0;i<MAX_INVENTORY;i++)2 a+ s: ]4 d( T7 s
{$ n0 Y: C0 ~& S0 l
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);9 X& A7 Y1 D' w ^: Z
if (pItemElem)8 v: z- G- l* I0 D: L0 Z
{% B- |( S. r/ U' e h
if (IsUsingItem(pItemElem))- ?, }, J2 f) Q4 r- l
{: a& Q- a# H8 P a" j
//这个位置无法放! w% e; ]# x5 T# O
nDestPos++;6 O+ S) m/ L( ^
}0 D/ a) k3 |+ Q* c7 l
}
% L5 o* l9 Q. K- K% O8 s BYTE nSrc = pInvSort->GetItemSrc(i);3 {# u% R3 C; e9 m
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
Q( \% B3 s- i7 i! R1 b if (pItemElem), Q: s6 R. I# L. H6 {0 r
{4 V7 Z: x! }! N1 t5 `' V
if (IsUsingItem(pItemElem))
% ], U% F6 L9 T" O {5 W; O5 O) R$ U( M/ D
//这个道具无法移动,跳过3 L& T9 b& z0 c6 A& J5 h1 t! o& ~
continue;
3 U# o. Y- `; Y2 q1 G }# O5 g- b7 Q6 C/ u
}else{
; n% |- ^. C9 L //空位置 不用动
( F! x" L* A2 K O5 y4 S continue;
, }, T7 q7 w H8 l( o }. A' r# E) g% b* B
//////////////////////////////////////////////////////////////////////////, c& Z* b; K) t7 y
//开始移动
! S5 O _# R$ y \+ O if (nSrc == nDestPos)
" _" o) W" i4 v( X' A {
- i) s3 y. Y4 K } //原地不动
: p1 D1 U {# p' v s6 i nDestPos++;
: }$ e% A/ p1 v' w8 h, s$ C6 t continue;
3 V) I: `6 [5 [) w7 ^& q' _ }6 I* v( X& m: d) P
pInvSort->MoveItem(i,nDestPos);* y7 L$ A" d9 K; R5 B% ]' ] @# A
g_DPlay.SendMoveItem(0,nSrc,nDestPos);3 ~' u( [- Q p4 Q8 A/ A
Sleep(5); t( G6 i1 O; A& d0 v& ~
//Error("移动 - %d->%d",nSrc,nDestPos);
P) H# H/ S% h o) X nDestPos++;
P# M9 Y( O0 o# O }4 _7 J2 |* R2 W, H
//取第一个元素的信息! L1 j5 E3 I; G, D
/*9 A, p7 C4 Z) n" }
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff); h6 h0 C2 i9 }' K2 c, S' J+ }
{" r8 _6 h" V+ R
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);$ n2 }0 O8 G1 C5 b
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
' o. o* m6 w8 l; e }
3 w9 W$ ^2 k1 b1 D4 M */
: b1 t8 Y& g, a% d //////////////////////////////////////////////////////////////////////////
9 F, Y6 S. h# y2 s0 g1 C" P break;7 T$ L7 W7 t9 G4 G) C& v
}
+ s. ~5 [6 b: ]/ u6 ~" @. H }
$ s. X3 q) Z: z6 T; m' X7 F% Z}
" s, ]9 c* k; @1 em_wndMenu.SetVisible(FALSE);
& b' B5 m6 M2 q& |4 d0 p3 y+ I$ f# c" v
--------------------------------------------------------------------------------------------------------3 R! K/ b( S9 Q- _3 q& D
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)* G7 K; R( B; o; |- b: }1 V
{
+ Y. S+ V! P& j* ~! s6 bBaseMouseCursor();: e/ }7 r) u; x6 W* o9 ?% Z: ?7 V
}
8 g1 [( _# f5 d- e在其下添加:
9 u0 ^; _ Q# G2 y: ]void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
3 `% Q) B# t0 e) F{
; {( ]0 r3 Z+ s$ x# Rm_wndMenu.DeleteAllMenu();2 ~: l: N) R. i& p' _0 b2 a
m_wndMenu.CreateMenu(this);" L& w- \1 p; `# F: r% `
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
) S: n0 @4 L- E: Z" E/ u1 A r& @5 y: \( d/ c6 R
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
0 a" \6 H0 e" Q7 e3 x{$ l5 t, }3 g. a/ ~, @$ r, d
//P以上级别才可以删除所有道具& u- H" ^; `+ G( l
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
9 Y& U1 N( e) L' k" y9 y}
% v& ~7 ^. `& A2 C8 |# \* Im_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );2 A+ J+ `/ G- F' U: F+ f8 a
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
6 v0 L) u0 n0 ~$ N" I# km_wndMenu.SetFocus();# i3 c7 k1 O0 N: P% x% p
}
% o' @& ~! U& V, }+ U------------------------------------------------------------------------------------------------------------5 L7 t& F- K7 j% D* z1 K
*************************
& e: a: {7 ^& I6 T- T0 g) JWndField.h文件! U& j# K( X% v9 ?
*************************) I$ a4 u" r( w' W* Z: n5 k
搜索:BOOL m_bReport;
, s, g( {" r- t+ Z# q5 i其后添加:
' i) {. K% o U, M. U. wCWndMenu m_wndMenu;
, H: R$ R9 K# a7 b( }' p搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
& b6 w8 F4 i5 i8 N7 ^其后添加:
3 Z' I$ D; O" uvirtual void OnRButtonUp(UINT nFlags, CPoint point);
5 C, `" K( {5 i! f: C3 l9 h) H' `
% \4 H- ~2 s: e+ i! r8 j, l2 R
4 Z) z4 O( g$ @9 y Y) f4 Y& G |
|