|
|
源文件中_Interface文件夹下WndField.cpp文件
6 N- |4 ~2 I8 h& M, I! \7 \搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
8 t% S5 ?- }# a) f2 g+ | H" T/ r- l( P" o4 P' h
struct sItem! M* D6 O& h: g3 I" U3 M
{3 _, j Q* _) ?/ Y/ e; z( b5 y
DWORD dwId;! x* r+ x% R2 `/ j1 N0 s
DWORD dwKind2;
; v3 z( @' `* M8 EDWORD dwItemId;
1 q: J0 V8 n" y# M: r( V' fBYTE nIndex;3 N7 s. s* b' e; D4 d: V
sItem(){
1 N5 a% }3 x# R' n+ r- X dwId = dwKind2 = dwItemId = nIndex = 0;% V% m! S/ c4 }. a% R" s
}% Z+ R7 ]- d( n1 I/ F$ {$ E5 ^
bool operator < (const sItem p2)
7 a' g. e2 b# H# X5 X, i; Y{
% m# V3 ~0 L5 I8 j7 S( r if (dwKind2 == p2.dwKind2)
8 J4 k1 Z3 U1 ?+ I' v0 h( s* X* Z' I {( E/ [( w; f% B0 f/ M3 j! C
return dwItemId < p2.dwItemId;
/ s. p/ D; X/ M7 O/ K# ~% j }else{
& c% S" {; W6 C( D4 V return dwKind2 < p2.dwKind2;
/ e8 m! U( N K; H) `& W" A }# E( t* ]% }( x/ P
}
, A. ]0 X' S0 J7 Y$ T$ @7 I/ p- a};
/ f4 F) R" j7 }# I3 i* }class CInventorySort) q! s2 J) N! Y8 o; N3 J
{. ^( i5 A; G U0 ~, n# g5 M
public:
7 [% A/ A3 ]7 u* V+ @ U* ~- q- mCInventorySort()! p$ l' S& m, U. j# `; l; S
{% a: \3 \4 F( x/ G! F# j$ Z* R3 t8 l% x
m_dwPos = 0;7 M7 R) b* _5 z; [
}4 F9 K2 P: P7 Z& m3 w8 c, i
~CInventorySort(){}! s4 D2 Q+ J; T- }! x6 k; k7 Z
private:" m1 F; b! L3 }- J( c0 J. ~- r
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
3 }) X+ u: C& Y9 I- t; S( e; j+ lDWORD m_dwPos;$ e5 e( m7 ]' B; f7 ]
public:
- |) {1 ^- u1 R7 M4 |0 {/ t, R& ]void Add(BYTE nIndex)
0 d1 M( z4 D. R- S+ m+ g# ^{
" z9 \0 I1 K7 p/ N5 }" j7 o( `5 \8 F if (m_dwPos >= MAX_INVENTORY)
, y& A- x# {+ x n& N {
1 Y( L1 v/ U# W# N( P return;
( p$ t! a) k/ k% J1 g8 V } S) f* r, v3 s/ o' h
m_Item[m_dwPos].nIndex = nIndex;
7 o, a: a j$ |1 u, J$ t m_Item[m_dwPos].dwId = m_dwPos;
, }' [/ m7 b; K9 h* ?+ }/ z( n m_dwPos++;
6 D ^0 H# N4 n- R# y}
4 P, M0 e, _1 vBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列, @+ n: \$ `! ^% E: |1 V$ W3 T
{- p4 d& X4 W% i: g: ]
for (int i=0;i<MAX_INVENTORY;i++)3 W- i# \, R4 Y e# n, f0 V5 n
{
7 K. a& d7 e. ]) I G! @6 K0 m if (m_Item.dwId == dwId): M; e- h) f2 n5 t- j
{
8 t; T! q$ G+ t) n6 R" B return m_Item.nIndex;) K( |4 P+ J$ [9 a: l
}
. T- r3 d% E7 P$ y }
2 T+ V4 N* }8 X0 H9 D return 255;8 E# N P: z' e2 Q6 Q8 ^
}
9 U2 x& e$ u0 n s6 g( rvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
" i+ [) Y# {% s( }: t# {- a) _/ K{4 N4 w3 Q1 L1 K# r
BYTE nTmp = 0;/ B# S+ l) O* t# C
bool bDest = false,bSrc = false;
3 J2 }5 U$ ], T0 A for (int i=0;i<MAX_INVENTORY;i++)) l1 c) B/ \2 O* r! C
{! c0 S7 W7 r. Y) [1 ?
if (dwSrcId == m_Item.dwId)# y+ i( {4 |& F G. O* T0 {
{1 o5 [- x5 C2 |/ S
//id相等 则 改变对应的dest和src
2 l2 m. h% A8 t nTmp = m_Item.nIndex;9 }& O& {& G# b, H" ]- g* W
m_Item.nIndex = dest;
5 l& P" z8 c+ N5 i! T, y' n }
W& w/ N b" E, w }. t6 S/ A. S9 i9 i o
//临时数据保存完毕,交换开始
. D) R2 u& \' i$ M1 V G2 L for (int i=0;i<MAX_INVENTORY;i++)- u; |, I% ]: {7 L
{5 Z7 U4 d6 k" [" x
if (dest == m_Item.nIndex)
# v: Y# m: G1 ?* c, M {8 Q) q4 G* m- a% V
//id相等 则 改变对应的dest和src) w3 L2 ~* r* k7 n
m_Item.nIndex = nTmp;2 E8 S# L# ^- v
}
3 G* ?4 d/ o3 E }
7 i% a4 H5 O: D}
6 j/ i. v% X' U, H" E};$ i" j. x1 m9 b2 }' M
-------------------------------------------------------------------------
0 l5 N. J- v+ N- |依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
* t1 v1 C9 w; o$ V搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
- ]. i4 s- F8 L- p紧靠其上添加:
# x% W3 l( S3 T/ q Aif( pWndBase == &m_wndMenu )! j- l% }/ B7 v2 ]" ]
{
1 ^7 l, u i2 `; V3 j switch( nID )
$ @; s3 @) r' w2 \, Z {
8 ~0 P+ |( _2 P+ n3 B( l+ R case 2:
* ?8 o. v7 z) b+ i {+ c" j8 q/ ] t+ ?8 E2 N3 _* R- F! V
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);. k% A1 D* _, P1 o2 S& J$ l2 U
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)) Z( K! g M- p' z+ Q& y2 ?
{3 X8 A9 t0 Y+ k. s) k% d6 h) E
break;5 `' h$ D: H9 f! o& f. u
}2 ]/ r$ O% Z0 g8 |. q0 V8 {
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)% d( i& G2 V) i' L C+ u
{
F$ S' l- T7 j M CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
% w$ f, V5 X5 D* m+ n0 G& n if( !pItemElem )
- y; P, @5 D! @! ^8 c. ? continue;
5 _+ J/ A! \+ d; x if(pItemElem->GetExtra() > 0)
$ ?4 m' G/ m! }( j! R5 X0 u continue;
z8 K* k* O) l1 T if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 4 l& }$ i( X7 y, b
continue;) i1 l; |7 w2 f; ^! L0 G |3 q# ^ a
if( g_pPlayer->IsUsing( pItemElem ) )% X* L1 j3 E) a( C# x6 a
continue;3 L7 |5 h" w9 H7 N& X" v7 h; y
if( pItemElem->IsUndestructable() == TRUE )
* p! N) D" N8 d8 l) O {% u3 ^. m& {$ @5 H7 K8 w$ D
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );) ^3 h) N" G* X- ?9 k# s* F
continue;
1 Q4 ^5 r3 t: t+ ?) `8 F }( Q& j5 o, X% R, J3 l+ ^% R
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
: R' F+ g7 H/ \6 c( r }
J9 a% U" x+ D+ R4 l6 X3 P. S5 p# i break;
% l) B: U' `. p; }7 a) o3 m9 l }* o9 J8 T) o1 ~, O1 H) a9 S a F
case 1:# @- O2 t3 i1 w- U$ |
{) @8 o$ j$ k: @- x% l
//整理背包
, d2 @" M# f) [; x: z //////////////////////////////////////////////////////////////////////////1 V6 L8 \" z) e3 `& V
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );+ X. ^# E- ^. w5 C
//////////////////////////////////////////////////////////////////////////2 l9 O! f2 K, o3 I& h0 |8 @
//////////////////////////////////////////////////////////////////////////! ~- u$ ?) U3 B! A! G7 M
CInventorySort* pInvSort = new CInventorySort;
3 T& N. M: C0 L/ {4 c* a3 W; V" ~ vector <sItem> vItem;* _2 \* g" ]- k3 |! f2 y. D0 e4 B
vItem.resize(MAX_INVENTORY);//初始化大小- V& {1 D; [, X" O! I& _, V6 ~
////////////////////////////////////////////////////////////////////////// z' y8 @4 U% K7 o8 A! A' C H
//填充数据
. [ n+ y6 ~- U/ S! n/ g2 q" p for (int i=0;i<MAX_INVENTORY;i++)
8 {4 ?5 a4 _3 e0 L4 q1 M {1 _/ C- `5 {1 O' i. b& t6 v" @
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);' v! k9 I) C; v9 D4 x
if (!pItemElem)+ L: K5 V1 V4 W
{
/ z9 i4 K$ T, |3 s i+ }5 A X vItem.dwKind2 = 0xffffffff;
2 K8 h8 a3 p0 c" m vItem.dwItemId = 0xffffffff;& R) Q: v5 |. g: K
vItem.nIndex = i;. \$ z& a4 }( n0 f* q( e8 r" |
}else {
: C1 y& n$ ~* l: D7 a ItemProp* pProp = pItemElem->GetProp();2 S3 w4 P( _6 J4 ^. p; W) G! n4 m
vItem.dwKind2 = pProp->dwItemKind2;
8 }$ }- Z( ^4 N+ E) ~$ P* h, Y vItem.dwItemId = pItemElem->m_dwItemId;2 ]" K: a4 O0 j: m# R4 t* _
vItem.nIndex = i;2 h$ C L, G: @4 \: I
}* W8 S! D8 d8 H8 `& @4 h
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
) p" k- p% x J0 h0 h& M }+ E( x0 h5 i4 U4 l4 o% Q
//////////////////////////////////////////////////////////////////////////
9 ?9 g. l1 o1 p! f6 E sort(vItem.begin(),vItem.end());//排序2 q2 D6 W' j y, A0 J4 k
//////////////////////////////////////////////////////////////////////////' `: x8 ~0 e: @! }; U* ~
//交换
1 L9 ~9 i+ L! A0 I' g2 f for (size_t i=0;i<vItem.size();i++) i$ D) |- X5 y+ Z
{
+ U. H" F4 c8 M3 g9 d //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);' R9 S" D" {' S' ?5 a
pInvSort->Add(vItem.nIndex);
7 `) G/ {; K7 e4 ^3 ]0 |+ ?/ P }
5 l$ i4 \1 S8 i' q. {* ` BYTE nDestPos = 0;+ G. j6 i1 h e. h/ d
for (int i=0;i<MAX_INVENTORY;i++)
$ C# q7 r8 Y& F* |) T6 q& } {
* ]/ k% y3 H9 R& F CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
+ Q0 x/ C0 u& \2 t5 K; s* q if (pItemElem)
5 m! i& q- q& b: n$ i3 ], ^ {( I( O! I, m& A! ^! ]1 [; u) ^
if (IsUsingItem(pItemElem))3 B+ k2 G% i( f. q8 [
{
2 w4 }' m6 ]# W f5 P. i: y0 h //这个位置无法放
* ?& D1 c1 {1 d1 B" `2 A4 \ nDestPos++;7 L0 D4 D4 ^0 ~' J- e
}
6 z, I0 p) B- y) w5 T: v }
6 O1 k3 x: W+ x- C3 ^ BYTE nSrc = pInvSort->GetItemSrc(i);
* g! o4 |9 X. l pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);# m$ z6 h2 _4 `
if (pItemElem)
$ P9 w( [9 b1 f9 P `: h' L. @: [3 X2 k {9 P2 [: a! _; c# q; u
if (IsUsingItem(pItemElem))
0 b/ `. V; }# ~; P+ e {
0 M0 p( E n. ? //这个道具无法移动,跳过
) P- e9 g0 z% v+ e continue;
. r( E/ | ^, g% I9 n& W2 f. w }
" J/ q9 q$ R8 l5 a }else{
% r- y/ [( C1 d //空位置 不用动
* `% l) ?2 _1 F continue;( X' @2 n% u8 S8 {- y% \
}
3 A4 L( J2 B: n. s/ e2 S //////////////////////////////////////////////////////////////////////////
! a! I3 H, X: l3 M/ s //开始移动
: G/ b# n) W' l* o if (nSrc == nDestPos)$ T9 T5 @1 ~3 A0 P
{. {$ c& D/ c. s1 C, l* h
//原地不动2 d3 j: K& z1 L u; j
nDestPos++;
, k r, @# G: }5 Y& V9 F5 K continue;+ d$ M- Z+ x7 ^4 P7 u j
}5 Z S$ F& i2 a& z; v
pInvSort->MoveItem(i,nDestPos);, B* B% i" Y- j. X& s" _1 D! o8 ?
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
" u4 b. v9 N0 J5 U. p, j% i5 d Sleep(5);, ]4 C8 p+ q6 u8 P
//Error("移动 - %d->%d",nSrc,nDestPos);
' m" u7 s* b$ v* E" G( m nDestPos++;9 R9 k5 A0 K( _2 W
}7 V+ i4 p( }7 X! o) ?/ a
//取第一个元素的信息, C4 U Y7 C6 T/ `
/*8 G, w8 p5 R' E5 c
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
9 _- l+ c9 a# R: v# I9 a {) r) q/ W# F/ U+ _& ?$ ?' B: a
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
2 Q/ q+ d7 I6 c# f: | g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);% ~3 G( o0 V# S
}
+ |2 R) [$ i5 M! `2 N */
# ~# b+ t* G0 c* H; z+ q! B3 m //////////////////////////////////////////////////////////////////////////" P2 Q4 x0 r$ ~0 h; O- Z* Q' F
break;3 ^ l2 H' e) u6 B0 J% k
}
" V1 w6 ~. \2 ~. G% T }
% P7 K8 c% @6 y' F/ c2 j) {}* U: {9 u( D& T' A% @
m_wndMenu.SetVisible(FALSE);
% o, A1 L k3 H2 f$ v0 i! c: b4 R/ X2 p' D- b5 X& I& `4 t* u
--------------------------------------------------------------------------------------------------------& c B9 J" V) @( e- ^$ y$ l) O
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)# `4 q+ N6 G3 ^9 `' N7 r
{# b9 b1 {' ]1 I! f. D7 p3 h" D* N" b
BaseMouseCursor();# y9 l D4 n% ~( I, M* L, I, a! L
}
0 c; Z1 I- Q! B9 j3 U在其下添加:7 F/ d8 x) {; o3 ~( M* a
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
8 B. G' \ d# D0 m& u @" q% _. L{; P# s" r/ u' T, N, e
m_wndMenu.DeleteAllMenu();
) Y# T4 W2 K6 R0 i: l) V' q1 m8 Wm_wndMenu.CreateMenu(this);
, n y6 X3 h( t3 ]m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
3 e: a4 B# `, L
. q6 `) V* k% ~( D8 rif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)): c, \! ^( R; k' M
{
8 g* l) F0 H$ t; O. P3 i+ Y4 _" C //P以上级别才可以删除所有道具$ q# L S9 j/ m1 Q5 R* U5 C
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear"); N1 J6 [3 k: Z% C
}
3 |4 z6 s0 w& X9 H3 f$ @" b9 km_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );$ H) I, ^# ~7 w% b3 Q
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );- e# o# e) Z" L' O3 @7 M
m_wndMenu.SetFocus();
& F8 a! ^# m! X* |4 g4 j; P}
) z/ A, a9 E+ b------------------------------------------------------------------------------------------------------------9 N: I# u; N/ C! q; y1 X+ X
*************************
3 Q# r# u# P- H! Y$ i. v7 h5 ~WndField.h文件
" O/ r; B7 g, r/ m6 w, o* C*************************
9 @; V1 P3 S% U: y0 G搜索:BOOL m_bReport;
. T2 Z% ]0 O% [; l; a7 K) j* |0 A其后添加:
0 R y$ l& T9 b E. Y7 i0 V, vCWndMenu m_wndMenu;
0 l3 l0 \' Y, m" T) P. n搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);- A! p& }' P8 G
其后添加:
8 U/ R9 ?/ W+ @( P" dvirtual void OnRButtonUp(UINT nFlags, CPoint point);
# r( }0 V6 J& x
6 O9 g$ R* _/ W- y3 J: |- p, I. U! h) w
|
|